diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 50cc68a31..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,164 +0,0 @@ -aliases: - - &install_yarn_version - name: Install specific Yarn version - command: | - curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.16.0 - echo 'export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"' >> $BASH_ENV - - - &restore_yarn_cache - name: Restore Yarn cache - keys: - - yarn-{{ .Branch }}-packages-{{ checksum "yarn.lock" }} - - - &save_yarn_cache - name: Save Yarn cache - key: yarn-{{ .Branch }}-packages-{{ checksum "yarn.lock" }} - paths: - - ~/.cache/yarn - - - &run_yarn_install - name: Install dependencies - command: yarn install --pure-lockfile --ignore-engines - -defaults: &defaults - working_directory: ~/algoliasearch-client-javascript - parameters: - cimg_version: - type: string - node_version: - type: string - default: '' - docker: - - image: cimg/node:<< parameters.cimg_version >> - -version: 2.1 -jobs: - test_build: - description: Testing build & Test Size & Declarations File - <<: *defaults - steps: - - checkout - - run: *install_yarn_version - - restore_cache: *restore_yarn_cache - - run: *run_yarn_install - - save_cache: *save_yarn_cache - - run: - name: Build - command: yarn build - - run: - name: Test size - command: yarn test:build-size - - run: - name: Validate declarations - command: yarn test:build-declarations - - test_lint: - description: Testing coding style - <<: *defaults - steps: - - checkout - - run: *install_yarn_version - - restore_cache: *restore_yarn_cache - - run: *run_yarn_install - - save_cache: *save_yarn_cache - - run: - name: Lint tests - command: yarn test:lint - - test_types: - description: Testing type checking - <<: *defaults - steps: - - checkout - - run: *install_yarn_version - - restore_cache: *restore_yarn_cache - - run: *run_yarn_install - - save_cache: *save_yarn_cache - - run: - name: Lint tests - command: yarn test:types - - test_unit: - description: Testing code against node << parameters.node_version >> - <<: *defaults - steps: - - checkout - - run: - name: Install node version - command: | - if [ '<< parameters.node_version >>' ]; then - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash; - export NVM_DIR="$HOME/.nvm"; - [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"; - nvm install '<< parameters.node_version >>'; - fi; - - run: *install_yarn_version - - restore_cache: *restore_yarn_cache - - run: *run_yarn_install - - save_cache: *save_yarn_cache - - run: - name: Unit Tests - command: yarn test:unit --maxWorkers=4 - - test_browser: - description: Testing code within browsers - <<: *defaults - steps: - - checkout - - run: *install_yarn_version - - restore_cache: *restore_yarn_cache - - run: *run_yarn_install - - save_cache: *save_yarn_cache - - run: - name: Build - command: yarn build - - run: - name: Browser tests - command: yarn test:browser-ci - - release: - working_directory: ~/algoliasearch-client-javascript - description: Perform a new release of the JavaScript client - docker: - - image: cimg/node:14.17 - steps: - - checkout - - run: - command: yarn install - - run: - command: | - if [[ -z "$GITHUB_TOKEN" ]]; then echo '$GITHUB_TOKEN is not set'; exit 1; fi - yarn shipjs trigger - -workflows: - version: 2 - ci: - jobs: - - test_unit: - # workaround: cimg/node:8 certificate is unsigned, we use nvm instead - cimg_version: '14.17' - node_version: '8.17' - name: 'test_unit_8' - - test_unit: - cimg_version: '14.17' - name: 'test_unit_14' - - test_lint: - cimg_version: '12.22' - - test_types: - cimg_version: '12.22' - - test_build: - cimg_version: '12.16.2' - - test_browser: - cimg_version: '12.16.2' - - release: - requires: - - test_unit_8 - - test_unit_14 - - test_lint - - test_types - - test_build - - test_browser - filters: - branches: - only: - - master diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json deleted file mode 100644 index 03a57326c..000000000 --- a/.codesandbox/ci.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "packages": ["packages/*"], - "sandboxes": ["github/algolia/create-instantsearch-app/tree/templates/javascript-client"] -} diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 4464e73ac..000000000 --- a/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -**/node_modules -**/.DS_Store diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 7db3e337b..000000000 --- a/.editorconfig +++ /dev/null @@ -1,10 +0,0 @@ -root = true - -[*] -end_of_line = lf -insert_final_newline = true -indent_style = space -indent_size = 2 - -[*.{js}] -charset = utf-8 diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 77abb61b4..000000000 --- a/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -**/node_modules/** -playground/** -**/dist/** -specs/** -coverage/** diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 7fe06168c..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,111 +0,0 @@ -const { resolve } = require('path'); - -const PACKAGE_DIR = './packages'; - -const noExtraneousOverrides = require('./scripts/packages').map(package => { - return { - files: [`${PACKAGE_DIR}/${package}/**/*`], - rules: { - 'import/no-extraneous-dependencies': [ - 'error', - { - devDependencies: true, - optionalDependencies: true, - peerDependencies: true, - packageDir: [resolve(__dirname, PACKAGE_DIR, package)], - }, - ], - }, - }; -}); - -module.exports = { - plugins: ['functional', 'sonarjs', 'wdio', 'simple-import-sort', 'promise'], - extends: [ - 'algolia', - 'algolia/jest', - 'algolia/typescript', - 'plugin:functional/recommended', - 'plugin:sonarjs/recommended', - 'plugin:wdio/recommended', - 'plugin:promise/recommended', - ], - rules: { - 'eslint-comments/disable-enable-pair': ['error', { allowWholeFile: true }], - 'simple-import-sort/sort': 'error', - 'max-len': [1, 120, 2, { ignoreComments: true }], - 'prettier/prettier': ['error', {}, { usePrettierrc: true }], - 'object-shorthand': ['error', 'always', { avoidExplicitReturnArrows: true }], - 'lines-between-class-members': ['error', 'always'], - 'newline-before-return': ['error'], - 'import/no-extraneous-dependencies': ['error', { packageDir: './', devDependencies: true }], - 'import/extensions': ['off'], - 'no-bitwise': ['off'], - 'valid-jsdoc': ['off'], - 'functional/no-expression-statement': ['off'], - 'functional/no-conditional-statement': ['off'], - 'functional/no-throw-statement': ['off'], - 'functional/no-mixed-type': ['off'], - 'promise/always-return': ['off'], - 'functional/functional-parameters': ['off'], - 'functional/no-return-void': ['off'], - '@typescript-eslint/no-triple-slash-reference': ['off'], - }, - settings: { - 'import/resolver': { - alias: { - map: [ - ['^algoliasearch', './packages/algoliasearch/src'], - ['@algolia/cache-browser-local-storage', './packages/cache-browser-local-storage/src'], - ['@algolia/cache-common', './packages/cache-common/src'], - ['@algolia/cache-in-memory', './packages/cache-in-memory/src'], - ['@algolia/client-account', './packages/client-account/src'], - ['@algolia/client-analytics', './packages/client-analytics/src'], - ['@algolia/client-common', './packages/client-common/src'], - ['@algolia/client-personalization', './packages/client-personalization/src'], - ['@algolia/client-recommendation', './packages/client-recommendation/src'], - ['@algolia/client-search', './packages/client-search/src'], - ['@algolia/logger-common', './packages/logger-common/src'], - ['@algolia/logger-console', './packages/logger-console/src'], - ['@algolia/recommend', './packages/recommend/src'], - ['@algolia/requester-browser-xhr', './packages/requester-browser-xhr/src'], - ['@algolia/requester-common', './packages/requester-common/src'], - ['@algolia/requester-node-http', './packages/requester-node-http/src'], - ['@algolia/transporter', './packages/transporter/src'], - ], - extensions: ['.ts'], - }, - node: { - extensions: ['.ts'], - }, - }, - }, - overrides: [ - ...noExtraneousOverrides, - { - files: ['**/__tests__/**'], - rules: { - 'functional/immutable-data': 0, - 'import/no-extraneous-dependencies': 0, - 'functional/no-let': 0, - 'functional/no-this-expression': 0, - 'functional/no-loop-statement': 0, - 'functional/no-try-statement': 0, - '@typescript-eslint/explicit-function-return-type': 0, - 'functional/prefer-readonly-type': 0, - 'sonarjs/no-duplicate-string': 0, - 'jest/expect-expect': 0, - }, - }, - { - files: ['**/src/types/*Response.ts'], - rules: { - 'functional/prefer-readonly-type': 0, - }, - }, - ], - globals: { - testing: 'readonly', - browser: 'readonly', - }, -}; diff --git a/.github/ISSUE_TEMPLATE/Bug_report.yml b/.github/ISSUE_TEMPLATE/Bug_report.yml new file mode 100644 index 000000000..d01e1b390 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/Bug_report.yml @@ -0,0 +1,57 @@ +name: Bug Report +description: File a bug report. +title: '[bug]: ' +labels: ['bug', 'triage'] +body: + - type: markdown + attributes: + value: | + ## Please help us help you! + + > [!IMPORTANT] + > This repository is fully generated and all pull request will be rejected. + > If you wish to contribute, please refer to the [contribution guidelines](https://github.com/algolia/api-clients-automation/blob/main/CONTRIBUTING.md) on the `api-clients-automation` repository. + + Before filing your issue, ask yourself: + - Is there an issue already opened for this bug? + - Can I reproduce it? + + If you are not sure about the origin of the issue, or if it impacts your customer experience, please contact [our support team](https://alg.li/support). + - type: textarea + attributes: + label: Description + description: A clear and concise description of what the bug is. + validations: + required: true + - type: dropdown + id: client + attributes: + label: Client + description: Which API are you targeting? + options: + - All + - AB testing + - Analytics + - Ingestion + - Insights + - Monitoring + - Personalization + - Query-Suggestions + - Recommend + - Search + - Crawler + validations: + required: true + - type: input + id: version + attributes: + label: Version + description: The version of the client you are using. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Relevant log output + description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. + render: shell diff --git a/.github/workflows/do-not-edit-this-repository.yml b/.github/workflows/do-not-edit-this-repository.yml new file mode 100644 index 000000000..bd53e40dc --- /dev/null +++ b/.github/workflows/do-not-edit-this-repository.yml @@ -0,0 +1,24 @@ +name: Do not edit files in this repository + +on: + pull_request_target: + types: + - opened + - synchronize + - reopen + branches: + - 'main' + +jobs: + auto_close_pr: + name: Close PR + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Close PR + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + gh pr close "${PR_NUMBER}" -d -c "Thanks for contributing to our API clients! Sorry to close your PR, but this repository is fully generated, you can port your changes to [the API Clients Automation repository](https://github.com/algolia/api-clients-automation). If you need some guidance, feel free to [open an issue](https://github.com/algolia/api-clients-automation/issues) or [read our contribution guide](https://api-clients-automation.netlify.app/docs/introduction)." diff --git a/.github/workflows/issue.yml b/.github/workflows/issue.yml new file mode 100644 index 000000000..172c44007 --- /dev/null +++ b/.github/workflows/issue.yml @@ -0,0 +1,60 @@ +name: 'Issue sync with Jira' +on: + issues: + types: [opened] + +permissions: + issues: write + contents: read + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - name: Create ticket + uses: actions/github-script@v7 + with: + script: | + const action = context.payload.action; + if (action !== 'opened') { + return; + } + const title = context.payload.issue.title; + const body = context.payload.issue.body; + + const res = await fetch('https://algolia.atlassian.net/rest/api/2/issue', { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Authorization': `Basic ${{ secrets.JIRA_TOKEN }}` + }, + body: JSON.stringify({ + fields: { + description: `Issue created by ${context.actor} at ${context.payload.issue.html_url} \n\n${body}`, + issuetype: { + id: '10001' + }, + parent: { + key: 'DI-3523' + }, + project: { + id: '10118' + }, + components: [ + { + id: '10872' + } + ], + summary: `[GH-ISSUE] ${title}` + }, + update: {} + }) + }); + + if (!res.ok) { + throw new Error(`Failed to create ticket: ${res.statusText} (${res.status}) - ${await res.text()}`); + } + + const data = await res.json(); + console.log(`Created ticket: ${data.key}`); diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..3a566c333 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,36 @@ +name: Release packages + +on: + push: + branches: + - main + +jobs: + release: + name: Publish + runs-on: ubuntu-22.04 + if: "startsWith(github.event.head_commit.message, 'chore: release')" + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Node + uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: yarn + + - name: Install JavaScript dependencies + shell: bash + run: yarn install + + - name: Build clients + shell: bash + run: yarn build + + - name: Publish to NPM + shell: bash + run: yarn release:publish + env: + NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} diff --git a/.gitignore b/.gitignore index d3371af10..85746cabc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,16 @@ +**dist +**.openapi-generator* + .DS_Store -coverage -node_modules -dist -.vscode -*.umd.js -yarn-error.log .env + +yarn-error.log +lerna-debug.log + +.yarn/* +!.yarn/releases +!.yarn/plugins + +node_modules + +.nx diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..2346004aa --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +//registry.npmjs.org/:_authToken=${NPM_AUTH_TOKEN} \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index d494f460a..7d41c735d 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -12.16.2 +22.14.0 diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 4cc6aa622..000000000 --- a/.prettierrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "trailingComma": "es5", - "singleQuote": true, - "printWidth": 100 -} diff --git a/.yarn/releases/yarn-4.7.0.cjs b/.yarn/releases/yarn-4.7.0.cjs new file mode 100755 index 000000000..04022e16f --- /dev/null +++ b/.yarn/releases/yarn-4.7.0.cjs @@ -0,0 +1,935 @@ +#!/usr/bin/env node +/* eslint-disable */ +//prettier-ignore +(()=>{var j3e=Object.create;var gT=Object.defineProperty;var G3e=Object.getOwnPropertyDescriptor;var W3e=Object.getOwnPropertyNames;var Y3e=Object.getPrototypeOf,V3e=Object.prototype.hasOwnProperty;var ve=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var It=(t,e)=>()=>(t&&(e=t(t=0)),e);var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Vt=(t,e)=>{for(var r in e)gT(t,r,{get:e[r],enumerable:!0})},K3e=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of W3e(e))!V3e.call(t,a)&&a!==r&&gT(t,a,{get:()=>e[a],enumerable:!(o=G3e(e,a))||o.enumerable});return t};var et=(t,e,r)=>(r=t!=null?j3e(Y3e(t)):{},K3e(e||!t||!t.__esModule?gT(r,"default",{value:t,enumerable:!0}):r,t));var Si={};Vt(Si,{SAFE_TIME:()=>cW,S_IFDIR:()=>KD,S_IFLNK:()=>JD,S_IFMT:()=>Hu,S_IFREG:()=>ow});var Hu,KD,ow,JD,cW,uW=It(()=>{Hu=61440,KD=16384,ow=32768,JD=40960,cW=456789e3});var sr={};Vt(sr,{EBADF:()=>ho,EBUSY:()=>J3e,EEXIST:()=>t_e,EINVAL:()=>X3e,EISDIR:()=>e_e,ENOENT:()=>Z3e,ENOSYS:()=>z3e,ENOTDIR:()=>$3e,ENOTEMPTY:()=>n_e,EOPNOTSUPP:()=>i_e,EROFS:()=>r_e,ERR_DIR_CLOSED:()=>dT});function Nl(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function J3e(t){return Nl("EBUSY",t)}function z3e(t,e){return Nl("ENOSYS",`${t}, ${e}`)}function X3e(t){return Nl("EINVAL",`invalid argument, ${t}`)}function ho(t){return Nl("EBADF",`bad file descriptor, ${t}`)}function Z3e(t){return Nl("ENOENT",`no such file or directory, ${t}`)}function $3e(t){return Nl("ENOTDIR",`not a directory, ${t}`)}function e_e(t){return Nl("EISDIR",`illegal operation on a directory, ${t}`)}function t_e(t){return Nl("EEXIST",`file already exists, ${t}`)}function r_e(t){return Nl("EROFS",`read-only filesystem, ${t}`)}function n_e(t){return Nl("ENOTEMPTY",`directory not empty, ${t}`)}function i_e(t){return Nl("EOPNOTSUPP",`operation not supported, ${t}`)}function dT(){return Nl("ERR_DIR_CLOSED","Directory handle was closed")}var zD=It(()=>{});var wa={};Vt(wa,{BigIntStatsEntry:()=>cm,DEFAULT_MODE:()=>ET,DirEntry:()=>mT,StatEntry:()=>lm,areStatsEqual:()=>CT,clearStats:()=>XD,convertToBigIntStats:()=>o_e,makeDefaultStats:()=>AW,makeEmptyStats:()=>s_e});function AW(){return new lm}function s_e(){return XD(AW())}function XD(t){for(let e in t)if(Object.hasOwn(t,e)){let r=t[e];typeof r=="number"?t[e]=0:typeof r=="bigint"?t[e]=BigInt(0):yT.types.isDate(r)&&(t[e]=new Date(0))}return t}function o_e(t){let e=new cm;for(let r in t)if(Object.hasOwn(t,r)){let o=t[r];typeof o=="number"?e[r]=BigInt(o):yT.types.isDate(o)&&(e[r]=new Date(o))}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 CT(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,o=e;return!(r.atimeNs!==o.atimeNs||r.mtimeNs!==o.mtimeNs||r.ctimeNs!==o.ctimeNs||r.birthtimeNs!==o.birthtimeNs)}var yT,ET,mT,lm,cm,IT=It(()=>{yT=et(ve("util")),ET=33188,mT=class{constructor(){this.name="";this.path="";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},lm=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=ET;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},cm=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(ET);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}}});function A_e(t){let e,r;if(e=t.match(c_e))t=e[1];else if(r=t.match(u_e))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function f_e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(a_e))?t=`/${e[1]}`:(r=t.match(l_e))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function ZD(t,e){return t===Ae?pW(e):wT(e)}var aw,Bt,mr,Ae,V,fW,a_e,l_e,c_e,u_e,wT,pW,Ba=It(()=>{aw=et(ve("path")),Bt={root:"/",dot:".",parent:".."},mr={home:"~",nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",virtual:"__virtual__",pnpJs:".pnp.js",pnpCjs:".pnp.cjs",pnpData:".pnp.data.json",pnpEsmLoader:".pnp.loader.mjs",rc:".yarnrc.yml",env:".env"},Ae=Object.create(aw.default),V=Object.create(aw.default.posix);Ae.cwd=()=>process.cwd();V.cwd=process.platform==="win32"?()=>wT(process.cwd()):process.cwd;process.platform==="win32"&&(V.resolve=(...t)=>t.length>0&&V.isAbsolute(t[0])?aw.default.posix.resolve(...t):aw.default.posix.resolve(V.cwd(),...t));fW=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)};Ae.contains=(t,e)=>fW(Ae,t,e);V.contains=(t,e)=>fW(V,t,e);a_e=/^([a-zA-Z]:.*)$/,l_e=/^\/\/(\.\/)?(.*)$/,c_e=/^\/([a-zA-Z]:.*)$/,u_e=/^\/unc\/(\.dot\/)?(.*)$/;wT=process.platform==="win32"?f_e:t=>t,pW=process.platform==="win32"?A_e:t=>t;Ae.fromPortablePath=pW;Ae.toPortablePath=wT});async function $D(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let o=[];for(let a of r)for(let n of r)o.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(o),e.indexPath}async function hW(t,e,r,o,a){let n=t.pathUtils.normalize(e),u=r.pathUtils.normalize(o),A=[],p=[],{atime:h,mtime:E}=a.stableTime?{atime:H0,mtime:H0}:await r.lstatPromise(u);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,E]}),await BT(A,p,t,n,r,u,{...a,didParentExist:!0});for(let w of A)await w();await Promise.all(p.map(w=>w()))}async function BT(t,e,r,o,a,n,u){let A=u.didParentExist?await gW(r,o):null,p=await a.lstatPromise(n),{atime:h,mtime:E}=u.stableTime?{atime:H0,mtime:H0}:p,w;switch(!0){case p.isDirectory():w=await h_e(t,e,r,o,A,a,n,p,u);break;case p.isFile():w=await m_e(t,e,r,o,A,a,n,p,u);break;case p.isSymbolicLink():w=await y_e(t,e,r,o,A,a,n,p,u);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(u.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((w||A?.mtime?.getTime()!==E.getTime()||A?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(o,h,E)),w=!0),(A===null||(A.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(o,p.mode&511)),w=!0)),w}async function gW(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function h_e(t,e,r,o,a,n,u,A,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(o,{mode:A.mode})}catch(D){if(D.code!=="EEXIST")throw D}}),h=!0);let E=await n.readdirPromise(u),w=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let D of E.sort())await BT(t,e,r,r.pathUtils.join(o,D),n,n.pathUtils.join(u,D),w)&&(h=!0);else(await Promise.all(E.map(async b=>{await BT(t,e,r,r.pathUtils.join(o,b),n,n.pathUtils.join(u,b),w)}))).some(b=>b)&&(h=!0);return h}async function g_e(t,e,r,o,a,n,u,A,p,h){let E=await n.checksumFilePromise(u,{algorithm:"sha1"}),w=420,D=A.mode&511,b=`${E}${D!==w?D.toString(8):""}`,C=r.pathUtils.join(h.indexPath,E.slice(0,2),`${b}.dat`),T;(ue=>(ue[ue.Lock=0]="Lock",ue[ue.Rename=1]="Rename"))(T||={});let N=1,U=await gW(r,C);if(a){let le=U&&a.dev===U.dev&&a.ino===U.ino,ce=U?.mtimeMs!==p_e;if(le&&ce&&h.autoRepair&&(N=0,U=null),!le)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1}let J=!U&&N===1?`${C}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,te=!1;return t.push(async()=>{if(!U&&(N===0&&await r.lockPromise(C,async()=>{let le=await n.readFilePromise(u);await r.writeFilePromise(C,le)}),N===1&&J)){let le=await n.readFilePromise(u);await r.writeFilePromise(J,le);try{await r.linkPromise(J,C)}catch(ce){if(ce.code==="EEXIST")te=!0,await r.unlinkPromise(J);else throw ce}}a||await r.linkPromise(C,o)}),e.push(async()=>{U||(await r.lutimesPromise(C,H0,H0),D!==w&&await r.chmodPromise(C,D)),J&&!te&&await r.unlinkPromise(J)}),!1}async function d_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(u);await r.writeFilePromise(o,h)}),!0}async function m_e(t,e,r,o,a,n,u,A,p){return p.linkStrategy?.type==="HardlinkFromIndex"?g_e(t,e,r,o,a,n,u,A,p,p.linkStrategy):d_e(t,e,r,o,a,n,u,A,p)}async function y_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(ZD(r.pathUtils,await n.readlinkPromise(u)),o)}),!0}var H0,p_e,vT=It(()=>{Ba();H0=new Date(456789e3*1e3),p_e=H0.getTime()});function eS(t,e,r,o){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let u=t.pathUtils.join(e,n);return Object.assign(t.statSync(u),{name:n,path:void 0})};return new lw(e,a,o)}var lw,dW=It(()=>{zD();lw=class{constructor(e,r,o={}){this.path=e;this.nextDirent=r;this.opts=o;this.closed=!1}throwIfClosed(){if(this.closed)throw dT()}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<"u"?e(null,r):Promise.resolve(r)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<"u"?e(null):Promise.resolve()}closeSync(){this.throwIfClosed(),this.opts.onClose?.(),this.closed=!0}}});function mW(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var yW,tS,EW=It(()=>{yW=ve("events");IT();tS=class t extends yW.EventEmitter{constructor(r,o,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=o,this.bigint=a,this.lastStats=this.stat()}static create(r,o,a){let n=new t(r,o,a);return n.start(),n}start(){mW(this.status,"ready"),this.status="running",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit("change",this.lastStats,this.lastStats)},3)}stop(){mW(this.status,"running"),this.status="stopped",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit("stop")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let r=this.bigint?new cm:new lm;return XD(r)}}makeInterval(r){let o=setInterval(()=>{let a=this.stat(),n=this.lastStats;CT(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?o:o.unref()}registerChangeListener(r,o){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(o))}unregisterChangeListener(r){this.removeListener("change",r);let o=this.changeListeners.get(r);typeof o<"u"&&clearInterval(o),this.changeListeners.delete(r)}unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())this.unregisterChangeListener(r)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let r of this.changeListeners.values())r.ref();return this}unref(){for(let r of this.changeListeners.values())r.unref();return this}}});function um(t,e,r,o){let a,n,u,A;switch(typeof r){case"function":a=!1,n=!0,u=5007,A=r;break;default:({bigint:a=!1,persistent:n=!0,interval:u=5007}=r),A=o;break}let p=rS.get(t);typeof p>"u"&&rS.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=tS.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(A,{persistent:n,interval:u}),h}function q0(t,e,r){let o=rS.get(t);if(typeof o>"u")return;let a=o.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),o.delete(e)))}function j0(t){let e=rS.get(t);if(!(typeof e>"u"))for(let r of e.keys())q0(t,r)}var rS,DT=It(()=>{EW();rS=new WeakMap});function E_e(t){let e=t.match(/\r?\n/g);if(e===null)return IW.EOL;let r=e.filter(a=>a===`\r +`).length,o=e.length-r;return r>o?`\r +`:` +`}function G0(t,e){return e.replace(/\r?\n/g,E_e(t))}var CW,IW,hf,qu,W0=It(()=>{CW=ve("crypto"),IW=ve("os");vT();Ba();hf=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let o=[e];for(;o.length>0;){let a=o.shift();if((await this.lstatPromise(a)).isDirectory()){let u=await this.readdirPromise(a);if(r)for(let A of u.sort())o.push(this.pathUtils.join(a,A));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let o=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,CW.createHash)(r),A=0;for(;(A=await this.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await this.closePromise(o)}}async removePromise(e,{recursive:r=!0,maxRetries:o=5}={}){let a;try{a=await this.lstatPromise(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(a.isDirectory()){if(r){let n=await this.readdirPromise(e);await Promise.all(n.map(u=>this.removePromise(this.pathUtils.resolve(e,u))))}for(let n=0;n<=o;n++)try{await this.rmdirPromise(e);break}catch(u){if(u.code!=="EBUSY"&&u.code!=="ENOTEMPTY")throw u;nsetTimeout(A,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let o;try{o=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(o.isDirectory()){if(r)for(let a of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,a));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{await this.mkdirPromise(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&await this.chmodPromise(A,r),o!=null)await this.utimesPromise(A,o[0],o[1]);else{let p=await this.statPromise(this.pathUtils.dirname(A));await this.utimesPromise(A,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{this.mkdirSync(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&this.chmodSync(A,r),o!=null)this.utimesSync(A,o[0],o[1]);else{let p=this.statSync(this.pathUtils.dirname(A));this.utimesSync(A,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:o=this,overwrite:a=!0,stableSort:n=!1,stableTime:u=!1,linkStrategy:A=null}={}){return await hW(this,e,o,r,{overwrite:a,stableSort:n,stableTime:u,linkStrategy:A})}copySync(e,r,{baseFs:o=this,overwrite:a=!0}={}){let n=o.lstatSync(r),u=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=o.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),o.pathUtils.join(r,h),{baseFs:o,overwrite:a})}else if(n.isFile()){if(!u||a){u&&this.removeSync(e);let p=o.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!u||a){u&&this.removeSync(e);let p=o.readlinkSync(r);this.symlinkSync(ZD(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let A=n.mode&511;this.chmodSync(e,A)}async changeFilePromise(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,o):this.changeFileTextPromise(e,r,o)}async changeFileBufferPromise(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:o})}async changeFileTextPromise(e,r,{automaticNewlines:o,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let u=o?G0(n,r):r;n!==u&&await this.writeFilePromise(e,u,{mode:a})}changeFileSync(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,o):this.changeFileTextSync(e,r,o)}changeFileBufferSync(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:o})}changeFileTextSync(e,r,{automaticNewlines:o=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let u=o?G0(n,r):r;n!==u&&this.writeFileSync(e,u,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(o){if(o.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw o}}moveSync(e,r){try{this.renameSync(e,r)}catch(o){if(o.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw o}}async lockPromise(e,r){let o=`${e}.flock`,a=1e3/60,n=Date.now(),u=null,A=async()=>{let p;try{[p]=await this.readJsonPromise(o)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;u===null;)try{u=await this.openPromise(o,"wx")}catch(p){if(p.code==="EEXIST"){if(!await A())try{await this.unlinkPromise(o);continue}catch{}if(Date.now()-n<60*1e3)await new Promise(h=>setTimeout(h,a));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${o})`)}else throw p}await this.writePromise(u,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(u),await this.unlinkPromise(o)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}async writeJsonPromise(e,r,{compact:o=!1}={}){let a=o?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} +`)}writeJsonSync(e,r,{compact:o=!1}={}){let a=o?0:2;return this.writeFileSync(e,`${JSON.stringify(r,null,a)} +`)}async preserveTimePromise(e,r){let o=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,o.atime,o.mtime)}async preserveTimeSync(e,r){let o=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,o.atime,o.mtime)}},qu=class extends hf{constructor(){super(V)}}});var ws,gf=It(()=>{W0();ws=class extends hf{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,o){return this.baseFs.openPromise(this.mapToBase(e),r,o)}openSync(e,r,o){return this.baseFs.openSync(this.mapToBase(e),r,o)}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,o,a,n){return await this.baseFs.readPromise(e,r,o,a,n)}readSync(e,r,o,a,n){return this.baseFs.readSync(e,r,o,a,n)}async writePromise(e,r,o,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,o):await this.baseFs.writePromise(e,r,o,a,n)}writeSync(e,r,o,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,o):this.baseFs.writeSync(e,r,o,a,n)}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)}lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}fchmodSync(e,r){return this.baseFs.fchmodSync(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 fchownPromise(e,r,o){return this.baseFs.fchownPromise(e,r,o)}fchownSync(e,r,o){return this.baseFs.fchownSync(e,r,o)}async chownPromise(e,r,o){return this.baseFs.chownPromise(this.mapToBase(e),r,o)}chownSync(e,r,o){return this.baseFs.chownSync(this.mapToBase(e),r,o)}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,o=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),o)}copyFileSync(e,r,o=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),o)}async appendFilePromise(e,r,o){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,o)}appendFileSync(e,r,o){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,o)}async writeFilePromise(e,r,o){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,o)}writeFileSync(e,r,o){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,o)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,o){return this.baseFs.utimesPromise(this.mapToBase(e),r,o)}utimesSync(e,r,o){return this.baseFs.utimesSync(this.mapToBase(e),r,o)}async lutimesPromise(e,r,o){return this.baseFs.lutimesPromise(this.mapToBase(e),r,o)}lutimesSync(e,r,o){return this.baseFs.lutimesSync(this.mapToBase(e),r,o)}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 rmPromise(e,r){return this.baseFs.rmPromise(this.mapToBase(e),r)}rmSync(e,r){return this.baseFs.rmSync(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,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(u,a,o)}symlinkSync(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(u,a,o)}async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}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)}async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}watch(e,r,o){return this.baseFs.watch(this.mapToBase(e),r,o)}watchFile(e,r,o){return this.baseFs.watchFile(this.mapToBase(e),r,o)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var ju,wW=It(()=>{gf();ju=class extends ws{constructor(e,{baseFs:r,pathUtils:o}){super(o),this.target=e,this.baseFs=r}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(e){return e}mapToBase(e){return e}}});function BW(t){let e=t;return typeof t.path=="string"&&(e.path=Ae.toPortablePath(t.path)),e}var vW,_n,Y0=It(()=>{vW=et(ve("fs"));W0();Ba();_n=class extends qu{constructor(e=vW.default){super(),this.realFs=e}getExtractHint(){return!1}getRealPath(){return Bt.root}resolve(e){return V.resolve(e)}async openPromise(e,r,o){return await new Promise((a,n)=>{this.realFs.open(Ae.fromPortablePath(e),r,o,this.makeCallback(a,n))})}openSync(e,r,o){return this.realFs.openSync(Ae.fromPortablePath(e),r,o)}async opendirPromise(e,r){return await new Promise((o,a)=>{typeof r<"u"?this.realFs.opendir(Ae.fromPortablePath(e),r,this.makeCallback(o,a)):this.realFs.opendir(Ae.fromPortablePath(e),this.makeCallback(o,a))}).then(o=>{let a=o;return Object.defineProperty(a,"path",{value:e,configurable:!0,writable:!0}),a})}opendirSync(e,r){let a=typeof r<"u"?this.realFs.opendirSync(Ae.fromPortablePath(e),r):this.realFs.opendirSync(Ae.fromPortablePath(e));return Object.defineProperty(a,"path",{value:e,configurable:!0,writable:!0}),a}async readPromise(e,r,o=0,a=0,n=-1){return await new Promise((u,A)=>{this.realFs.read(e,r,o,a,n,(p,h)=>{p?A(p):u(h)})})}readSync(e,r,o,a,n){return this.realFs.readSync(e,r,o,a,n)}async writePromise(e,r,o,a,n){return await new Promise((u,A)=>typeof r=="string"?this.realFs.write(e,r,o,this.makeCallback(u,A)):this.realFs.write(e,r,o,a,n,this.makeCallback(u,A)))}writeSync(e,r,o,a,n){return typeof r=="string"?this.realFs.writeSync(e,r,o):this.realFs.writeSync(e,r,o,a,n)}async closePromise(e){await new Promise((r,o)=>{this.realFs.close(e,this.makeCallback(r,o))})}closeSync(e){this.realFs.closeSync(e)}createReadStream(e,r){let o=e!==null?Ae.fromPortablePath(e):e;return this.realFs.createReadStream(o,r)}createWriteStream(e,r){let o=e!==null?Ae.fromPortablePath(e):e;return this.realFs.createWriteStream(o,r)}async realpathPromise(e){return await new Promise((r,o)=>{this.realFs.realpath(Ae.fromPortablePath(e),{},this.makeCallback(r,o))}).then(r=>Ae.toPortablePath(r))}realpathSync(e){return Ae.toPortablePath(this.realFs.realpathSync(Ae.fromPortablePath(e),{}))}async existsPromise(e){return await new Promise(r=>{this.realFs.exists(Ae.fromPortablePath(e),r)})}accessSync(e,r){return this.realFs.accessSync(Ae.fromPortablePath(e),r)}async accessPromise(e,r){return await new Promise((o,a)=>{this.realFs.access(Ae.fromPortablePath(e),r,this.makeCallback(o,a))})}existsSync(e){return this.realFs.existsSync(Ae.fromPortablePath(e))}async statPromise(e,r){return await new Promise((o,a)=>{r?this.realFs.stat(Ae.fromPortablePath(e),r,this.makeCallback(o,a)):this.realFs.stat(Ae.fromPortablePath(e),this.makeCallback(o,a))})}statSync(e,r){return r?this.realFs.statSync(Ae.fromPortablePath(e),r):this.realFs.statSync(Ae.fromPortablePath(e))}async fstatPromise(e,r){return await new Promise((o,a)=>{r?this.realFs.fstat(e,r,this.makeCallback(o,a)):this.realFs.fstat(e,this.makeCallback(o,a))})}fstatSync(e,r){return r?this.realFs.fstatSync(e,r):this.realFs.fstatSync(e)}async lstatPromise(e,r){return await new Promise((o,a)=>{r?this.realFs.lstat(Ae.fromPortablePath(e),r,this.makeCallback(o,a)):this.realFs.lstat(Ae.fromPortablePath(e),this.makeCallback(o,a))})}lstatSync(e,r){return r?this.realFs.lstatSync(Ae.fromPortablePath(e),r):this.realFs.lstatSync(Ae.fromPortablePath(e))}async fchmodPromise(e,r){return await new Promise((o,a)=>{this.realFs.fchmod(e,r,this.makeCallback(o,a))})}fchmodSync(e,r){return this.realFs.fchmodSync(e,r)}async chmodPromise(e,r){return await new Promise((o,a)=>{this.realFs.chmod(Ae.fromPortablePath(e),r,this.makeCallback(o,a))})}chmodSync(e,r){return this.realFs.chmodSync(Ae.fromPortablePath(e),r)}async fchownPromise(e,r,o){return await new Promise((a,n)=>{this.realFs.fchown(e,r,o,this.makeCallback(a,n))})}fchownSync(e,r,o){return this.realFs.fchownSync(e,r,o)}async chownPromise(e,r,o){return await new Promise((a,n)=>{this.realFs.chown(Ae.fromPortablePath(e),r,o,this.makeCallback(a,n))})}chownSync(e,r,o){return this.realFs.chownSync(Ae.fromPortablePath(e),r,o)}async renamePromise(e,r){return await new Promise((o,a)=>{this.realFs.rename(Ae.fromPortablePath(e),Ae.fromPortablePath(r),this.makeCallback(o,a))})}renameSync(e,r){return this.realFs.renameSync(Ae.fromPortablePath(e),Ae.fromPortablePath(r))}async copyFilePromise(e,r,o=0){return await new Promise((a,n)=>{this.realFs.copyFile(Ae.fromPortablePath(e),Ae.fromPortablePath(r),o,this.makeCallback(a,n))})}copyFileSync(e,r,o=0){return this.realFs.copyFileSync(Ae.fromPortablePath(e),Ae.fromPortablePath(r),o)}async appendFilePromise(e,r,o){return await new Promise((a,n)=>{let u=typeof e=="string"?Ae.fromPortablePath(e):e;o?this.realFs.appendFile(u,r,o,this.makeCallback(a,n)):this.realFs.appendFile(u,r,this.makeCallback(a,n))})}appendFileSync(e,r,o){let a=typeof e=="string"?Ae.fromPortablePath(e):e;o?this.realFs.appendFileSync(a,r,o):this.realFs.appendFileSync(a,r)}async writeFilePromise(e,r,o){return await new Promise((a,n)=>{let u=typeof e=="string"?Ae.fromPortablePath(e):e;o?this.realFs.writeFile(u,r,o,this.makeCallback(a,n)):this.realFs.writeFile(u,r,this.makeCallback(a,n))})}writeFileSync(e,r,o){let a=typeof e=="string"?Ae.fromPortablePath(e):e;o?this.realFs.writeFileSync(a,r,o):this.realFs.writeFileSync(a,r)}async unlinkPromise(e){return await new Promise((r,o)=>{this.realFs.unlink(Ae.fromPortablePath(e),this.makeCallback(r,o))})}unlinkSync(e){return this.realFs.unlinkSync(Ae.fromPortablePath(e))}async utimesPromise(e,r,o){return await new Promise((a,n)=>{this.realFs.utimes(Ae.fromPortablePath(e),r,o,this.makeCallback(a,n))})}utimesSync(e,r,o){this.realFs.utimesSync(Ae.fromPortablePath(e),r,o)}async lutimesPromise(e,r,o){return await new Promise((a,n)=>{this.realFs.lutimes(Ae.fromPortablePath(e),r,o,this.makeCallback(a,n))})}lutimesSync(e,r,o){this.realFs.lutimesSync(Ae.fromPortablePath(e),r,o)}async mkdirPromise(e,r){return await new Promise((o,a)=>{this.realFs.mkdir(Ae.fromPortablePath(e),r,this.makeCallback(o,a))})}mkdirSync(e,r){return this.realFs.mkdirSync(Ae.fromPortablePath(e),r)}async rmdirPromise(e,r){return await new Promise((o,a)=>{r?this.realFs.rmdir(Ae.fromPortablePath(e),r,this.makeCallback(o,a)):this.realFs.rmdir(Ae.fromPortablePath(e),this.makeCallback(o,a))})}rmdirSync(e,r){return this.realFs.rmdirSync(Ae.fromPortablePath(e),r)}async rmPromise(e,r){return await new Promise((o,a)=>{r?this.realFs.rm(Ae.fromPortablePath(e),r,this.makeCallback(o,a)):this.realFs.rm(Ae.fromPortablePath(e),this.makeCallback(o,a))})}rmSync(e,r){return this.realFs.rmSync(Ae.fromPortablePath(e),r)}async linkPromise(e,r){return await new Promise((o,a)=>{this.realFs.link(Ae.fromPortablePath(e),Ae.fromPortablePath(r),this.makeCallback(o,a))})}linkSync(e,r){return this.realFs.linkSync(Ae.fromPortablePath(e),Ae.fromPortablePath(r))}async symlinkPromise(e,r,o){return await new Promise((a,n)=>{this.realFs.symlink(Ae.fromPortablePath(e.replace(/\/+$/,"")),Ae.fromPortablePath(r),o,this.makeCallback(a,n))})}symlinkSync(e,r,o){return this.realFs.symlinkSync(Ae.fromPortablePath(e.replace(/\/+$/,"")),Ae.fromPortablePath(r),o)}async readFilePromise(e,r){return await new Promise((o,a)=>{let n=typeof e=="string"?Ae.fromPortablePath(e):e;this.realFs.readFile(n,r,this.makeCallback(o,a))})}readFileSync(e,r){let o=typeof e=="string"?Ae.fromPortablePath(e):e;return this.realFs.readFileSync(o,r)}async readdirPromise(e,r){return await new Promise((o,a)=>{r?r.recursive&&process.platform==="win32"?r.withFileTypes?this.realFs.readdir(Ae.fromPortablePath(e),r,this.makeCallback(n=>o(n.map(BW)),a)):this.realFs.readdir(Ae.fromPortablePath(e),r,this.makeCallback(n=>o(n.map(Ae.toPortablePath)),a)):this.realFs.readdir(Ae.fromPortablePath(e),r,this.makeCallback(o,a)):this.realFs.readdir(Ae.fromPortablePath(e),this.makeCallback(o,a))})}readdirSync(e,r){return r?r.recursive&&process.platform==="win32"?r.withFileTypes?this.realFs.readdirSync(Ae.fromPortablePath(e),r).map(BW):this.realFs.readdirSync(Ae.fromPortablePath(e),r).map(Ae.toPortablePath):this.realFs.readdirSync(Ae.fromPortablePath(e),r):this.realFs.readdirSync(Ae.fromPortablePath(e))}async readlinkPromise(e){return await new Promise((r,o)=>{this.realFs.readlink(Ae.fromPortablePath(e),this.makeCallback(r,o))}).then(r=>Ae.toPortablePath(r))}readlinkSync(e){return Ae.toPortablePath(this.realFs.readlinkSync(Ae.fromPortablePath(e)))}async truncatePromise(e,r){return await new Promise((o,a)=>{this.realFs.truncate(Ae.fromPortablePath(e),r,this.makeCallback(o,a))})}truncateSync(e,r){return this.realFs.truncateSync(Ae.fromPortablePath(e),r)}async ftruncatePromise(e,r){return await new Promise((o,a)=>{this.realFs.ftruncate(e,r,this.makeCallback(o,a))})}ftruncateSync(e,r){return this.realFs.ftruncateSync(e,r)}watch(e,r,o){return this.realFs.watch(Ae.fromPortablePath(e),r,o)}watchFile(e,r,o){return this.realFs.watchFile(Ae.fromPortablePath(e),r,o)}unwatchFile(e,r){return this.realFs.unwatchFile(Ae.fromPortablePath(e),r)}makeCallback(e,r){return(o,a)=>{o?r(o):e(a)}}}});var En,DW=It(()=>{Y0();gf();Ba();En=class extends ws{constructor(e,{baseFs:r=new _n}={}){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 SW,Gu,PW=It(()=>{Y0();gf();Ba();SW=Bt.root,Gu=class extends ws{constructor(e,{baseFs:r=new _n}={}){super(V),this.target=this.pathUtils.resolve(Bt.root,e),this.baseFs=r}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Bt.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(SW,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(SW,this.pathUtils.relative(this.target,e))}}});var Am,xW=It(()=>{gf();Am=class extends ws{constructor(r,o){super(o);this.instance=null;this.factory=r}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(r){this.instance=r}mapFromBase(r){return r}mapToBase(r){return r}}});var V0,va,Gp,bW=It(()=>{V0=ve("fs");W0();Y0();DT();zD();Ba();va=4278190080,Gp=class extends qu{constructor({baseFs:r=new _n,filter:o=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:u=!0,maxAge:A=5e3,typeCheck:p=V0.constants.S_IFREG,getMountPoint:h,factoryPromise:E,factorySync:w}){if(Math.floor(a)!==a||!(a>1&&a<=127))throw new Error("The magic byte must be set to a round value between 1 and 127 included");super();this.fdMap=new Map;this.nextFd=3;this.isMount=new Set;this.notMount=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.baseFs=r,this.mountInstances=u?new Map:null,this.factoryPromise=E,this.factorySync=w,this.filter=o,this.getMountPoint=h,this.magic=a<<24,this.maxAge=A,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(j0(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(j0(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,o){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,o]),a}async openPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,o,a),async(n,{subPath:u})=>this.remapFd(n,await n.openPromise(u,o,a)))}openSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,o,a),(n,{subPath:u})=>this.remapFd(n,n.openSync(u,o,a)))}async opendirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,o),async(a,{subPath:n})=>await a.opendirPromise(n,o),{requireSubpath:!1})}opendirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,o),(a,{subPath:n})=>a.opendirSync(n,o),{requireSubpath:!1})}async readPromise(r,o,a,n,u){if((r&va)!==this.magic)return await this.baseFs.readPromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw ho("read");let[p,h]=A;return await p.readPromise(h,o,a,n,u)}readSync(r,o,a,n,u){if((r&va)!==this.magic)return this.baseFs.readSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw ho("readSync");let[p,h]=A;return p.readSync(h,o,a,n,u)}async writePromise(r,o,a,n,u){if((r&va)!==this.magic)return typeof o=="string"?await this.baseFs.writePromise(r,o,a):await this.baseFs.writePromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw ho("write");let[p,h]=A;return typeof o=="string"?await p.writePromise(h,o,a):await p.writePromise(h,o,a,n,u)}writeSync(r,o,a,n,u){if((r&va)!==this.magic)return typeof o=="string"?this.baseFs.writeSync(r,o,a):this.baseFs.writeSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw ho("writeSync");let[p,h]=A;return typeof o=="string"?p.writeSync(h,o,a):p.writeSync(h,o,a,n,u)}async closePromise(r){if((r&va)!==this.magic)return await this.baseFs.closePromise(r);let o=this.fdMap.get(r);if(typeof o>"u")throw ho("close");this.fdMap.delete(r);let[a,n]=o;return await a.closePromise(n)}closeSync(r){if((r&va)!==this.magic)return this.baseFs.closeSync(r);let o=this.fdMap.get(r);if(typeof o>"u")throw ho("closeSync");this.fdMap.delete(r);let[a,n]=o;return a.closeSync(n)}createReadStream(r,o){return r===null?this.baseFs.createReadStream(r,o):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,o),(a,{archivePath:n,subPath:u})=>{let A=a.createReadStream(u,o);return A.path=Ae.fromPortablePath(this.pathUtils.join(n,u)),A})}createWriteStream(r,o){return r===null?this.baseFs.createWriteStream(r,o):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,o),(a,{subPath:n})=>a.createWriteStream(n,o))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=await this.baseFs.realpathPromise(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,await o.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=this.baseFs.realpathSync(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,o.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(o,{subPath:a})=>await o.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(o,{subPath:a})=>o.existsSync(a))}async accessPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,o),async(a,{subPath:n})=>await a.accessPromise(n,o))}accessSync(r,o){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,o),(a,{subPath:n})=>a.accessSync(n,o))}async statPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,o),async(a,{subPath:n})=>await a.statPromise(n,o))}statSync(r,o){return this.makeCallSync(r,()=>this.baseFs.statSync(r,o),(a,{subPath:n})=>a.statSync(n,o))}async fstatPromise(r,o){if((r&va)!==this.magic)return this.baseFs.fstatPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw ho("fstat");let[n,u]=a;return n.fstatPromise(u,o)}fstatSync(r,o){if((r&va)!==this.magic)return this.baseFs.fstatSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw ho("fstatSync");let[n,u]=a;return n.fstatSync(u,o)}async lstatPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,o),async(a,{subPath:n})=>await a.lstatPromise(n,o))}lstatSync(r,o){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,o),(a,{subPath:n})=>a.lstatSync(n,o))}async fchmodPromise(r,o){if((r&va)!==this.magic)return this.baseFs.fchmodPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw ho("fchmod");let[n,u]=a;return n.fchmodPromise(u,o)}fchmodSync(r,o){if((r&va)!==this.magic)return this.baseFs.fchmodSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw ho("fchmodSync");let[n,u]=a;return n.fchmodSync(u,o)}async chmodPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,o),async(a,{subPath:n})=>await a.chmodPromise(n,o))}chmodSync(r,o){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,o),(a,{subPath:n})=>a.chmodSync(n,o))}async fchownPromise(r,o,a){if((r&va)!==this.magic)return this.baseFs.fchownPromise(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw ho("fchown");let[u,A]=n;return u.fchownPromise(A,o,a)}fchownSync(r,o,a){if((r&va)!==this.magic)return this.baseFs.fchownSync(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw ho("fchownSync");let[u,A]=n;return u.fchownSync(A,o,a)}async chownPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,o,a),async(n,{subPath:u})=>await n.chownPromise(u,o,a))}chownSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,o,a),(n,{subPath:u})=>n.chownSync(u,o,a))}async renamePromise(r,o){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.renamePromise(r,o),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(o,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,A)}))}renameSync(r,o){return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.renameSync(r,o),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(o,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,A)}))}async copyFilePromise(r,o,a=0){let n=async(u,A,p,h)=>{if(a&V0.constants.COPYFILE_FICLONE_FORCE)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&V0.constants.COPYFILE_EXCL&&await this.existsPromise(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=await u.readFilePromise(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,E)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.copyFilePromise(r,o,a),async(u,{subPath:A})=>await n(this.baseFs,r,u,A)),async(u,{subPath:A})=>await this.makeCallPromise(o,async()=>await n(u,A,this.baseFs,o),async(p,{subPath:h})=>u!==p?await n(u,A,p,h):await u.copyFilePromise(A,h,a)))}copyFileSync(r,o,a=0){let n=(u,A,p,h)=>{if(a&V0.constants.COPYFILE_FICLONE_FORCE)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&V0.constants.COPYFILE_EXCL&&this.existsSync(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=u.readFileSync(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,E)};return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.copyFileSync(r,o,a),(u,{subPath:A})=>n(this.baseFs,r,u,A)),(u,{subPath:A})=>this.makeCallSync(o,()=>n(u,A,this.baseFs,o),(p,{subPath:h})=>u!==p?n(u,A,p,h):u.copyFileSync(A,h,a)))}async appendFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,o,a),async(n,{subPath:u})=>await n.appendFilePromise(u,o,a))}appendFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,o,a),(n,{subPath:u})=>n.appendFileSync(u,o,a))}async writeFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,o,a),async(n,{subPath:u})=>await n.writeFilePromise(u,o,a))}writeFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,o,a),(n,{subPath:u})=>n.writeFileSync(u,o,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(o,{subPath:a})=>await o.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(o,{subPath:a})=>o.unlinkSync(a))}async utimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,o,a),async(n,{subPath:u})=>await n.utimesPromise(u,o,a))}utimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,o,a),(n,{subPath:u})=>n.utimesSync(u,o,a))}async lutimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,o,a),async(n,{subPath:u})=>await n.lutimesPromise(u,o,a))}lutimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,o,a),(n,{subPath:u})=>n.lutimesSync(u,o,a))}async mkdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,o),async(a,{subPath:n})=>await a.mkdirPromise(n,o))}mkdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,o),(a,{subPath:n})=>a.mkdirSync(n,o))}async rmdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,o),async(a,{subPath:n})=>await a.rmdirPromise(n,o))}rmdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,o),(a,{subPath:n})=>a.rmdirSync(n,o))}async rmPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmPromise(r,o),async(a,{subPath:n})=>await a.rmPromise(n,o))}rmSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmSync(r,o),(a,{subPath:n})=>a.rmSync(n,o))}async linkPromise(r,o){return await this.makeCallPromise(o,async()=>await this.baseFs.linkPromise(r,o),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,o){return this.makeCallSync(o,()=>this.baseFs.linkSync(r,o),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,o,a){return await this.makeCallPromise(o,async()=>await this.baseFs.symlinkPromise(r,o,a),async(n,{subPath:u})=>await n.symlinkPromise(r,u))}symlinkSync(r,o,a){return this.makeCallSync(o,()=>this.baseFs.symlinkSync(r,o,a),(n,{subPath:u})=>n.symlinkSync(r,u))}async readFilePromise(r,o){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,o),async(a,{subPath:n})=>await a.readFilePromise(n,o))}readFileSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,o),(a,{subPath:n})=>a.readFileSync(n,o))}async readdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,o),async(a,{subPath:n})=>await a.readdirPromise(n,o),{requireSubpath:!1})}readdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,o),(a,{subPath:n})=>a.readdirSync(n,o),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(o,{subPath:a})=>await o.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(o,{subPath:a})=>o.readlinkSync(a))}async truncatePromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,o),async(a,{subPath:n})=>await a.truncatePromise(n,o))}truncateSync(r,o){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,o),(a,{subPath:n})=>a.truncateSync(n,o))}async ftruncatePromise(r,o){if((r&va)!==this.magic)return this.baseFs.ftruncatePromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw ho("ftruncate");let[n,u]=a;return n.ftruncatePromise(u,o)}ftruncateSync(r,o){if((r&va)!==this.magic)return this.baseFs.ftruncateSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw ho("ftruncateSync");let[n,u]=a;return n.ftruncateSync(u,o)}watch(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,o,a),(n,{subPath:u})=>n.watch(u,o,a))}watchFile(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,o,a),()=>um(this,r,o,a))}unwatchFile(r,o){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,o),()=>q0(this,r,o))}async makeCallPromise(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await o();let u=this.resolve(r),A=this.findMount(u);return A?n&&A.subPath==="/"?await o():await this.getMountPromise(A.archivePath,async p=>await a(p,A)):await o()}makeCallSync(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return o();let u=this.resolve(r),A=this.findMount(u);return!A||n&&A.subPath==="/"?o():this.getMountSync(A.archivePath,p=>a(p,A))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let o="";for(;;){let a=r.substring(o.length),n=this.getMountPoint(a,o);if(!n)return null;if(o=this.pathUtils.join(o,n),!this.isMount.has(o)){if(this.notMount.has(o))continue;try{if(this.typeCheck!==null&&(this.baseFs.statSync(o).mode&V0.constants.S_IFMT)!==this.typeCheck){this.notMount.add(o);continue}}catch{return null}this.isMount.add(o)}return{archivePath:o,subPath:this.pathUtils.join(Bt.root,r.substring(o.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let o=Date.now(),a=o+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[u,{childFs:A,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||A.hasOpenFileHandles?.())){if(o>=p){A.saveAndClose?.(),this.mountInstances.delete(u),n-=1;continue}else if(r===null||n<=0){a=p;break}A.saveAndClose?.(),this.mountInstances.delete(u),n-=1}this.limitOpenFilesTimeout===null&&(r===null&&this.mountInstances.size>0||r!==null)&&isFinite(a)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},a-o).unref())}async getMountPromise(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);if(!a){let n=await this.factoryPromise(this.baseFs,r);a=this.mountInstances.get(r),a||(a={childFs:n(),expiresAt:0,refCount:0})}this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,a.refCount+=1;try{return await o(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await o(a)}finally{a.saveAndClose?.()}}}getMountSync(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);return a||(a={childFs:this.factorySync(this.baseFs,r),expiresAt:0,refCount:0}),this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,o(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return o(a)}finally{a.saveAndClose?.()}}}}});var $t,nS,kW=It(()=>{W0();Ba();$t=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),nS=class t extends hf{static{this.instance=new t}constructor(){super(V)}getExtractHint(){throw $t()}getRealPath(){throw $t()}resolve(){throw $t()}async openPromise(){throw $t()}openSync(){throw $t()}async opendirPromise(){throw $t()}opendirSync(){throw $t()}async readPromise(){throw $t()}readSync(){throw $t()}async writePromise(){throw $t()}writeSync(){throw $t()}async closePromise(){throw $t()}closeSync(){throw $t()}createWriteStream(){throw $t()}createReadStream(){throw $t()}async realpathPromise(){throw $t()}realpathSync(){throw $t()}async readdirPromise(){throw $t()}readdirSync(){throw $t()}async existsPromise(e){throw $t()}existsSync(e){throw $t()}async accessPromise(){throw $t()}accessSync(){throw $t()}async statPromise(){throw $t()}statSync(){throw $t()}async fstatPromise(e){throw $t()}fstatSync(e){throw $t()}async lstatPromise(e){throw $t()}lstatSync(e){throw $t()}async fchmodPromise(){throw $t()}fchmodSync(){throw $t()}async chmodPromise(){throw $t()}chmodSync(){throw $t()}async fchownPromise(){throw $t()}fchownSync(){throw $t()}async chownPromise(){throw $t()}chownSync(){throw $t()}async mkdirPromise(){throw $t()}mkdirSync(){throw $t()}async rmdirPromise(){throw $t()}rmdirSync(){throw $t()}async rmPromise(){throw $t()}rmSync(){throw $t()}async linkPromise(){throw $t()}linkSync(){throw $t()}async symlinkPromise(){throw $t()}symlinkSync(){throw $t()}async renamePromise(){throw $t()}renameSync(){throw $t()}async copyFilePromise(){throw $t()}copyFileSync(){throw $t()}async appendFilePromise(){throw $t()}appendFileSync(){throw $t()}async writeFilePromise(){throw $t()}writeFileSync(){throw $t()}async unlinkPromise(){throw $t()}unlinkSync(){throw $t()}async utimesPromise(){throw $t()}utimesSync(){throw $t()}async lutimesPromise(){throw $t()}lutimesSync(){throw $t()}async readFilePromise(){throw $t()}readFileSync(){throw $t()}async readlinkPromise(){throw $t()}readlinkSync(){throw $t()}async truncatePromise(){throw $t()}truncateSync(){throw $t()}async ftruncatePromise(e,r){throw $t()}ftruncateSync(e,r){throw $t()}watch(){throw $t()}watchFile(){throw $t()}unwatchFile(){throw $t()}}});var Wp,QW=It(()=>{gf();Ba();Wp=class extends ws{constructor(e){super(Ae),this.baseFs=e}mapFromBase(e){return Ae.fromPortablePath(e)}mapToBase(e){return Ae.toPortablePath(e)}}});var C_e,ST,I_e,qs,FW=It(()=>{Y0();gf();Ba();C_e=/^[0-9]+$/,ST=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,I_e=/^([^/]+-)?[a-f0-9]+$/,qs=class t extends ws{static makeVirtualPath(e,r,o){if(V.basename(e)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!V.basename(r).match(I_e))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let n=V.relative(V.dirname(e),o).split("/"),u=0;for(;u{PT=et(ve("buffer")),RW=ve("url"),TW=ve("util");gf();Ba();iS=class extends ws{constructor(e){super(Ae),this.baseFs=e}mapFromBase(e){return e}mapToBase(e){if(typeof e=="string")return e;if(e instanceof URL)return(0,RW.fileURLToPath)(e);if(Buffer.isBuffer(e)){let r=e.toString();if(!w_e(e,r))throw new Error("Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942");return r}throw new Error(`Unsupported path type: ${(0,TW.inspect)(e)}`)}}});var _W,go,df,Yp,sS,oS,fm,_c,Hc,NW,OW,MW,UW,cw,HW=It(()=>{_W=ve("readline"),go=Symbol("kBaseFs"),df=Symbol("kFd"),Yp=Symbol("kClosePromise"),sS=Symbol("kCloseResolve"),oS=Symbol("kCloseReject"),fm=Symbol("kRefs"),_c=Symbol("kRef"),Hc=Symbol("kUnref"),cw=class{constructor(e,r){this[UW]=1;this[MW]=void 0;this[OW]=void 0;this[NW]=void 0;this[go]=r,this[df]=e}get fd(){return this[df]}async appendFile(e,r){try{this[_c](this.appendFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;return await this[go].appendFilePromise(this.fd,e,o?{encoding:o}:void 0)}finally{this[Hc]()}}async chown(e,r){try{return this[_c](this.chown),await this[go].fchownPromise(this.fd,e,r)}finally{this[Hc]()}}async chmod(e){try{return this[_c](this.chmod),await this[go].fchmodPromise(this.fd,e)}finally{this[Hc]()}}createReadStream(e){return this[go].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[go].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,o,a){try{this[_c](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,o=e.length??n.byteLength,a=e.position??null),r??=0,o??=0,o===0?{bytesRead:o,buffer:n}:{bytesRead:await this[go].readPromise(this.fd,n,r,o,a),buffer:n}}finally{this[Hc]()}}async readFile(e){try{this[_c](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[go].readFilePromise(this.fd,r)}finally{this[Hc]()}}readLines(e){return(0,_W.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[_c](this.stat),await this[go].fstatPromise(this.fd,e)}finally{this[Hc]()}}async truncate(e){try{return this[_c](this.truncate),await this[go].ftruncatePromise(this.fd,e)}finally{this[Hc]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[_c](this.writeFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;await this[go].writeFilePromise(this.fd,e,o)}finally{this[Hc]()}}async write(...e){try{if(this[_c](this.write),ArrayBuffer.isView(e[0])){let[r,o,a,n]=e;return{bytesWritten:await this[go].writePromise(this.fd,r,o??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,o,a]=e;return{bytesWritten:await this[go].writePromise(this.fd,r,o,a),buffer:r}}}finally{this[Hc]()}}async writev(e,r){try{this[_c](this.writev);let o=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);o+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);o+=n.bytesWritten}return{buffers:e,bytesWritten:o}}finally{this[Hc]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[df]===-1)return Promise.resolve();if(this[Yp])return this[Yp];if(this[fm]--,this[fm]===0){let e=this[df];this[df]=-1,this[Yp]=this[go].closePromise(e).finally(()=>{this[Yp]=void 0})}else this[Yp]=new Promise((e,r)=>{this[sS]=e,this[oS]=r}).finally(()=>{this[Yp]=void 0,this[oS]=void 0,this[sS]=void 0});return this[Yp]}[(go,df,UW=fm,MW=Yp,OW=sS,NW=oS,_c)](e){if(this[df]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[fm]++}[Hc](){if(this[fm]--,this[fm]===0){let e=this[df];this[df]=-1,this[go].closePromise(e).then(this[sS],this[oS])}}}});function uw(t,e){e=new iS(e);let r=(o,a,n)=>{let u=o[a];o[a]=n,typeof u?.[pm.promisify.custom]<"u"&&(n[pm.promisify.custom]=u[pm.promisify.custom])};{r(t,"exists",(o,...a)=>{let u=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(o).then(A=>{u(A)},()=>{u(!1)})})}),r(t,"read",(...o)=>{let[a,n,u,A,p,h]=o;if(o.length<=3){let E={};o.length<3?h=o[1]:(E=o[1],h=o[2]),{buffer:n=Buffer.alloc(16384),offset:u=0,length:A=n.byteLength,position:p}=E}if(u==null&&(u=0),A|=0,A===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,u,A,p).then(E=>{h(null,E,n)},E=>{h(E,0,n)})})});for(let o of qW){let a=o.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[o];if(typeof n>"u")continue;r(t,a,(...A)=>{let h=typeof A[A.length-1]=="function"?A.pop():()=>{};process.nextTick(()=>{n.apply(e,A).then(E=>{h(null,E)},E=>{h(E)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",o=>{try{return e.existsSync(o)}catch{return!1}}),r(t,"readSync",(...o)=>{let[a,n,u,A,p]=o;return o.length<=3&&({offset:u=0,length:A=n.byteLength,position:p}=o[2]||{}),u==null&&(u=0),A|=0,A===0?0:(p==null&&(p=-1),e.readSync(a,n,u,A,p))});for(let o of B_e){let a=o;if(typeof t[a]>"u")continue;let n=e[o];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let o=t.promises;for(let a of qW){let n=a.replace(/Promise$/,"");if(typeof o[n]>"u")continue;let u=e[a];typeof u>"u"||a!=="open"&&r(o,n,(A,...p)=>A instanceof cw?A[n].apply(A,p):u.call(e,A,...p))}r(o,"open",async(...a)=>{let n=await e.openPromise(...a);return new cw(n,e)})}t.read[pm.promisify.custom]=async(o,a,...n)=>({bytesRead:await e.readPromise(o,a,...n),buffer:a}),t.write[pm.promisify.custom]=async(o,a,...n)=>({bytesWritten:await e.writePromise(o,a,...n),buffer:a})}function aS(t,e){let r=Object.create(t);return uw(r,e),r}var pm,B_e,qW,jW=It(()=>{pm=ve("util");LW();HW();B_e=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","fchmodSync","chownSync","fchownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","rmSync","statSync","symlinkSync","truncateSync","ftruncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),qW=new Set(["accessPromise","appendFilePromise","fchmodPromise","chmodPromise","fchownPromise","chownPromise","closePromise","copyFilePromise","linkPromise","fstatPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","rmPromise","statPromise","symlinkPromise","truncatePromise","ftruncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"])});function GW(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function WW(){if(xT)return xT;let t=Ae.toPortablePath(YW.default.tmpdir()),e=ae.realpathSync(t);return process.once("exit",()=>{ae.rmtempSync()}),xT={tmpdir:t,realTmpdir:e}}var YW,qc,xT,ae,VW=It(()=>{YW=et(ve("os"));Y0();Ba();qc=new Set,xT=null;ae=Object.assign(new _n,{detachTemp(t){qc.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=WW();for(;;){let o=GW("xfs-");try{this.mkdirSync(V.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=V.join(r,o);if(qc.add(a),typeof t>"u")return a;try{return t(a)}finally{if(qc.has(a)){qc.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=WW();for(;;){let o=GW("xfs-");try{await this.mkdirPromise(V.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=V.join(r,o);if(qc.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(qc.has(a)){qc.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(qc.values()).map(async t=>{try{await ae.removePromise(t,{maxRetries:0}),qc.delete(t)}catch{}}))},rmtempSync(){for(let t of qc)try{ae.removeSync(t),qc.delete(t)}catch{}}})});var Aw={};Vt(Aw,{AliasFS:()=>ju,BasePortableFakeFS:()=>qu,CustomDir:()=>lw,CwdFS:()=>En,FakeFS:()=>hf,Filename:()=>mr,JailFS:()=>Gu,LazyFS:()=>Am,MountFS:()=>Gp,NoFS:()=>nS,NodeFS:()=>_n,PortablePath:()=>Bt,PosixFS:()=>Wp,ProxiedFS:()=>ws,VirtualFS:()=>qs,constants:()=>Si,errors:()=>sr,extendFs:()=>aS,normalizeLineEndings:()=>G0,npath:()=>Ae,opendir:()=>eS,patchFs:()=>uw,ppath:()=>V,setupCopyIndex:()=>$D,statUtils:()=>wa,unwatchAllFiles:()=>j0,unwatchFile:()=>q0,watchFile:()=>um,xfs:()=>ae});var St=It(()=>{uW();zD();IT();vT();dW();DT();W0();Ba();Ba();wW();W0();DW();PW();xW();bW();kW();Y0();QW();gf();FW();jW();VW()});var ZW=_((qPt,XW)=>{XW.exports=zW;zW.sync=D_e;var KW=ve("fs");function v_e(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 o=0;o{rY.exports=eY;eY.sync=S_e;var $W=ve("fs");function eY(t,e,r){$W.stat(t,function(o,a){r(o,o?!1:tY(a,e))})}function S_e(t,e){return tY($W.statSync(t),e)}function tY(t,e){return t.isFile()&&P_e(t,e)}function P_e(t,e){var r=t.mode,o=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),u=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),A=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),E=A|p,w=r&h||r&p&&a===u||r&A&&o===n||r&E&&n===0;return w}});var sY=_((WPt,iY)=>{var GPt=ve("fs"),lS;process.platform==="win32"||global.TESTING_WINDOWS?lS=ZW():lS=nY();iY.exports=bT;bT.sync=x_e;function bT(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(o,a){bT(t,e||{},function(n,u){n?a(n):o(u)})})}lS(t,e||{},function(o,a){o&&(o.code==="EACCES"||e&&e.ignoreErrors)&&(o=null,a=!1),r(o,a)})}function x_e(t,e){try{return lS.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var fY=_((YPt,AY)=>{var hm=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",oY=ve("path"),b_e=hm?";":":",aY=sY(),lY=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),cY=(t,e)=>{let r=e.colon||b_e,o=t.match(/\//)||hm&&t.match(/\\/)?[""]:[...hm?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=hm?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=hm?a.split(r):[""];return hm&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:o,pathExt:n,pathExtExe:a}},uY=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:o,pathExt:a,pathExtExe:n}=cY(t,e),u=[],A=h=>new Promise((E,w)=>{if(h===o.length)return e.all&&u.length?E(u):w(lY(t));let D=o[h],b=/^".*"$/.test(D)?D.slice(1,-1):D,C=oY.join(b,t),T=!b&&/^\.[\\\/]/.test(t)?t.slice(0,2)+C:C;E(p(T,h,0))}),p=(h,E,w)=>new Promise((D,b)=>{if(w===a.length)return D(A(E+1));let C=a[w];aY(h+C,{pathExt:n},(T,N)=>{if(!T&&N)if(e.all)u.push(h+C);else return D(h+C);return D(p(h,E,w+1))})});return r?A(0).then(h=>r(null,h),r):A(0)},k_e=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:o,pathExtExe:a}=cY(t,e),n=[];for(let u=0;u{"use strict";var pY=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};kT.exports=pY;kT.exports.default=pY});var yY=_((KPt,mY)=>{"use strict";var gY=ve("path"),Q_e=fY(),F_e=hY();function dY(t,e){let r=t.options.env||process.env,o=process.cwd(),a=t.options.cwd!=null,n=a&&process.chdir!==void 0&&!process.chdir.disabled;if(n)try{process.chdir(t.options.cwd)}catch{}let u;try{u=Q_e.sync(t.command,{path:r[F_e({env:r})],pathExt:e?gY.delimiter:void 0})}catch{}finally{n&&process.chdir(o)}return u&&(u=gY.resolve(a?t.options.cwd:"",u)),u}function R_e(t){return dY(t)||dY(t,!0)}mY.exports=R_e});var EY=_((JPt,FT)=>{"use strict";var QT=/([()\][%!^"`<>&|;, *?])/g;function T_e(t){return t=t.replace(QT,"^$1"),t}function L_e(t,e){return t=`${t}`,t=t.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),t=t.replace(/(?=(\\+?)?)\1$/,"$1$1"),t=`"${t}"`,t=t.replace(QT,"^$1"),e&&(t=t.replace(QT,"^$1")),t}FT.exports.command=T_e;FT.exports.argument=L_e});var IY=_((zPt,CY)=>{"use strict";CY.exports=/^#!(.*)/});var BY=_((XPt,wY)=>{"use strict";var N_e=IY();wY.exports=(t="")=>{let e=t.match(N_e);if(!e)return null;let[r,o]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?o:o?`${a} ${o}`:a}});var DY=_((ZPt,vY)=>{"use strict";var RT=ve("fs"),O_e=BY();function M_e(t){let r=Buffer.alloc(150),o;try{o=RT.openSync(t,"r"),RT.readSync(o,r,0,150,0),RT.closeSync(o)}catch{}return O_e(r.toString())}vY.exports=M_e});var bY=_(($Pt,xY)=>{"use strict";var U_e=ve("path"),SY=yY(),PY=EY(),__e=DY(),H_e=process.platform==="win32",q_e=/\.(?:com|exe)$/i,j_e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function G_e(t){t.file=SY(t);let e=t.file&&__e(t.file);return e?(t.args.unshift(t.file),t.command=e,SY(t)):t.file}function W_e(t){if(!H_e)return t;let e=G_e(t),r=!q_e.test(e);if(t.options.forceShell||r){let o=j_e.test(e);t.command=U_e.normalize(t.command),t.command=PY.command(t.command),t.args=t.args.map(n=>PY.argument(n,o));let a=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${a}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function Y_e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let o={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?o:W_e(o)}xY.exports=Y_e});var FY=_((ext,QY)=>{"use strict";var TT=process.platform==="win32";function LT(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 V_e(t,e){if(!TT)return;let r=t.emit;t.emit=function(o,a){if(o==="exit"){let n=kY(a,e);if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function kY(t,e){return TT&&t===1&&!e.file?LT(e.original,"spawn"):null}function K_e(t,e){return TT&&t===1&&!e.file?LT(e.original,"spawnSync"):null}QY.exports={hookChildProcess:V_e,verifyENOENT:kY,verifyENOENTSync:K_e,notFoundError:LT}});var MT=_((txt,gm)=>{"use strict";var RY=ve("child_process"),NT=bY(),OT=FY();function TY(t,e,r){let o=NT(t,e,r),a=RY.spawn(o.command,o.args,o.options);return OT.hookChildProcess(a,o),a}function J_e(t,e,r){let o=NT(t,e,r),a=RY.spawnSync(o.command,o.args,o.options);return a.error=a.error||OT.verifyENOENTSync(a.status,o),a}gm.exports=TY;gm.exports.spawn=TY;gm.exports.sync=J_e;gm.exports._parse=NT;gm.exports._enoent=OT});var NY=_((rxt,LY)=>{"use strict";function z_e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function K0(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,K0)}z_e(K0,Error);K0.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",w;for(w=0;w0){for(w=1,D=1;w>",P=cr(">>",!1),y=">&",R=cr(">&",!1),z=">",X=cr(">",!1),$="<<<",se=cr("<<<",!1),be="<&",Fe=cr("<&",!1),lt="<",Et=cr("<",!1),qt=function(L){return{type:"argument",segments:[].concat(...L)}},nr=function(L){return L},Pt="$'",cn=cr("$'",!1),Sr="'",yr=cr("'",!1),Rr=function(L){return[{type:"text",text:L}]},Xr='""',$n=cr('""',!1),Xs=function(){return{type:"text",text:""}},Hi='"',Qs=cr('"',!1),Zs=function(L){return L},bi=function(L){return{type:"arithmetic",arithmetic:L,quoted:!0}},Fs=function(L){return{type:"shell",shell:L,quoted:!0}},$s=function(L){return{type:"variable",...L,quoted:!0}},PA=function(L){return{type:"text",text:L}},gu=function(L){return{type:"arithmetic",arithmetic:L,quoted:!1}},op=function(L){return{type:"shell",shell:L,quoted:!1}},ap=function(L){return{type:"variable",...L,quoted:!1}},Rs=function(L){return{type:"glob",pattern:L}},Nn=/^[^']/,hs=Ni(["'"],!0,!1),Ts=function(L){return L.join("")},pc=/^[^$"]/,hc=Ni(["$",'"'],!0,!1),gc=`\\ +`,xA=cr(`\\ +`,!1),bA=function(){return""},Ro="\\",To=cr("\\",!1),kA=/^[\\$"`]/,pr=Ni(["\\","$",'"',"`"],!1,!1),Me=function(L){return L},ia="\\a",dc=cr("\\a",!1),Er=function(){return"a"},du="\\b",QA=cr("\\b",!1),FA=function(){return"\b"},mc=/^[Ee]/,yc=Ni(["E","e"],!1,!1),Il=function(){return"\x1B"},we="\\f",Tt=cr("\\f",!1),wl=function(){return"\f"},Bi="\\n",Ls=cr("\\n",!1),Ft=function(){return` +`},Bn="\\r",Lo=cr("\\r",!1),ki=function(){return"\r"},vi="\\t",sa=cr("\\t",!1),un=function(){return" "},qn="\\v",Ec=cr("\\v",!1),lp=function(){return"\v"},oa=/^[\\'"?]/,aa=Ni(["\\","'",'"',"?"],!1,!1),la=function(L){return String.fromCharCode(parseInt(L,16))},Ze="\\x",ca=cr("\\x",!1),mu="\\u",Bl=cr("\\u",!1),dn="\\U",No=cr("\\U",!1),RA=function(L){return String.fromCodePoint(parseInt(L,16))},TA=/^[0-7]/,Oo=Ni([["0","7"]],!1,!1),qa=/^[0-9a-fA-f]/,Ot=Ni([["0","9"],["a","f"],["A","f"]],!1,!1),vn=Iu(),Mo="{}",ua=cr("{}",!1),qi=function(){return"{}"},vl="-",Cc=cr("-",!1),Dl="+",Aa=cr("+",!1),Di=".",rs=cr(".",!1),ja=function(L,K,re){return{type:"number",value:(L==="-"?-1:1)*parseFloat(K.join("")+"."+re.join(""))}},yu=function(L,K){return{type:"number",value:(L==="-"?-1:1)*parseInt(K.join(""))}},Sl=function(L){return{type:"variable",...L}},pi=function(L){return{type:"variable",name:L}},Dn=function(L){return L},Pl="*",Je=cr("*",!1),st="/",vt=cr("/",!1),ar=function(L,K,re){return{type:K==="*"?"multiplication":"division",right:re}},ee=function(L,K){return K.reduce((re,ge)=>({left:re,...ge}),L)},ye=function(L,K,re){return{type:K==="+"?"addition":"subtraction",right:re}},Ne="$((",gt=cr("$((",!1),mt="))",Dt=cr("))",!1),er=function(L){return L},sn="$(",ei=cr("$(",!1),Qi=function(L){return L},Sn="${",fa=cr("${",!1),wd=":-",BI=cr(":-",!1),eo=function(L,K){return{name:L,defaultValue:K}},Bd=":-}",cp=cr(":-}",!1),vI=function(L){return{name:L,defaultValue:[]}},to=":+",up=cr(":+",!1),Ap=function(L,K){return{name:L,alternativeValue:K}},Ic=":+}",fp=cr(":+}",!1),s0=function(L){return{name:L,alternativeValue:[]}},o0=function(L){return{name:L}},a0="$",vd=cr("$",!1),Eu=function(L){return e.isGlobPattern(L)},ro=function(L){return L},Ga=/^[a-zA-Z0-9_]/,pp=Ni([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),l0=function(){return xd()},Wa=/^[$@*?#a-zA-Z0-9_\-]/,Ya=Ni(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),Dd=/^[()}<>$|&; \t"']/,LA=Ni(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),Sd=/^[<>&; \t"']/,Pd=Ni(["<",">","&",";"," "," ",'"',"'"],!1,!1),NA=/^[ \t]/,OA=Ni([" "," "],!1,!1),W=0,xt=0,MA=[{line:1,column:1}],no=0,Cu=[],dt=0,wc;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function xd(){return t.substring(xt,W)}function c0(){return wu(xt,W)}function DI(L,K){throw K=K!==void 0?K:wu(xt,W),UA([u0(L)],t.substring(xt,W),K)}function hp(L,K){throw K=K!==void 0?K:wu(xt,W),oi(L,K)}function cr(L,K){return{type:"literal",text:L,ignoreCase:K}}function Ni(L,K,re){return{type:"class",parts:L,inverted:K,ignoreCase:re}}function Iu(){return{type:"any"}}function pa(){return{type:"end"}}function u0(L){return{type:"other",description:L}}function Bc(L){var K=MA[L],re;if(K)return K;for(re=L-1;!MA[re];)re--;for(K=MA[re],K={line:K.line,column:K.column};reno&&(no=W,Cu=[]),Cu.push(L))}function oi(L,K){return new K0(L,null,null,K)}function UA(L,K,re){return new K0(K0.buildMessage(L,K),L,K,re)}function ha(){var L,K,re;for(L=W,K=[],re=bt();re!==r;)K.push(re),re=bt();return K!==r?(re=Uo(),re===r&&(re=null),re!==r?(xt=L,K=n(re),L=K):(W=L,L=r)):(W=L,L=r),L}function Uo(){var L,K,re,ge,Ye;if(L=W,K=gp(),K!==r){for(re=[],ge=bt();ge!==r;)re.push(ge),ge=bt();re!==r?(ge=A0(),ge!==r?(Ye=ga(),Ye===r&&(Ye=null),Ye!==r?(xt=L,K=u(K,ge,Ye),L=K):(W=L,L=r)):(W=L,L=r)):(W=L,L=r)}else W=L,L=r;if(L===r)if(L=W,K=gp(),K!==r){for(re=[],ge=bt();ge!==r;)re.push(ge),ge=bt();re!==r?(ge=A0(),ge===r&&(ge=null),ge!==r?(xt=L,K=A(K,ge),L=K):(W=L,L=r)):(W=L,L=r)}else W=L,L=r;return L}function ga(){var L,K,re,ge,Ye;for(L=W,K=[],re=bt();re!==r;)K.push(re),re=bt();if(K!==r)if(re=Uo(),re!==r){for(ge=[],Ye=bt();Ye!==r;)ge.push(Ye),Ye=bt();ge!==r?(xt=L,K=p(re),L=K):(W=L,L=r)}else W=L,L=r;else W=L,L=r;return L}function A0(){var L;return t.charCodeAt(W)===59?(L=h,W++):(L=r,dt===0&&wt(E)),L===r&&(t.charCodeAt(W)===38?(L=w,W++):(L=r,dt===0&&wt(D))),L}function gp(){var L,K,re;return L=W,K=_A(),K!==r?(re=f0(),re===r&&(re=null),re!==r?(xt=L,K=b(K,re),L=K):(W=L,L=r)):(W=L,L=r),L}function f0(){var L,K,re,ge,Ye,At,hr;for(L=W,K=[],re=bt();re!==r;)K.push(re),re=bt();if(K!==r)if(re=bd(),re!==r){for(ge=[],Ye=bt();Ye!==r;)ge.push(Ye),Ye=bt();if(ge!==r)if(Ye=gp(),Ye!==r){for(At=[],hr=bt();hr!==r;)At.push(hr),hr=bt();At!==r?(xt=L,K=C(re,Ye),L=K):(W=L,L=r)}else W=L,L=r;else W=L,L=r}else W=L,L=r;else W=L,L=r;return L}function bd(){var L;return t.substr(W,2)===T?(L=T,W+=2):(L=r,dt===0&&wt(N)),L===r&&(t.substr(W,2)===U?(L=U,W+=2):(L=r,dt===0&&wt(J))),L}function _A(){var L,K,re;return L=W,K=Bu(),K!==r?(re=p0(),re===r&&(re=null),re!==r?(xt=L,K=te(K,re),L=K):(W=L,L=r)):(W=L,L=r),L}function p0(){var L,K,re,ge,Ye,At,hr;for(L=W,K=[],re=bt();re!==r;)K.push(re),re=bt();if(K!==r)if(re=vc(),re!==r){for(ge=[],Ye=bt();Ye!==r;)ge.push(Ye),Ye=bt();if(ge!==r)if(Ye=_A(),Ye!==r){for(At=[],hr=bt();hr!==r;)At.push(hr),hr=bt();At!==r?(xt=L,K=le(re,Ye),L=K):(W=L,L=r)}else W=L,L=r;else W=L,L=r}else W=L,L=r;else W=L,L=r;return L}function vc(){var L;return t.substr(W,2)===ce?(L=ce,W+=2):(L=r,dt===0&&wt(ue)),L===r&&(t.charCodeAt(W)===124?(L=Ie,W++):(L=r,dt===0&&wt(he))),L}function Dc(){var L,K,re,ge,Ye,At;if(L=W,K=yp(),K!==r)if(t.charCodeAt(W)===61?(re=De,W++):(re=r,dt===0&&wt(Ee)),re!==r)if(ge=HA(),ge!==r){for(Ye=[],At=bt();At!==r;)Ye.push(At),At=bt();Ye!==r?(xt=L,K=g(K,ge),L=K):(W=L,L=r)}else W=L,L=r;else W=L,L=r;else W=L,L=r;if(L===r)if(L=W,K=yp(),K!==r)if(t.charCodeAt(W)===61?(re=De,W++):(re=r,dt===0&&wt(Ee)),re!==r){for(ge=[],Ye=bt();Ye!==r;)ge.push(Ye),Ye=bt();ge!==r?(xt=L,K=me(K),L=K):(W=L,L=r)}else W=L,L=r;else W=L,L=r;return L}function Bu(){var L,K,re,ge,Ye,At,hr,Ir,Rn,ai,ns;for(L=W,K=[],re=bt();re!==r;)K.push(re),re=bt();if(K!==r)if(t.charCodeAt(W)===40?(re=Ce,W++):(re=r,dt===0&&wt(fe)),re!==r){for(ge=[],Ye=bt();Ye!==r;)ge.push(Ye),Ye=bt();if(ge!==r)if(Ye=Uo(),Ye!==r){for(At=[],hr=bt();hr!==r;)At.push(hr),hr=bt();if(At!==r)if(t.charCodeAt(W)===41?(hr=ie,W++):(hr=r,dt===0&&wt(Z)),hr!==r){for(Ir=[],Rn=bt();Rn!==r;)Ir.push(Rn),Rn=bt();if(Ir!==r){for(Rn=[],ai=On();ai!==r;)Rn.push(ai),ai=On();if(Rn!==r){for(ai=[],ns=bt();ns!==r;)ai.push(ns),ns=bt();ai!==r?(xt=L,K=Se(Ye,Rn),L=K):(W=L,L=r)}else W=L,L=r}else W=L,L=r}else W=L,L=r;else W=L,L=r}else W=L,L=r;else W=L,L=r}else W=L,L=r;else W=L,L=r;if(L===r){for(L=W,K=[],re=bt();re!==r;)K.push(re),re=bt();if(K!==r)if(t.charCodeAt(W)===123?(re=Re,W++):(re=r,dt===0&&wt(ht)),re!==r){for(ge=[],Ye=bt();Ye!==r;)ge.push(Ye),Ye=bt();if(ge!==r)if(Ye=Uo(),Ye!==r){for(At=[],hr=bt();hr!==r;)At.push(hr),hr=bt();if(At!==r)if(t.charCodeAt(W)===125?(hr=q,W++):(hr=r,dt===0&&wt(nt)),hr!==r){for(Ir=[],Rn=bt();Rn!==r;)Ir.push(Rn),Rn=bt();if(Ir!==r){for(Rn=[],ai=On();ai!==r;)Rn.push(ai),ai=On();if(Rn!==r){for(ai=[],ns=bt();ns!==r;)ai.push(ns),ns=bt();ai!==r?(xt=L,K=Le(Ye,Rn),L=K):(W=L,L=r)}else W=L,L=r}else W=L,L=r}else W=L,L=r;else W=L,L=r}else W=L,L=r;else W=L,L=r}else W=L,L=r;else W=L,L=r;if(L===r){for(L=W,K=[],re=bt();re!==r;)K.push(re),re=bt();if(K!==r){for(re=[],ge=Dc();ge!==r;)re.push(ge),ge=Dc();if(re!==r){for(ge=[],Ye=bt();Ye!==r;)ge.push(Ye),Ye=bt();if(ge!==r){if(Ye=[],At=Sc(),At!==r)for(;At!==r;)Ye.push(At),At=Sc();else Ye=r;if(Ye!==r){for(At=[],hr=bt();hr!==r;)At.push(hr),hr=bt();At!==r?(xt=L,K=Te(re,Ye),L=K):(W=L,L=r)}else W=L,L=r}else W=L,L=r}else W=L,L=r}else W=L,L=r;if(L===r){for(L=W,K=[],re=bt();re!==r;)K.push(re),re=bt();if(K!==r){if(re=[],ge=Dc(),ge!==r)for(;ge!==r;)re.push(ge),ge=Dc();else re=r;if(re!==r){for(ge=[],Ye=bt();Ye!==r;)ge.push(Ye),Ye=bt();ge!==r?(xt=L,K=ke(re),L=K):(W=L,L=r)}else W=L,L=r}else W=L,L=r}}}return L}function gs(){var L,K,re,ge,Ye;for(L=W,K=[],re=bt();re!==r;)K.push(re),re=bt();if(K!==r){if(re=[],ge=Ci(),ge!==r)for(;ge!==r;)re.push(ge),ge=Ci();else re=r;if(re!==r){for(ge=[],Ye=bt();Ye!==r;)ge.push(Ye),Ye=bt();ge!==r?(xt=L,K=Ke(re),L=K):(W=L,L=r)}else W=L,L=r}else W=L,L=r;return L}function Sc(){var L,K,re;for(L=W,K=[],re=bt();re!==r;)K.push(re),re=bt();if(K!==r?(re=On(),re!==r?(xt=L,K=xe(re),L=K):(W=L,L=r)):(W=L,L=r),L===r){for(L=W,K=[],re=bt();re!==r;)K.push(re),re=bt();K!==r?(re=Ci(),re!==r?(xt=L,K=xe(re),L=K):(W=L,L=r)):(W=L,L=r)}return L}function On(){var L,K,re,ge,Ye;for(L=W,K=[],re=bt();re!==r;)K.push(re),re=bt();return K!==r?(tt.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(He)),re===r&&(re=null),re!==r?(ge=ji(),ge!==r?(Ye=Ci(),Ye!==r?(xt=L,K=x(re,ge,Ye),L=K):(W=L,L=r)):(W=L,L=r)):(W=L,L=r)):(W=L,L=r),L}function ji(){var L;return t.substr(W,2)===I?(L=I,W+=2):(L=r,dt===0&&wt(P)),L===r&&(t.substr(W,2)===y?(L=y,W+=2):(L=r,dt===0&&wt(R)),L===r&&(t.charCodeAt(W)===62?(L=z,W++):(L=r,dt===0&&wt(X)),L===r&&(t.substr(W,3)===$?(L=$,W+=3):(L=r,dt===0&&wt(se)),L===r&&(t.substr(W,2)===be?(L=be,W+=2):(L=r,dt===0&&wt(Fe)),L===r&&(t.charCodeAt(W)===60?(L=lt,W++):(L=r,dt===0&&wt(Et))))))),L}function Ci(){var L,K,re;for(L=W,K=[],re=bt();re!==r;)K.push(re),re=bt();return K!==r?(re=HA(),re!==r?(xt=L,K=xe(re),L=K):(W=L,L=r)):(W=L,L=r),L}function HA(){var L,K,re;if(L=W,K=[],re=vu(),re!==r)for(;re!==r;)K.push(re),re=vu();else K=r;return K!==r&&(xt=L,K=qt(K)),L=K,L}function vu(){var L,K;return L=W,K=An(),K!==r&&(xt=L,K=nr(K)),L=K,L===r&&(L=W,K=h0(),K!==r&&(xt=L,K=nr(K)),L=K,L===r&&(L=W,K=g0(),K!==r&&(xt=L,K=nr(K)),L=K,L===r&&(L=W,K=Gi(),K!==r&&(xt=L,K=nr(K)),L=K))),L}function An(){var L,K,re,ge;return L=W,t.substr(W,2)===Pt?(K=Pt,W+=2):(K=r,dt===0&&wt(cn)),K!==r?(re=fn(),re!==r?(t.charCodeAt(W)===39?(ge=Sr,W++):(ge=r,dt===0&&wt(yr)),ge!==r?(xt=L,K=Rr(re),L=K):(W=L,L=r)):(W=L,L=r)):(W=L,L=r),L}function h0(){var L,K,re,ge;return L=W,t.charCodeAt(W)===39?(K=Sr,W++):(K=r,dt===0&&wt(yr)),K!==r?(re=Du(),re!==r?(t.charCodeAt(W)===39?(ge=Sr,W++):(ge=r,dt===0&&wt(yr)),ge!==r?(xt=L,K=Rr(re),L=K):(W=L,L=r)):(W=L,L=r)):(W=L,L=r),L}function g0(){var L,K,re,ge;if(L=W,t.substr(W,2)===Xr?(K=Xr,W+=2):(K=r,dt===0&&wt($n)),K!==r&&(xt=L,K=Xs()),L=K,L===r)if(L=W,t.charCodeAt(W)===34?(K=Hi,W++):(K=r,dt===0&&wt(Qs)),K!==r){for(re=[],ge=Va();ge!==r;)re.push(ge),ge=Va();re!==r?(t.charCodeAt(W)===34?(ge=Hi,W++):(ge=r,dt===0&&wt(Qs)),ge!==r?(xt=L,K=Zs(re),L=K):(W=L,L=r)):(W=L,L=r)}else W=L,L=r;return L}function Gi(){var L,K,re;if(L=W,K=[],re=io(),re!==r)for(;re!==r;)K.push(re),re=io();else K=r;return K!==r&&(xt=L,K=Zs(K)),L=K,L}function Va(){var L,K;return L=W,K=Vr(),K!==r&&(xt=L,K=bi(K)),L=K,L===r&&(L=W,K=mp(),K!==r&&(xt=L,K=Fs(K)),L=K,L===r&&(L=W,K=jA(),K!==r&&(xt=L,K=$s(K)),L=K,L===r&&(L=W,K=Su(),K!==r&&(xt=L,K=PA(K)),L=K))),L}function io(){var L,K;return L=W,K=Vr(),K!==r&&(xt=L,K=gu(K)),L=K,L===r&&(L=W,K=mp(),K!==r&&(xt=L,K=op(K)),L=K,L===r&&(L=W,K=jA(),K!==r&&(xt=L,K=ap(K)),L=K,L===r&&(L=W,K=kd(),K!==r&&(xt=L,K=Rs(K)),L=K,L===r&&(L=W,K=dp(),K!==r&&(xt=L,K=PA(K)),L=K)))),L}function Du(){var L,K,re;for(L=W,K=[],Nn.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(hs));re!==r;)K.push(re),Nn.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(hs));return K!==r&&(xt=L,K=Ts(K)),L=K,L}function Su(){var L,K,re;if(L=W,K=[],re=Ka(),re===r&&(pc.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(hc))),re!==r)for(;re!==r;)K.push(re),re=Ka(),re===r&&(pc.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(hc)));else K=r;return K!==r&&(xt=L,K=Ts(K)),L=K,L}function Ka(){var L,K,re;return L=W,t.substr(W,2)===gc?(K=gc,W+=2):(K=r,dt===0&&wt(xA)),K!==r&&(xt=L,K=bA()),L=K,L===r&&(L=W,t.charCodeAt(W)===92?(K=Ro,W++):(K=r,dt===0&&wt(To)),K!==r?(kA.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(pr)),re!==r?(xt=L,K=Me(re),L=K):(W=L,L=r)):(W=L,L=r)),L}function fn(){var L,K,re;for(L=W,K=[],re=so(),re===r&&(Nn.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(hs)));re!==r;)K.push(re),re=so(),re===r&&(Nn.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(hs)));return K!==r&&(xt=L,K=Ts(K)),L=K,L}function so(){var L,K,re;return L=W,t.substr(W,2)===ia?(K=ia,W+=2):(K=r,dt===0&&wt(dc)),K!==r&&(xt=L,K=Er()),L=K,L===r&&(L=W,t.substr(W,2)===du?(K=du,W+=2):(K=r,dt===0&&wt(QA)),K!==r&&(xt=L,K=FA()),L=K,L===r&&(L=W,t.charCodeAt(W)===92?(K=Ro,W++):(K=r,dt===0&&wt(To)),K!==r?(mc.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(yc)),re!==r?(xt=L,K=Il(),L=K):(W=L,L=r)):(W=L,L=r),L===r&&(L=W,t.substr(W,2)===we?(K=we,W+=2):(K=r,dt===0&&wt(Tt)),K!==r&&(xt=L,K=wl()),L=K,L===r&&(L=W,t.substr(W,2)===Bi?(K=Bi,W+=2):(K=r,dt===0&&wt(Ls)),K!==r&&(xt=L,K=Ft()),L=K,L===r&&(L=W,t.substr(W,2)===Bn?(K=Bn,W+=2):(K=r,dt===0&&wt(Lo)),K!==r&&(xt=L,K=ki()),L=K,L===r&&(L=W,t.substr(W,2)===vi?(K=vi,W+=2):(K=r,dt===0&&wt(sa)),K!==r&&(xt=L,K=un()),L=K,L===r&&(L=W,t.substr(W,2)===qn?(K=qn,W+=2):(K=r,dt===0&&wt(Ec)),K!==r&&(xt=L,K=lp()),L=K,L===r&&(L=W,t.charCodeAt(W)===92?(K=Ro,W++):(K=r,dt===0&&wt(To)),K!==r?(oa.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(aa)),re!==r?(xt=L,K=Me(re),L=K):(W=L,L=r)):(W=L,L=r),L===r&&(L=Pc()))))))))),L}function Pc(){var L,K,re,ge,Ye,At,hr,Ir,Rn,ai,ns,GA;return L=W,t.charCodeAt(W)===92?(K=Ro,W++):(K=r,dt===0&&wt(To)),K!==r?(re=_o(),re!==r?(xt=L,K=la(re),L=K):(W=L,L=r)):(W=L,L=r),L===r&&(L=W,t.substr(W,2)===Ze?(K=Ze,W+=2):(K=r,dt===0&&wt(ca)),K!==r?(re=W,ge=W,Ye=_o(),Ye!==r?(At=ds(),At!==r?(Ye=[Ye,At],ge=Ye):(W=ge,ge=r)):(W=ge,ge=r),ge===r&&(ge=_o()),ge!==r?re=t.substring(re,W):re=ge,re!==r?(xt=L,K=la(re),L=K):(W=L,L=r)):(W=L,L=r),L===r&&(L=W,t.substr(W,2)===mu?(K=mu,W+=2):(K=r,dt===0&&wt(Bl)),K!==r?(re=W,ge=W,Ye=ds(),Ye!==r?(At=ds(),At!==r?(hr=ds(),hr!==r?(Ir=ds(),Ir!==r?(Ye=[Ye,At,hr,Ir],ge=Ye):(W=ge,ge=r)):(W=ge,ge=r)):(W=ge,ge=r)):(W=ge,ge=r),ge!==r?re=t.substring(re,W):re=ge,re!==r?(xt=L,K=la(re),L=K):(W=L,L=r)):(W=L,L=r),L===r&&(L=W,t.substr(W,2)===dn?(K=dn,W+=2):(K=r,dt===0&&wt(No)),K!==r?(re=W,ge=W,Ye=ds(),Ye!==r?(At=ds(),At!==r?(hr=ds(),hr!==r?(Ir=ds(),Ir!==r?(Rn=ds(),Rn!==r?(ai=ds(),ai!==r?(ns=ds(),ns!==r?(GA=ds(),GA!==r?(Ye=[Ye,At,hr,Ir,Rn,ai,ns,GA],ge=Ye):(W=ge,ge=r)):(W=ge,ge=r)):(W=ge,ge=r)):(W=ge,ge=r)):(W=ge,ge=r)):(W=ge,ge=r)):(W=ge,ge=r)):(W=ge,ge=r),ge!==r?re=t.substring(re,W):re=ge,re!==r?(xt=L,K=RA(re),L=K):(W=L,L=r)):(W=L,L=r)))),L}function _o(){var L;return TA.test(t.charAt(W))?(L=t.charAt(W),W++):(L=r,dt===0&&wt(Oo)),L}function ds(){var L;return qa.test(t.charAt(W))?(L=t.charAt(W),W++):(L=r,dt===0&&wt(Ot)),L}function dp(){var L,K,re,ge,Ye;if(L=W,K=[],re=W,t.charCodeAt(W)===92?(ge=Ro,W++):(ge=r,dt===0&&wt(To)),ge!==r?(t.length>W?(Ye=t.charAt(W),W++):(Ye=r,dt===0&&wt(vn)),Ye!==r?(xt=re,ge=Me(Ye),re=ge):(W=re,re=r)):(W=re,re=r),re===r&&(re=W,t.substr(W,2)===Mo?(ge=Mo,W+=2):(ge=r,dt===0&&wt(ua)),ge!==r&&(xt=re,ge=qi()),re=ge,re===r&&(re=W,ge=W,dt++,Ye=Qd(),dt--,Ye===r?ge=void 0:(W=ge,ge=r),ge!==r?(t.length>W?(Ye=t.charAt(W),W++):(Ye=r,dt===0&&wt(vn)),Ye!==r?(xt=re,ge=Me(Ye),re=ge):(W=re,re=r)):(W=re,re=r))),re!==r)for(;re!==r;)K.push(re),re=W,t.charCodeAt(W)===92?(ge=Ro,W++):(ge=r,dt===0&&wt(To)),ge!==r?(t.length>W?(Ye=t.charAt(W),W++):(Ye=r,dt===0&&wt(vn)),Ye!==r?(xt=re,ge=Me(Ye),re=ge):(W=re,re=r)):(W=re,re=r),re===r&&(re=W,t.substr(W,2)===Mo?(ge=Mo,W+=2):(ge=r,dt===0&&wt(ua)),ge!==r&&(xt=re,ge=qi()),re=ge,re===r&&(re=W,ge=W,dt++,Ye=Qd(),dt--,Ye===r?ge=void 0:(W=ge,ge=r),ge!==r?(t.length>W?(Ye=t.charAt(W),W++):(Ye=r,dt===0&&wt(vn)),Ye!==r?(xt=re,ge=Me(Ye),re=ge):(W=re,re=r)):(W=re,re=r)));else K=r;return K!==r&&(xt=L,K=Ts(K)),L=K,L}function qA(){var L,K,re,ge,Ye,At;if(L=W,t.charCodeAt(W)===45?(K=vl,W++):(K=r,dt===0&&wt(Cc)),K===r&&(t.charCodeAt(W)===43?(K=Dl,W++):(K=r,dt===0&&wt(Aa))),K===r&&(K=null),K!==r){if(re=[],tt.test(t.charAt(W))?(ge=t.charAt(W),W++):(ge=r,dt===0&&wt(He)),ge!==r)for(;ge!==r;)re.push(ge),tt.test(t.charAt(W))?(ge=t.charAt(W),W++):(ge=r,dt===0&&wt(He));else re=r;if(re!==r)if(t.charCodeAt(W)===46?(ge=Di,W++):(ge=r,dt===0&&wt(rs)),ge!==r){if(Ye=[],tt.test(t.charAt(W))?(At=t.charAt(W),W++):(At=r,dt===0&&wt(He)),At!==r)for(;At!==r;)Ye.push(At),tt.test(t.charAt(W))?(At=t.charAt(W),W++):(At=r,dt===0&&wt(He));else Ye=r;Ye!==r?(xt=L,K=ja(K,re,Ye),L=K):(W=L,L=r)}else W=L,L=r;else W=L,L=r}else W=L,L=r;if(L===r){if(L=W,t.charCodeAt(W)===45?(K=vl,W++):(K=r,dt===0&&wt(Cc)),K===r&&(t.charCodeAt(W)===43?(K=Dl,W++):(K=r,dt===0&&wt(Aa))),K===r&&(K=null),K!==r){if(re=[],tt.test(t.charAt(W))?(ge=t.charAt(W),W++):(ge=r,dt===0&&wt(He)),ge!==r)for(;ge!==r;)re.push(ge),tt.test(t.charAt(W))?(ge=t.charAt(W),W++):(ge=r,dt===0&&wt(He));else re=r;re!==r?(xt=L,K=yu(K,re),L=K):(W=L,L=r)}else W=L,L=r;if(L===r&&(L=W,K=jA(),K!==r&&(xt=L,K=Sl(K)),L=K,L===r&&(L=W,K=xl(),K!==r&&(xt=L,K=pi(K)),L=K,L===r)))if(L=W,t.charCodeAt(W)===40?(K=Ce,W++):(K=r,dt===0&&wt(fe)),K!==r){for(re=[],ge=bt();ge!==r;)re.push(ge),ge=bt();if(re!==r)if(ge=Ns(),ge!==r){for(Ye=[],At=bt();At!==r;)Ye.push(At),At=bt();Ye!==r?(t.charCodeAt(W)===41?(At=ie,W++):(At=r,dt===0&&wt(Z)),At!==r?(xt=L,K=Dn(ge),L=K):(W=L,L=r)):(W=L,L=r)}else W=L,L=r;else W=L,L=r}else W=L,L=r}return L}function Pu(){var L,K,re,ge,Ye,At,hr,Ir;if(L=W,K=qA(),K!==r){for(re=[],ge=W,Ye=[],At=bt();At!==r;)Ye.push(At),At=bt();if(Ye!==r)if(t.charCodeAt(W)===42?(At=Pl,W++):(At=r,dt===0&&wt(Je)),At===r&&(t.charCodeAt(W)===47?(At=st,W++):(At=r,dt===0&&wt(vt))),At!==r){for(hr=[],Ir=bt();Ir!==r;)hr.push(Ir),Ir=bt();hr!==r?(Ir=qA(),Ir!==r?(xt=ge,Ye=ar(K,At,Ir),ge=Ye):(W=ge,ge=r)):(W=ge,ge=r)}else W=ge,ge=r;else W=ge,ge=r;for(;ge!==r;){for(re.push(ge),ge=W,Ye=[],At=bt();At!==r;)Ye.push(At),At=bt();if(Ye!==r)if(t.charCodeAt(W)===42?(At=Pl,W++):(At=r,dt===0&&wt(Je)),At===r&&(t.charCodeAt(W)===47?(At=st,W++):(At=r,dt===0&&wt(vt))),At!==r){for(hr=[],Ir=bt();Ir!==r;)hr.push(Ir),Ir=bt();hr!==r?(Ir=qA(),Ir!==r?(xt=ge,Ye=ar(K,At,Ir),ge=Ye):(W=ge,ge=r)):(W=ge,ge=r)}else W=ge,ge=r;else W=ge,ge=r}re!==r?(xt=L,K=ee(K,re),L=K):(W=L,L=r)}else W=L,L=r;return L}function Ns(){var L,K,re,ge,Ye,At,hr,Ir;if(L=W,K=Pu(),K!==r){for(re=[],ge=W,Ye=[],At=bt();At!==r;)Ye.push(At),At=bt();if(Ye!==r)if(t.charCodeAt(W)===43?(At=Dl,W++):(At=r,dt===0&&wt(Aa)),At===r&&(t.charCodeAt(W)===45?(At=vl,W++):(At=r,dt===0&&wt(Cc))),At!==r){for(hr=[],Ir=bt();Ir!==r;)hr.push(Ir),Ir=bt();hr!==r?(Ir=Pu(),Ir!==r?(xt=ge,Ye=ye(K,At,Ir),ge=Ye):(W=ge,ge=r)):(W=ge,ge=r)}else W=ge,ge=r;else W=ge,ge=r;for(;ge!==r;){for(re.push(ge),ge=W,Ye=[],At=bt();At!==r;)Ye.push(At),At=bt();if(Ye!==r)if(t.charCodeAt(W)===43?(At=Dl,W++):(At=r,dt===0&&wt(Aa)),At===r&&(t.charCodeAt(W)===45?(At=vl,W++):(At=r,dt===0&&wt(Cc))),At!==r){for(hr=[],Ir=bt();Ir!==r;)hr.push(Ir),Ir=bt();hr!==r?(Ir=Pu(),Ir!==r?(xt=ge,Ye=ye(K,At,Ir),ge=Ye):(W=ge,ge=r)):(W=ge,ge=r)}else W=ge,ge=r;else W=ge,ge=r}re!==r?(xt=L,K=ee(K,re),L=K):(W=L,L=r)}else W=L,L=r;return L}function Vr(){var L,K,re,ge,Ye,At;if(L=W,t.substr(W,3)===Ne?(K=Ne,W+=3):(K=r,dt===0&&wt(gt)),K!==r){for(re=[],ge=bt();ge!==r;)re.push(ge),ge=bt();if(re!==r)if(ge=Ns(),ge!==r){for(Ye=[],At=bt();At!==r;)Ye.push(At),At=bt();Ye!==r?(t.substr(W,2)===mt?(At=mt,W+=2):(At=r,dt===0&&wt(Dt)),At!==r?(xt=L,K=er(ge),L=K):(W=L,L=r)):(W=L,L=r)}else W=L,L=r;else W=L,L=r}else W=L,L=r;return L}function mp(){var L,K,re,ge;return L=W,t.substr(W,2)===sn?(K=sn,W+=2):(K=r,dt===0&&wt(ei)),K!==r?(re=Uo(),re!==r?(t.charCodeAt(W)===41?(ge=ie,W++):(ge=r,dt===0&&wt(Z)),ge!==r?(xt=L,K=Qi(re),L=K):(W=L,L=r)):(W=L,L=r)):(W=L,L=r),L}function jA(){var L,K,re,ge,Ye,At;return L=W,t.substr(W,2)===Sn?(K=Sn,W+=2):(K=r,dt===0&&wt(fa)),K!==r?(re=xl(),re!==r?(t.substr(W,2)===wd?(ge=wd,W+=2):(ge=r,dt===0&&wt(BI)),ge!==r?(Ye=gs(),Ye!==r?(t.charCodeAt(W)===125?(At=q,W++):(At=r,dt===0&&wt(nt)),At!==r?(xt=L,K=eo(re,Ye),L=K):(W=L,L=r)):(W=L,L=r)):(W=L,L=r)):(W=L,L=r)):(W=L,L=r),L===r&&(L=W,t.substr(W,2)===Sn?(K=Sn,W+=2):(K=r,dt===0&&wt(fa)),K!==r?(re=xl(),re!==r?(t.substr(W,3)===Bd?(ge=Bd,W+=3):(ge=r,dt===0&&wt(cp)),ge!==r?(xt=L,K=vI(re),L=K):(W=L,L=r)):(W=L,L=r)):(W=L,L=r),L===r&&(L=W,t.substr(W,2)===Sn?(K=Sn,W+=2):(K=r,dt===0&&wt(fa)),K!==r?(re=xl(),re!==r?(t.substr(W,2)===to?(ge=to,W+=2):(ge=r,dt===0&&wt(up)),ge!==r?(Ye=gs(),Ye!==r?(t.charCodeAt(W)===125?(At=q,W++):(At=r,dt===0&&wt(nt)),At!==r?(xt=L,K=Ap(re,Ye),L=K):(W=L,L=r)):(W=L,L=r)):(W=L,L=r)):(W=L,L=r)):(W=L,L=r),L===r&&(L=W,t.substr(W,2)===Sn?(K=Sn,W+=2):(K=r,dt===0&&wt(fa)),K!==r?(re=xl(),re!==r?(t.substr(W,3)===Ic?(ge=Ic,W+=3):(ge=r,dt===0&&wt(fp)),ge!==r?(xt=L,K=s0(re),L=K):(W=L,L=r)):(W=L,L=r)):(W=L,L=r),L===r&&(L=W,t.substr(W,2)===Sn?(K=Sn,W+=2):(K=r,dt===0&&wt(fa)),K!==r?(re=xl(),re!==r?(t.charCodeAt(W)===125?(ge=q,W++):(ge=r,dt===0&&wt(nt)),ge!==r?(xt=L,K=o0(re),L=K):(W=L,L=r)):(W=L,L=r)):(W=L,L=r),L===r&&(L=W,t.charCodeAt(W)===36?(K=a0,W++):(K=r,dt===0&&wt(vd)),K!==r?(re=xl(),re!==r?(xt=L,K=o0(re),L=K):(W=L,L=r)):(W=L,L=r)))))),L}function kd(){var L,K,re;return L=W,K=d0(),K!==r?(xt=W,re=Eu(K),re?re=void 0:re=r,re!==r?(xt=L,K=ro(K),L=K):(W=L,L=r)):(W=L,L=r),L}function d0(){var L,K,re,ge,Ye;if(L=W,K=[],re=W,ge=W,dt++,Ye=Ep(),dt--,Ye===r?ge=void 0:(W=ge,ge=r),ge!==r?(t.length>W?(Ye=t.charAt(W),W++):(Ye=r,dt===0&&wt(vn)),Ye!==r?(xt=re,ge=Me(Ye),re=ge):(W=re,re=r)):(W=re,re=r),re!==r)for(;re!==r;)K.push(re),re=W,ge=W,dt++,Ye=Ep(),dt--,Ye===r?ge=void 0:(W=ge,ge=r),ge!==r?(t.length>W?(Ye=t.charAt(W),W++):(Ye=r,dt===0&&wt(vn)),Ye!==r?(xt=re,ge=Me(Ye),re=ge):(W=re,re=r)):(W=re,re=r);else K=r;return K!==r&&(xt=L,K=Ts(K)),L=K,L}function yp(){var L,K,re;if(L=W,K=[],Ga.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(pp)),re!==r)for(;re!==r;)K.push(re),Ga.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(pp));else K=r;return K!==r&&(xt=L,K=l0()),L=K,L}function xl(){var L,K,re;if(L=W,K=[],Wa.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(Ya)),re!==r)for(;re!==r;)K.push(re),Wa.test(t.charAt(W))?(re=t.charAt(W),W++):(re=r,dt===0&&wt(Ya));else K=r;return K!==r&&(xt=L,K=l0()),L=K,L}function Qd(){var L;return Dd.test(t.charAt(W))?(L=t.charAt(W),W++):(L=r,dt===0&&wt(LA)),L}function Ep(){var L;return Sd.test(t.charAt(W))?(L=t.charAt(W),W++):(L=r,dt===0&&wt(Pd)),L}function bt(){var L,K;if(L=[],NA.test(t.charAt(W))?(K=t.charAt(W),W++):(K=r,dt===0&&wt(OA)),K!==r)for(;K!==r;)L.push(K),NA.test(t.charAt(W))?(K=t.charAt(W),W++):(K=r,dt===0&&wt(OA));else L=r;return L}if(wc=a(),wc!==r&&W===t.length)return wc;throw wc!==r&&W!1}){try{return(0,OY.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 dm(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:o},a)=>`${AS(r)}${o===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function AS(t){return`${mm(t.chain)}${t.then?` ${UT(t.then)}`:""}`}function UT(t){return`${t.type} ${AS(t.line)}`}function mm(t){return`${HT(t)}${t.then?` ${_T(t.then)}`:""}`}function _T(t){return`${t.type} ${mm(t.chain)}`}function HT(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>cS(e)).join(" ")} `:""}${t.args.map(e=>qT(e)).join(" ")}`;case"subshell":return`(${dm(t.subshell)})${t.args.length>0?` ${t.args.map(e=>fw(e)).join(" ")}`:""}`;case"group":return`{ ${dm(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>fw(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>cS(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function cS(t){return`${t.name}=${t.args[0]?J0(t.args[0]):""}`}function qT(t){switch(t.type){case"redirection":return fw(t);case"argument":return J0(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function fw(t){return`${t.subtype} ${t.args.map(e=>J0(e)).join(" ")}`}function J0(t){return t.segments.map(e=>jT(e)).join("")}function jT(t){let e=(o,a)=>a?`"${o}"`:o,r=o=>o===""?"''":o.match(/[()}<>$|&;"'\n\t ]/)?o.match(/['\t\p{C}]/u)?o.match(/'/)?`"${o.replace(/["$\t\p{C}]/u,$_e)}"`:`$'${o.replace(/[\t\p{C}]/u,UY)}'`:`'${o}'`:o;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`$(${dm(t.shell)})`,t.quoted);case"variable":return e(typeof t.defaultValue>"u"?typeof t.alternativeValue>"u"?`\${${t.name}}`:t.alternativeValue.length===0?`\${${t.name}:+}`:`\${${t.name}:+${t.alternativeValue.map(o=>J0(o)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(o=>J0(o)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${fS(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function fS(t){let e=a=>{switch(a){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 "${a}"`)}},r=(a,n)=>n?`( ${a} )`:a,o=a=>r(fS(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${o(t.left)} ${e(t.type)} ${o(t.right)}`}}var OY,MY,Z_e,UY,$_e,_Y=It(()=>{OY=et(NY());MY=new Map([["\f","\\f"],[` +`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),Z_e=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(MY,([t,e])=>[t,`"$'${e}'"`])]),UY=t=>MY.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,$_e=t=>Z_e.get(t)??`"$'${UY(t)}'"`});var qY=_((dxt,HY)=>{"use strict";function e8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function z0(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,z0)}e8e(z0,Error);z0.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",w;for(w=0;w0){for(w=1,D=1;wce&&(ce=J,ue=[]),ue.push(He))}function nt(He,x){return new z0(He,null,null,x)}function Le(He,x,I){return new z0(z0.buildMessage(He,x),He,x,I)}function Te(){var He,x,I,P;return He=J,x=ke(),x!==r?(t.charCodeAt(J)===47?(I=n,J++):(I=r,Ie===0&&q(u)),I!==r?(P=ke(),P!==r?(te=He,x=A(x,P),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=ke(),x!==r&&(te=He,x=p(x)),He=x),He}function ke(){var He,x,I,P;return He=J,x=Ke(),x!==r?(t.charCodeAt(J)===64?(I=h,J++):(I=r,Ie===0&&q(E)),I!==r?(P=tt(),P!==r?(te=He,x=w(x,P),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=Ke(),x!==r&&(te=He,x=D(x)),He=x),He}function Ke(){var He,x,I,P,y;return He=J,t.charCodeAt(J)===64?(x=h,J++):(x=r,Ie===0&&q(E)),x!==r?(I=xe(),I!==r?(t.charCodeAt(J)===47?(P=n,J++):(P=r,Ie===0&&q(u)),P!==r?(y=xe(),y!==r?(te=He,x=b(),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=xe(),x!==r&&(te=He,x=b()),He=x),He}function xe(){var He,x,I;if(He=J,x=[],C.test(t.charAt(J))?(I=t.charAt(J),J++):(I=r,Ie===0&&q(T)),I!==r)for(;I!==r;)x.push(I),C.test(t.charAt(J))?(I=t.charAt(J),J++):(I=r,Ie===0&&q(T));else x=r;return x!==r&&(te=He,x=b()),He=x,He}function tt(){var He,x,I;if(He=J,x=[],N.test(t.charAt(J))?(I=t.charAt(J),J++):(I=r,Ie===0&&q(U)),I!==r)for(;I!==r;)x.push(I),N.test(t.charAt(J))?(I=t.charAt(J),J++):(I=r,Ie===0&&q(U));else x=r;return x!==r&&(te=He,x=b()),He=x,He}if(he=a(),he!==r&&J===t.length)return he;throw he!==r&&J{jY=et(qY())});var Z0=_((yxt,X0)=>{"use strict";function WY(t){return typeof t>"u"||t===null}function r8e(t){return typeof t=="object"&&t!==null}function n8e(t){return Array.isArray(t)?t:WY(t)?[]:[t]}function i8e(t,e){var r,o,a,n;if(e)for(n=Object.keys(e),r=0,o=n.length;r{"use strict";function pw(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||""}pw.prototype=Object.create(Error.prototype);pw.prototype.constructor=pw;pw.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};YY.exports=pw});var JY=_((Cxt,KY)=>{"use strict";var VY=Z0();function GT(t,e,r,o,a){this.name=t,this.buffer=e,this.position=r,this.line=o,this.column=a}GT.prototype.getSnippet=function(e,r){var o,a,n,u,A;if(!this.buffer)return null;for(e=e||4,r=r||75,o="",a=this.position;a>0&&`\0\r +\x85\u2028\u2029`.indexOf(this.buffer.charAt(a-1))===-1;)if(a-=1,this.position-a>r/2-1){o=" ... ",a+=5;break}for(n="",u=this.position;ur/2-1){n=" ... ",u-=5;break}return A=this.buffer.slice(a,u),VY.repeat(" ",e)+o+A+n+` +`+VY.repeat(" ",e+this.position-a+o.length)+"^"};GT.prototype.toString=function(e){var r,o="";return this.name&&(o+='in "'+this.name+'" '),o+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(o+=`: +`+r)),o};KY.exports=GT});var as=_((Ixt,XY)=>{"use strict";var zY=ym(),a8e=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],l8e=["scalar","sequence","mapping"];function c8e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(o){e[String(o)]=r})}),e}function u8e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(a8e.indexOf(r)===-1)throw new zY('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=c8e(e.styleAliases||null),l8e.indexOf(this.kind)===-1)throw new zY('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}XY.exports=u8e});var $0=_((wxt,$Y)=>{"use strict";var ZY=Z0(),gS=ym(),A8e=as();function WT(t,e,r){var o=[];return t.include.forEach(function(a){r=WT(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,u){n.tag===a.tag&&n.kind===a.kind&&o.push(u)}),r.push(a)}),r.filter(function(a,n){return o.indexOf(n)===-1})}function f8e(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function o(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var p8e=as();eV.exports=new p8e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var nV=_((vxt,rV)=>{"use strict";var h8e=as();rV.exports=new h8e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var sV=_((Dxt,iV)=>{"use strict";var g8e=as();iV.exports=new g8e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var dS=_((Sxt,oV)=>{"use strict";var d8e=$0();oV.exports=new d8e({explicit:[tV(),nV(),sV()]})});var lV=_((Pxt,aV)=>{"use strict";var m8e=as();function y8e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function E8e(){return null}function C8e(t){return t===null}aV.exports=new m8e("tag:yaml.org,2002:null",{kind:"scalar",resolve:y8e,construct:E8e,predicate:C8e,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var uV=_((xxt,cV)=>{"use strict";var I8e=as();function w8e(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 B8e(t){return t==="true"||t==="True"||t==="TRUE"}function v8e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}cV.exports=new I8e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:w8e,construct:B8e,predicate:v8e,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 fV=_((bxt,AV)=>{"use strict";var D8e=Z0(),S8e=as();function P8e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function x8e(t){return 48<=t&&t<=55}function b8e(t){return 48<=t&&t<=57}function k8e(t){if(t===null)return!1;var e=t.length,r=0,o=!1,a;if(!e)return!1;if(a=t[r],(a==="-"||a==="+")&&(a=t[++r]),a==="0"){if(r+1===e)return!0;if(a=t[++r],a==="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 gV=_((kxt,hV)=>{"use strict";var pV=Z0(),R8e=as(),T8e=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 L8e(t){return!(t===null||!T8e.test(t)||t[t.length-1]==="_")}function N8e(t){var e,r,o,a;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,a=[],"+-".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(n){a.unshift(parseFloat(n,10))}),e=0,o=1,a.forEach(function(n){e+=n*o,o*=60}),r*e):r*parseFloat(e,10)}var O8e=/^[-+]?[0-9]+e/;function M8e(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(pV.isNegativeZero(t))return"-0.0";return r=t.toString(10),O8e.test(r)?r.replace("e",".e"):r}function U8e(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||pV.isNegativeZero(t))}hV.exports=new R8e("tag:yaml.org,2002:float",{kind:"scalar",resolve:L8e,construct:N8e,predicate:U8e,represent:M8e,defaultStyle:"lowercase"})});var YT=_((Qxt,dV)=>{"use strict";var _8e=$0();dV.exports=new _8e({include:[dS()],implicit:[lV(),uV(),fV(),gV()]})});var VT=_((Fxt,mV)=>{"use strict";var H8e=$0();mV.exports=new H8e({include:[YT()]})});var IV=_((Rxt,CV)=>{"use strict";var q8e=as(),yV=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),EV=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 j8e(t){return t===null?!1:yV.exec(t)!==null||EV.exec(t)!==null}function G8e(t){var e,r,o,a,n,u,A,p=0,h=null,E,w,D;if(e=yV.exec(t),e===null&&(e=EV.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],o=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,o,a));if(n=+e[4],u=+e[5],A=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(E=+e[10],w=+(e[11]||0),h=(E*60+w)*6e4,e[9]==="-"&&(h=-h)),D=new Date(Date.UTC(r,o,a,n,u,A,p)),h&&D.setTime(D.getTime()-h),D}function W8e(t){return t.toISOString()}CV.exports=new q8e("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:j8e,construct:G8e,instanceOf:Date,represent:W8e})});var BV=_((Txt,wV)=>{"use strict";var Y8e=as();function V8e(t){return t==="<<"||t===null}wV.exports=new Y8e("tag:yaml.org,2002:merge",{kind:"scalar",resolve:V8e})});var SV=_((Lxt,DV)=>{"use strict";var eg;try{vV=ve,eg=vV("buffer").Buffer}catch{}var vV,K8e=as(),KT=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function J8e(t){if(t===null)return!1;var e,r,o=0,a=t.length,n=KT;for(r=0;r64)){if(e<0)return!1;o+=6}return o%8===0}function z8e(t){var e,r,o=t.replace(/[\r\n=]/g,""),a=o.length,n=KT,u=0,A=[];for(e=0;e>16&255),A.push(u>>8&255),A.push(u&255)),u=u<<6|n.indexOf(o.charAt(e));return r=a%4*6,r===0?(A.push(u>>16&255),A.push(u>>8&255),A.push(u&255)):r===18?(A.push(u>>10&255),A.push(u>>2&255)):r===12&&A.push(u>>4&255),eg?eg.from?eg.from(A):new eg(A):A}function X8e(t){var e="",r=0,o,a,n=t.length,u=KT;for(o=0;o>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]),r=(r<<8)+t[o];return a=n%3,a===0?(e+=u[r>>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]):a===2?(e+=u[r>>10&63],e+=u[r>>4&63],e+=u[r<<2&63],e+=u[64]):a===1&&(e+=u[r>>2&63],e+=u[r<<4&63],e+=u[64],e+=u[64]),e}function Z8e(t){return eg&&eg.isBuffer(t)}DV.exports=new K8e("tag:yaml.org,2002:binary",{kind:"scalar",resolve:J8e,construct:z8e,predicate:Z8e,represent:X8e})});var xV=_((Oxt,PV)=>{"use strict";var $8e=as(),eHe=Object.prototype.hasOwnProperty,tHe=Object.prototype.toString;function rHe(t){if(t===null)return!0;var e=[],r,o,a,n,u,A=t;for(r=0,o=A.length;r{"use strict";var iHe=as(),sHe=Object.prototype.toString;function oHe(t){if(t===null)return!0;var e,r,o,a,n,u=t;for(n=new Array(u.length),e=0,r=u.length;e{"use strict";var lHe=as(),cHe=Object.prototype.hasOwnProperty;function uHe(t){if(t===null)return!0;var e,r=t;for(e in r)if(cHe.call(r,e)&&r[e]!==null)return!1;return!0}function AHe(t){return t!==null?t:{}}QV.exports=new lHe("tag:yaml.org,2002:set",{kind:"mapping",resolve:uHe,construct:AHe})});var Cm=_((_xt,RV)=>{"use strict";var fHe=$0();RV.exports=new fHe({include:[VT()],implicit:[IV(),BV()],explicit:[SV(),xV(),kV(),FV()]})});var LV=_((Hxt,TV)=>{"use strict";var pHe=as();function hHe(){return!0}function gHe(){}function dHe(){return""}function mHe(t){return typeof t>"u"}TV.exports=new pHe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:hHe,construct:gHe,predicate:mHe,represent:dHe})});var OV=_((qxt,NV)=>{"use strict";var yHe=as();function EHe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),o="";return!(e[0]==="/"&&(r&&(o=r[1]),o.length>3||e[e.length-o.length-1]!=="/"))}function CHe(t){var e=t,r=/\/([gim]*)$/.exec(t),o="";return e[0]==="/"&&(r&&(o=r[1]),e=e.slice(1,e.length-o.length-1)),new RegExp(e,o)}function IHe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function wHe(t){return Object.prototype.toString.call(t)==="[object RegExp]"}NV.exports=new yHe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:EHe,construct:CHe,predicate:wHe,represent:IHe})});var _V=_((jxt,UV)=>{"use strict";var mS;try{MV=ve,mS=MV("esprima")}catch{typeof window<"u"&&(mS=window.esprima)}var MV,BHe=as();function vHe(t){if(t===null)return!1;try{var e="("+t+")",r=mS.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{return!1}}function DHe(t){var e="("+t+")",r=mS.parse(e,{range:!0}),o=[],a;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(n){o.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(o,e.slice(a[0]+1,a[1]-1)):new Function(o,"return "+e.slice(a[0],a[1]))}function SHe(t){return t.toString()}function PHe(t){return Object.prototype.toString.call(t)==="[object Function]"}UV.exports=new BHe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:vHe,construct:DHe,predicate:PHe,represent:SHe})});var hw=_((Wxt,qV)=>{"use strict";var HV=$0();qV.exports=HV.DEFAULT=new HV({include:[Cm()],explicit:[LV(),OV(),_V()]})});var aK=_((Yxt,gw)=>{"use strict";var mf=Z0(),JV=ym(),xHe=JY(),zV=Cm(),bHe=hw(),Kp=Object.prototype.hasOwnProperty,yS=1,XV=2,ZV=3,ES=4,JT=1,kHe=2,jV=3,QHe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,FHe=/[\x85\u2028\u2029]/,RHe=/[,\[\]\{\}]/,$V=/^(?:!|!!|![a-z\-]+!)$/i,eK=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function GV(t){return Object.prototype.toString.call(t)}function Wu(t){return t===10||t===13}function rg(t){return t===9||t===32}function Da(t){return t===9||t===32||t===10||t===13}function Im(t){return t===44||t===91||t===93||t===123||t===125}function THe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function LHe(t){return t===120?2:t===117?4:t===85?8:0}function NHe(t){return 48<=t&&t<=57?t-48:-1}function WV(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?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function OHe(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var tK=new Array(256),rK=new Array(256);for(tg=0;tg<256;tg++)tK[tg]=WV(tg)?1:0,rK[tg]=WV(tg);var tg;function MHe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||bHe,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 nK(t,e){return new JV(e,new xHe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Qr(t,e){throw nK(t,e)}function CS(t,e){t.onWarning&&t.onWarning.call(null,nK(t,e))}var YV={YAML:function(e,r,o){var a,n,u;e.version!==null&&Qr(e,"duplication of %YAML directive"),o.length!==1&&Qr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(o[0]),a===null&&Qr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),u=parseInt(a[2],10),n!==1&&Qr(e,"unacceptable YAML version of the document"),e.version=o[0],e.checkLineBreaks=u<2,u!==1&&u!==2&&CS(e,"unsupported YAML version of the document")},TAG:function(e,r,o){var a,n;o.length!==2&&Qr(e,"TAG directive accepts exactly two arguments"),a=o[0],n=o[1],$V.test(a)||Qr(e,"ill-formed tag handle (first argument) of the TAG directive"),Kp.call(e.tagMap,a)&&Qr(e,'there is a previously declared suffix for "'+a+'" tag handle'),eK.test(n)||Qr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function Vp(t,e,r,o){var a,n,u,A;if(e1&&(t.result+=mf.repeat(` +`,e-1))}function UHe(t,e,r){var o,a,n,u,A,p,h,E,w=t.kind,D=t.result,b;if(b=t.input.charCodeAt(t.position),Da(b)||Im(b)||b===35||b===38||b===42||b===33||b===124||b===62||b===39||b===34||b===37||b===64||b===96||(b===63||b===45)&&(a=t.input.charCodeAt(t.position+1),Da(a)||r&&Im(a)))return!1;for(t.kind="scalar",t.result="",n=u=t.position,A=!1;b!==0;){if(b===58){if(a=t.input.charCodeAt(t.position+1),Da(a)||r&&Im(a))break}else if(b===35){if(o=t.input.charCodeAt(t.position-1),Da(o))break}else{if(t.position===t.lineStart&&IS(t)||r&&Im(b))break;if(Wu(b))if(p=t.line,h=t.lineStart,E=t.lineIndent,Yi(t,!1,-1),t.lineIndent>=e){A=!0,b=t.input.charCodeAt(t.position);continue}else{t.position=u,t.line=p,t.lineStart=h,t.lineIndent=E;break}}A&&(Vp(t,n,u,!1),XT(t,t.line-p),n=u=t.position,A=!1),rg(b)||(u=t.position+1),b=t.input.charCodeAt(++t.position)}return Vp(t,n,u,!1),t.result?!0:(t.kind=w,t.result=D,!1)}function _He(t,e){var r,o,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,o=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(Vp(t,o,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)o=t.position,t.position++,a=t.position;else return!0;else Wu(r)?(Vp(t,o,a,!0),XT(t,Yi(t,!1,e)),o=a=t.position):t.position===t.lineStart&&IS(t)?Qr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Qr(t,"unexpected end of the stream within a single quoted scalar")}function HHe(t,e){var r,o,a,n,u,A;if(A=t.input.charCodeAt(t.position),A!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=o=t.position;(A=t.input.charCodeAt(t.position))!==0;){if(A===34)return Vp(t,r,t.position,!0),t.position++,!0;if(A===92){if(Vp(t,r,t.position,!0),A=t.input.charCodeAt(++t.position),Wu(A))Yi(t,!1,e);else if(A<256&&tK[A])t.result+=rK[A],t.position++;else if((u=LHe(A))>0){for(a=u,n=0;a>0;a--)A=t.input.charCodeAt(++t.position),(u=THe(A))>=0?n=(n<<4)+u:Qr(t,"expected hexadecimal character");t.result+=OHe(n),t.position++}else Qr(t,"unknown escape sequence");r=o=t.position}else Wu(A)?(Vp(t,r,o,!0),XT(t,Yi(t,!1,e)),r=o=t.position):t.position===t.lineStart&&IS(t)?Qr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}Qr(t,"unexpected end of the stream within a double quoted scalar")}function qHe(t,e){var r=!0,o,a=t.tag,n,u=t.anchor,A,p,h,E,w,D={},b,C,T,N;if(N=t.input.charCodeAt(t.position),N===91)p=93,w=!1,n=[];else if(N===123)p=125,w=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),N=t.input.charCodeAt(++t.position);N!==0;){if(Yi(t,!0,e),N=t.input.charCodeAt(t.position),N===p)return t.position++,t.tag=a,t.anchor=u,t.kind=w?"mapping":"sequence",t.result=n,!0;r||Qr(t,"missed comma between flow collection entries"),C=b=T=null,h=E=!1,N===63&&(A=t.input.charCodeAt(t.position+1),Da(A)&&(h=E=!0,t.position++,Yi(t,!0,e))),o=t.line,Bm(t,e,yS,!1,!0),C=t.tag,b=t.result,Yi(t,!0,e),N=t.input.charCodeAt(t.position),(E||t.line===o)&&N===58&&(h=!0,N=t.input.charCodeAt(++t.position),Yi(t,!0,e),Bm(t,e,yS,!1,!0),T=t.result),w?wm(t,n,D,C,b,T):h?n.push(wm(t,null,D,C,b,T)):n.push(b),Yi(t,!0,e),N=t.input.charCodeAt(t.position),N===44?(r=!0,N=t.input.charCodeAt(++t.position)):r=!1}Qr(t,"unexpected end of the stream within a flow collection")}function jHe(t,e){var r,o,a=JT,n=!1,u=!1,A=e,p=0,h=!1,E,w;if(w=t.input.charCodeAt(t.position),w===124)o=!1;else if(w===62)o=!0;else return!1;for(t.kind="scalar",t.result="";w!==0;)if(w=t.input.charCodeAt(++t.position),w===43||w===45)JT===a?a=w===43?jV:kHe:Qr(t,"repeat of a chomping mode identifier");else if((E=NHe(w))>=0)E===0?Qr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?Qr(t,"repeat of an indentation width identifier"):(A=e+E-1,u=!0);else break;if(rg(w)){do w=t.input.charCodeAt(++t.position);while(rg(w));if(w===35)do w=t.input.charCodeAt(++t.position);while(!Wu(w)&&w!==0)}for(;w!==0;){for(zT(t),t.lineIndent=0,w=t.input.charCodeAt(t.position);(!u||t.lineIndentA&&(A=t.lineIndent),Wu(w)){p++;continue}if(t.lineIndente)&&p!==0)Qr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(Bm(t,e,ES,!0,a)&&(C?D=t.result:b=t.result),C||(wm(t,h,E,w,D,b,n,u),w=D=b=null),Yi(t,!0,-1),N=t.input.charCodeAt(t.position)),t.lineIndent>e&&N!==0)Qr(t,"bad indentation of a mapping entry");else if(t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),w=0,D=t.implicitTypes.length;w tag; it should be "'+b.kind+'", not "'+t.kind+'"'),b.resolve(t.result)?(t.result=b.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Qr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Qr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||E}function KHe(t){var e=t.position,r,o,a,n=!1,u;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(u=t.input.charCodeAt(t.position))!==0&&(Yi(t,!0,-1),u=t.input.charCodeAt(t.position),!(t.lineIndent>0||u!==37));){for(n=!0,u=t.input.charCodeAt(++t.position),r=t.position;u!==0&&!Da(u);)u=t.input.charCodeAt(++t.position);for(o=t.input.slice(r,t.position),a=[],o.length<1&&Qr(t,"directive name must not be less than one character in length");u!==0;){for(;rg(u);)u=t.input.charCodeAt(++t.position);if(u===35){do u=t.input.charCodeAt(++t.position);while(u!==0&&!Wu(u));break}if(Wu(u))break;for(r=t.position;u!==0&&!Da(u);)u=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}u!==0&&zT(t),Kp.call(YV,o)?YV[o](t,o,a):CS(t,'unknown document directive "'+o+'"')}if(Yi(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,Yi(t,!0,-1)):n&&Qr(t,"directives end mark is expected"),Bm(t,t.lineIndent-1,ES,!1,!0),Yi(t,!0,-1),t.checkLineBreaks&&FHe.test(t.input.slice(e,t.position))&&CS(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&IS(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Yi(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var o=iK(t,r);if(typeof e!="function")return o;for(var a=0,n=o.length;a"u"&&(r=e,e=null),sK(t,e,mf.extend({schema:zV},r))}function zHe(t,e){return oK(t,mf.extend({schema:zV},e))}gw.exports.loadAll=sK;gw.exports.load=oK;gw.exports.safeLoadAll=JHe;gw.exports.safeLoad=zHe});var kK=_((Vxt,tL)=>{"use strict";var mw=Z0(),yw=ym(),XHe=hw(),ZHe=Cm(),gK=Object.prototype.toString,dK=Object.prototype.hasOwnProperty,$He=9,dw=10,e6e=13,t6e=32,r6e=33,n6e=34,mK=35,i6e=37,s6e=38,o6e=39,a6e=42,yK=44,l6e=45,EK=58,c6e=61,u6e=62,A6e=63,f6e=64,CK=91,IK=93,p6e=96,wK=123,h6e=124,BK=125,mo={};mo[0]="\\0";mo[7]="\\a";mo[8]="\\b";mo[9]="\\t";mo[10]="\\n";mo[11]="\\v";mo[12]="\\f";mo[13]="\\r";mo[27]="\\e";mo[34]='\\"';mo[92]="\\\\";mo[133]="\\N";mo[160]="\\_";mo[8232]="\\L";mo[8233]="\\P";var g6e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function d6e(t,e){var r,o,a,n,u,A,p;if(e===null)return{};for(r={},o=Object.keys(e),a=0,n=o.length;a0?t.charCodeAt(n-1):null,D=D&&uK(u,A)}else{for(n=0;no&&t[w+1]!==" ",w=n);else if(!vm(u))return wS;A=n>0?t.charCodeAt(n-1):null,D=D&&uK(u,A)}h=h||E&&n-w-1>o&&t[w+1]!==" "}return!p&&!h?D&&!a(t)?DK:SK:r>9&&vK(t)?wS:h?xK:PK}function w6e(t,e,r,o){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&g6e.indexOf(e)!==-1)return"'"+e+"'";var a=t.indent*Math.max(1,r),n=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),u=o||t.flowLevel>-1&&r>=t.flowLevel;function A(p){return y6e(t,p)}switch(I6e(e,u,t.indent,n,A)){case DK:return e;case SK:return"'"+e.replace(/'/g,"''")+"'";case PK:return"|"+AK(e,t.indent)+fK(cK(e,a));case xK:return">"+AK(e,t.indent)+fK(cK(B6e(e,n),a));case wS:return'"'+v6e(e,n)+'"';default:throw new yw("impossible error: invalid scalar style")}}()}function AK(t,e){var r=vK(t)?String(e):"",o=t[t.length-1]===` +`,a=o&&(t[t.length-2]===` +`||t===` +`),n=a?"+":o?"":"-";return r+n+` +`}function fK(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function B6e(t,e){for(var r=/(\n+)([^\n]*)/g,o=function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,pK(t.slice(0,h),e)}(),a=t[0]===` +`||t[0]===" ",n,u;u=r.exec(t);){var A=u[1],p=u[2];n=p[0]===" ",o+=A+(!a&&!n&&p!==""?` +`:"")+pK(p,e),a=n}return o}function pK(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,o,a=0,n,u=0,A=0,p="";o=r.exec(t);)A=o.index,A-a>e&&(n=u>a?u:A,p+=` +`+t.slice(a,n),a=n+1),u=A;return p+=` +`,t.length-a>e&&u>a?p+=t.slice(a,u)+` +`+t.slice(u+1):p+=t.slice(a),p.slice(1)}function v6e(t){for(var e="",r,o,a,n=0;n=55296&&r<=56319&&(o=t.charCodeAt(n+1),o>=56320&&o<=57343)){e+=lK((r-55296)*1024+o-56320+65536),n++;continue}a=mo[r],e+=!a&&vm(r)?t[n]:a||lK(r)}return e}function D6e(t,e,r){var o="",a=t.tag,n,u;for(n=0,u=r.length;n1024&&(E+="? "),E+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),ng(t,e,h,!1,!1)&&(E+=t.dump,o+=E));t.tag=a,t.dump="{"+o+"}"}function x6e(t,e,r,o){var a="",n=t.tag,u=Object.keys(r),A,p,h,E,w,D;if(t.sortKeys===!0)u.sort();else if(typeof t.sortKeys=="function")u.sort(t.sortKeys);else if(t.sortKeys)throw new yw("sortKeys must be a boolean or a function");for(A=0,p=u.length;A1024,w&&(t.dump&&dw===t.dump.charCodeAt(0)?D+="?":D+="? "),D+=t.dump,w&&(D+=ZT(t,e)),ng(t,e+1,E,!0,w)&&(t.dump&&dw===t.dump.charCodeAt(0)?D+=":":D+=": ",D+=t.dump,a+=D));t.tag=n,t.dump=a||"{}"}function hK(t,e,r){var o,a,n,u,A,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,u=a.length;n tag resolver accepts not "'+p+'" style');t.dump=o}return!0}return!1}function ng(t,e,r,o,a,n){t.tag=null,t.dump=r,hK(t,r,!1)||hK(t,r,!0);var u=gK.call(t.dump);o&&(o=t.flowLevel<0||t.flowLevel>e);var A=u==="[object Object]"||u==="[object Array]",p,h;if(A&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(A&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),u==="[object Object]")o&&Object.keys(t.dump).length!==0?(x6e(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(P6e(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(u==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;o&&t.dump.length!==0?(S6e(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(D6e(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(u==="[object String]")t.tag!=="?"&&w6e(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new yw("unacceptable kind of an object to dump "+u)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function b6e(t,e){var r=[],o=[],a,n;for($T(t,r,o),a=0,n=o.length;a{"use strict";var BS=aK(),QK=kK();function vS(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}Fi.exports.Type=as();Fi.exports.Schema=$0();Fi.exports.FAILSAFE_SCHEMA=dS();Fi.exports.JSON_SCHEMA=YT();Fi.exports.CORE_SCHEMA=VT();Fi.exports.DEFAULT_SAFE_SCHEMA=Cm();Fi.exports.DEFAULT_FULL_SCHEMA=hw();Fi.exports.load=BS.load;Fi.exports.loadAll=BS.loadAll;Fi.exports.safeLoad=BS.safeLoad;Fi.exports.safeLoadAll=BS.safeLoadAll;Fi.exports.dump=QK.dump;Fi.exports.safeDump=QK.safeDump;Fi.exports.YAMLException=ym();Fi.exports.MINIMAL_SCHEMA=dS();Fi.exports.SAFE_SCHEMA=Cm();Fi.exports.DEFAULT_SCHEMA=hw();Fi.exports.scan=vS("scan");Fi.exports.parse=vS("parse");Fi.exports.compose=vS("compose");Fi.exports.addConstructor=vS("addConstructor")});var TK=_((Jxt,RK)=>{"use strict";var Q6e=FK();RK.exports=Q6e});var NK=_((zxt,LK)=>{"use strict";function F6e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function ig(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,ig)}F6e(ig,Error);ig.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",w;for(w=0;w0){for(w=1,D=1;w({[gt]:Ne})))},ce=function(ee){return ee},ue=function(ee){return ee},Ie=oa("correct indentation"),he=" ",De=un(" ",!1),Ee=function(ee){return ee.length===ar*vt},g=function(ee){return ee.length===(ar+1)*vt},me=function(){return ar++,!0},Ce=function(){return ar--,!0},fe=function(){return Lo()},ie=oa("pseudostring"),Z=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,Se=qn(["\r",` +`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),Re=/^[^\r\n\t ,\][{}:#"']/,ht=qn(["\r",` +`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),q=function(){return Lo().replace(/^ *| *$/g,"")},nt="--",Le=un("--",!1),Te=/^[a-zA-Z\/0-9]/,ke=qn([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),Ke=/^[^\r\n\t :,]/,xe=qn(["\r",` +`," "," ",":",","],!0,!1),tt="null",He=un("null",!1),x=function(){return null},I="true",P=un("true",!1),y=function(){return!0},R="false",z=un("false",!1),X=function(){return!1},$=oa("string"),se='"',be=un('"',!1),Fe=function(){return""},lt=function(ee){return ee},Et=function(ee){return ee.join("")},qt=/^[^"\\\0-\x1F\x7F]/,nr=qn(['"',"\\",["\0",""],"\x7F"],!0,!1),Pt='\\"',cn=un('\\"',!1),Sr=function(){return'"'},yr="\\\\",Rr=un("\\\\",!1),Xr=function(){return"\\"},$n="\\/",Xs=un("\\/",!1),Hi=function(){return"/"},Qs="\\b",Zs=un("\\b",!1),bi=function(){return"\b"},Fs="\\f",$s=un("\\f",!1),PA=function(){return"\f"},gu="\\n",op=un("\\n",!1),ap=function(){return` +`},Rs="\\r",Nn=un("\\r",!1),hs=function(){return"\r"},Ts="\\t",pc=un("\\t",!1),hc=function(){return" "},gc="\\u",xA=un("\\u",!1),bA=function(ee,ye,Ne,gt){return String.fromCharCode(parseInt(`0x${ee}${ye}${Ne}${gt}`))},Ro=/^[0-9a-fA-F]/,To=qn([["0","9"],["a","f"],["A","F"]],!1,!1),kA=oa("blank space"),pr=/^[ \t]/,Me=qn([" "," "],!1,!1),ia=oa("white space"),dc=/^[ \t\n\r]/,Er=qn([" "," ",` +`,"\r"],!1,!1),du=`\r +`,QA=un(`\r +`,!1),FA=` +`,mc=un(` +`,!1),yc="\r",Il=un("\r",!1),we=0,Tt=0,wl=[{line:1,column:1}],Bi=0,Ls=[],Ft=0,Bn;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function Lo(){return t.substring(Tt,we)}function ki(){return la(Tt,we)}function vi(ee,ye){throw ye=ye!==void 0?ye:la(Tt,we),mu([oa(ee)],t.substring(Tt,we),ye)}function sa(ee,ye){throw ye=ye!==void 0?ye:la(Tt,we),ca(ee,ye)}function un(ee,ye){return{type:"literal",text:ee,ignoreCase:ye}}function qn(ee,ye,Ne){return{type:"class",parts:ee,inverted:ye,ignoreCase:Ne}}function Ec(){return{type:"any"}}function lp(){return{type:"end"}}function oa(ee){return{type:"other",description:ee}}function aa(ee){var ye=wl[ee],Ne;if(ye)return ye;for(Ne=ee-1;!wl[Ne];)Ne--;for(ye=wl[Ne],ye={line:ye.line,column:ye.column};NeBi&&(Bi=we,Ls=[]),Ls.push(ee))}function ca(ee,ye){return new ig(ee,null,null,ye)}function mu(ee,ye,Ne){return new ig(ig.buildMessage(ee,ye),ee,ye,Ne)}function Bl(){var ee;return ee=RA(),ee}function dn(){var ee,ye,Ne;for(ee=we,ye=[],Ne=No();Ne!==r;)ye.push(Ne),Ne=No();return ye!==r&&(Tt=ee,ye=n(ye)),ee=ye,ee}function No(){var ee,ye,Ne,gt,mt;return ee=we,ye=qa(),ye!==r?(t.charCodeAt(we)===45?(Ne=u,we++):(Ne=r,Ft===0&&Ze(A)),Ne!==r?(gt=Dn(),gt!==r?(mt=Oo(),mt!==r?(Tt=ee,ye=p(mt),ee=ye):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r),ee}function RA(){var ee,ye,Ne;for(ee=we,ye=[],Ne=TA();Ne!==r;)ye.push(Ne),Ne=TA();return ye!==r&&(Tt=ee,ye=h(ye)),ee=ye,ee}function TA(){var ee,ye,Ne,gt,mt,Dt,er,sn,ei;if(ee=we,ye=Dn(),ye===r&&(ye=null),ye!==r){if(Ne=we,t.charCodeAt(we)===35?(gt=E,we++):(gt=r,Ft===0&&Ze(w)),gt!==r){if(mt=[],Dt=we,er=we,Ft++,sn=st(),Ft--,sn===r?er=void 0:(we=er,er=r),er!==r?(t.length>we?(sn=t.charAt(we),we++):(sn=r,Ft===0&&Ze(D)),sn!==r?(er=[er,sn],Dt=er):(we=Dt,Dt=r)):(we=Dt,Dt=r),Dt!==r)for(;Dt!==r;)mt.push(Dt),Dt=we,er=we,Ft++,sn=st(),Ft--,sn===r?er=void 0:(we=er,er=r),er!==r?(t.length>we?(sn=t.charAt(we),we++):(sn=r,Ft===0&&Ze(D)),sn!==r?(er=[er,sn],Dt=er):(we=Dt,Dt=r)):(we=Dt,Dt=r);else mt=r;mt!==r?(gt=[gt,mt],Ne=gt):(we=Ne,Ne=r)}else we=Ne,Ne=r;if(Ne===r&&(Ne=null),Ne!==r){if(gt=[],mt=Je(),mt!==r)for(;mt!==r;)gt.push(mt),mt=Je();else gt=r;gt!==r?(Tt=ee,ye=b(),ee=ye):(we=ee,ee=r)}else we=ee,ee=r}else we=ee,ee=r;if(ee===r&&(ee=we,ye=qa(),ye!==r?(Ne=ua(),Ne!==r?(gt=Dn(),gt===r&&(gt=null),gt!==r?(t.charCodeAt(we)===58?(mt=C,we++):(mt=r,Ft===0&&Ze(T)),mt!==r?(Dt=Dn(),Dt===r&&(Dt=null),Dt!==r?(er=Oo(),er!==r?(Tt=ee,ye=N(Ne,er),ee=ye):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r),ee===r&&(ee=we,ye=qa(),ye!==r?(Ne=qi(),Ne!==r?(gt=Dn(),gt===r&&(gt=null),gt!==r?(t.charCodeAt(we)===58?(mt=C,we++):(mt=r,Ft===0&&Ze(T)),mt!==r?(Dt=Dn(),Dt===r&&(Dt=null),Dt!==r?(er=Oo(),er!==r?(Tt=ee,ye=N(Ne,er),ee=ye):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r),ee===r))){if(ee=we,ye=qa(),ye!==r)if(Ne=qi(),Ne!==r)if(gt=Dn(),gt!==r)if(mt=Cc(),mt!==r){if(Dt=[],er=Je(),er!==r)for(;er!==r;)Dt.push(er),er=Je();else Dt=r;Dt!==r?(Tt=ee,ye=N(Ne,mt),ee=ye):(we=ee,ee=r)}else we=ee,ee=r;else we=ee,ee=r;else we=ee,ee=r;else we=ee,ee=r;if(ee===r)if(ee=we,ye=qa(),ye!==r)if(Ne=qi(),Ne!==r){if(gt=[],mt=we,Dt=Dn(),Dt===r&&(Dt=null),Dt!==r?(t.charCodeAt(we)===44?(er=U,we++):(er=r,Ft===0&&Ze(J)),er!==r?(sn=Dn(),sn===r&&(sn=null),sn!==r?(ei=qi(),ei!==r?(Tt=mt,Dt=te(Ne,ei),mt=Dt):(we=mt,mt=r)):(we=mt,mt=r)):(we=mt,mt=r)):(we=mt,mt=r),mt!==r)for(;mt!==r;)gt.push(mt),mt=we,Dt=Dn(),Dt===r&&(Dt=null),Dt!==r?(t.charCodeAt(we)===44?(er=U,we++):(er=r,Ft===0&&Ze(J)),er!==r?(sn=Dn(),sn===r&&(sn=null),sn!==r?(ei=qi(),ei!==r?(Tt=mt,Dt=te(Ne,ei),mt=Dt):(we=mt,mt=r)):(we=mt,mt=r)):(we=mt,mt=r)):(we=mt,mt=r);else gt=r;gt!==r?(mt=Dn(),mt===r&&(mt=null),mt!==r?(t.charCodeAt(we)===58?(Dt=C,we++):(Dt=r,Ft===0&&Ze(T)),Dt!==r?(er=Dn(),er===r&&(er=null),er!==r?(sn=Oo(),sn!==r?(Tt=ee,ye=le(Ne,gt,sn),ee=ye):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)}else we=ee,ee=r;else we=ee,ee=r}return ee}function Oo(){var ee,ye,Ne,gt,mt,Dt,er;if(ee=we,ye=we,Ft++,Ne=we,gt=st(),gt!==r?(mt=Ot(),mt!==r?(t.charCodeAt(we)===45?(Dt=u,we++):(Dt=r,Ft===0&&Ze(A)),Dt!==r?(er=Dn(),er!==r?(gt=[gt,mt,Dt,er],Ne=gt):(we=Ne,Ne=r)):(we=Ne,Ne=r)):(we=Ne,Ne=r)):(we=Ne,Ne=r),Ft--,Ne!==r?(we=ye,ye=void 0):ye=r,ye!==r?(Ne=Je(),Ne!==r?(gt=vn(),gt!==r?(mt=dn(),mt!==r?(Dt=Mo(),Dt!==r?(Tt=ee,ye=ce(mt),ee=ye):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r),ee===r&&(ee=we,ye=st(),ye!==r?(Ne=vn(),Ne!==r?(gt=RA(),gt!==r?(mt=Mo(),mt!==r?(Tt=ee,ye=ce(gt),ee=ye):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r),ee===r))if(ee=we,ye=vl(),ye!==r){if(Ne=[],gt=Je(),gt!==r)for(;gt!==r;)Ne.push(gt),gt=Je();else Ne=r;Ne!==r?(Tt=ee,ye=ue(ye),ee=ye):(we=ee,ee=r)}else we=ee,ee=r;return ee}function qa(){var ee,ye,Ne;for(Ft++,ee=we,ye=[],t.charCodeAt(we)===32?(Ne=he,we++):(Ne=r,Ft===0&&Ze(De));Ne!==r;)ye.push(Ne),t.charCodeAt(we)===32?(Ne=he,we++):(Ne=r,Ft===0&&Ze(De));return ye!==r?(Tt=we,Ne=Ee(ye),Ne?Ne=void 0:Ne=r,Ne!==r?(ye=[ye,Ne],ee=ye):(we=ee,ee=r)):(we=ee,ee=r),Ft--,ee===r&&(ye=r,Ft===0&&Ze(Ie)),ee}function Ot(){var ee,ye,Ne;for(ee=we,ye=[],t.charCodeAt(we)===32?(Ne=he,we++):(Ne=r,Ft===0&&Ze(De));Ne!==r;)ye.push(Ne),t.charCodeAt(we)===32?(Ne=he,we++):(Ne=r,Ft===0&&Ze(De));return ye!==r?(Tt=we,Ne=g(ye),Ne?Ne=void 0:Ne=r,Ne!==r?(ye=[ye,Ne],ee=ye):(we=ee,ee=r)):(we=ee,ee=r),ee}function vn(){var ee;return Tt=we,ee=me(),ee?ee=void 0:ee=r,ee}function Mo(){var ee;return Tt=we,ee=Ce(),ee?ee=void 0:ee=r,ee}function ua(){var ee;return ee=ja(),ee===r&&(ee=Dl()),ee}function qi(){var ee,ye,Ne;if(ee=ja(),ee===r){if(ee=we,ye=[],Ne=Aa(),Ne!==r)for(;Ne!==r;)ye.push(Ne),Ne=Aa();else ye=r;ye!==r&&(Tt=ee,ye=fe()),ee=ye}return ee}function vl(){var ee;return ee=Di(),ee===r&&(ee=rs(),ee===r&&(ee=ja(),ee===r&&(ee=Dl()))),ee}function Cc(){var ee;return ee=Di(),ee===r&&(ee=ja(),ee===r&&(ee=Aa())),ee}function Dl(){var ee,ye,Ne,gt,mt,Dt;if(Ft++,ee=we,Z.test(t.charAt(we))?(ye=t.charAt(we),we++):(ye=r,Ft===0&&Ze(Se)),ye!==r){for(Ne=[],gt=we,mt=Dn(),mt===r&&(mt=null),mt!==r?(Re.test(t.charAt(we))?(Dt=t.charAt(we),we++):(Dt=r,Ft===0&&Ze(ht)),Dt!==r?(mt=[mt,Dt],gt=mt):(we=gt,gt=r)):(we=gt,gt=r);gt!==r;)Ne.push(gt),gt=we,mt=Dn(),mt===r&&(mt=null),mt!==r?(Re.test(t.charAt(we))?(Dt=t.charAt(we),we++):(Dt=r,Ft===0&&Ze(ht)),Dt!==r?(mt=[mt,Dt],gt=mt):(we=gt,gt=r)):(we=gt,gt=r);Ne!==r?(Tt=ee,ye=q(),ee=ye):(we=ee,ee=r)}else we=ee,ee=r;return Ft--,ee===r&&(ye=r,Ft===0&&Ze(ie)),ee}function Aa(){var ee,ye,Ne,gt,mt;if(ee=we,t.substr(we,2)===nt?(ye=nt,we+=2):(ye=r,Ft===0&&Ze(Le)),ye===r&&(ye=null),ye!==r)if(Te.test(t.charAt(we))?(Ne=t.charAt(we),we++):(Ne=r,Ft===0&&Ze(ke)),Ne!==r){for(gt=[],Ke.test(t.charAt(we))?(mt=t.charAt(we),we++):(mt=r,Ft===0&&Ze(xe));mt!==r;)gt.push(mt),Ke.test(t.charAt(we))?(mt=t.charAt(we),we++):(mt=r,Ft===0&&Ze(xe));gt!==r?(Tt=ee,ye=q(),ee=ye):(we=ee,ee=r)}else we=ee,ee=r;else we=ee,ee=r;return ee}function Di(){var ee,ye;return ee=we,t.substr(we,4)===tt?(ye=tt,we+=4):(ye=r,Ft===0&&Ze(He)),ye!==r&&(Tt=ee,ye=x()),ee=ye,ee}function rs(){var ee,ye;return ee=we,t.substr(we,4)===I?(ye=I,we+=4):(ye=r,Ft===0&&Ze(P)),ye!==r&&(Tt=ee,ye=y()),ee=ye,ee===r&&(ee=we,t.substr(we,5)===R?(ye=R,we+=5):(ye=r,Ft===0&&Ze(z)),ye!==r&&(Tt=ee,ye=X()),ee=ye),ee}function ja(){var ee,ye,Ne,gt;return Ft++,ee=we,t.charCodeAt(we)===34?(ye=se,we++):(ye=r,Ft===0&&Ze(be)),ye!==r?(t.charCodeAt(we)===34?(Ne=se,we++):(Ne=r,Ft===0&&Ze(be)),Ne!==r?(Tt=ee,ye=Fe(),ee=ye):(we=ee,ee=r)):(we=ee,ee=r),ee===r&&(ee=we,t.charCodeAt(we)===34?(ye=se,we++):(ye=r,Ft===0&&Ze(be)),ye!==r?(Ne=yu(),Ne!==r?(t.charCodeAt(we)===34?(gt=se,we++):(gt=r,Ft===0&&Ze(be)),gt!==r?(Tt=ee,ye=lt(Ne),ee=ye):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)),Ft--,ee===r&&(ye=r,Ft===0&&Ze($)),ee}function yu(){var ee,ye,Ne;if(ee=we,ye=[],Ne=Sl(),Ne!==r)for(;Ne!==r;)ye.push(Ne),Ne=Sl();else ye=r;return ye!==r&&(Tt=ee,ye=Et(ye)),ee=ye,ee}function Sl(){var ee,ye,Ne,gt,mt,Dt;return qt.test(t.charAt(we))?(ee=t.charAt(we),we++):(ee=r,Ft===0&&Ze(nr)),ee===r&&(ee=we,t.substr(we,2)===Pt?(ye=Pt,we+=2):(ye=r,Ft===0&&Ze(cn)),ye!==r&&(Tt=ee,ye=Sr()),ee=ye,ee===r&&(ee=we,t.substr(we,2)===yr?(ye=yr,we+=2):(ye=r,Ft===0&&Ze(Rr)),ye!==r&&(Tt=ee,ye=Xr()),ee=ye,ee===r&&(ee=we,t.substr(we,2)===$n?(ye=$n,we+=2):(ye=r,Ft===0&&Ze(Xs)),ye!==r&&(Tt=ee,ye=Hi()),ee=ye,ee===r&&(ee=we,t.substr(we,2)===Qs?(ye=Qs,we+=2):(ye=r,Ft===0&&Ze(Zs)),ye!==r&&(Tt=ee,ye=bi()),ee=ye,ee===r&&(ee=we,t.substr(we,2)===Fs?(ye=Fs,we+=2):(ye=r,Ft===0&&Ze($s)),ye!==r&&(Tt=ee,ye=PA()),ee=ye,ee===r&&(ee=we,t.substr(we,2)===gu?(ye=gu,we+=2):(ye=r,Ft===0&&Ze(op)),ye!==r&&(Tt=ee,ye=ap()),ee=ye,ee===r&&(ee=we,t.substr(we,2)===Rs?(ye=Rs,we+=2):(ye=r,Ft===0&&Ze(Nn)),ye!==r&&(Tt=ee,ye=hs()),ee=ye,ee===r&&(ee=we,t.substr(we,2)===Ts?(ye=Ts,we+=2):(ye=r,Ft===0&&Ze(pc)),ye!==r&&(Tt=ee,ye=hc()),ee=ye,ee===r&&(ee=we,t.substr(we,2)===gc?(ye=gc,we+=2):(ye=r,Ft===0&&Ze(xA)),ye!==r?(Ne=pi(),Ne!==r?(gt=pi(),gt!==r?(mt=pi(),mt!==r?(Dt=pi(),Dt!==r?(Tt=ee,ye=bA(Ne,gt,mt,Dt),ee=ye):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)):(we=ee,ee=r)))))))))),ee}function pi(){var ee;return Ro.test(t.charAt(we))?(ee=t.charAt(we),we++):(ee=r,Ft===0&&Ze(To)),ee}function Dn(){var ee,ye;if(Ft++,ee=[],pr.test(t.charAt(we))?(ye=t.charAt(we),we++):(ye=r,Ft===0&&Ze(Me)),ye!==r)for(;ye!==r;)ee.push(ye),pr.test(t.charAt(we))?(ye=t.charAt(we),we++):(ye=r,Ft===0&&Ze(Me));else ee=r;return Ft--,ee===r&&(ye=r,Ft===0&&Ze(kA)),ee}function Pl(){var ee,ye;if(Ft++,ee=[],dc.test(t.charAt(we))?(ye=t.charAt(we),we++):(ye=r,Ft===0&&Ze(Er)),ye!==r)for(;ye!==r;)ee.push(ye),dc.test(t.charAt(we))?(ye=t.charAt(we),we++):(ye=r,Ft===0&&Ze(Er));else ee=r;return Ft--,ee===r&&(ye=r,Ft===0&&Ze(ia)),ee}function Je(){var ee,ye,Ne,gt,mt,Dt;if(ee=we,ye=st(),ye!==r){for(Ne=[],gt=we,mt=Dn(),mt===r&&(mt=null),mt!==r?(Dt=st(),Dt!==r?(mt=[mt,Dt],gt=mt):(we=gt,gt=r)):(we=gt,gt=r);gt!==r;)Ne.push(gt),gt=we,mt=Dn(),mt===r&&(mt=null),mt!==r?(Dt=st(),Dt!==r?(mt=[mt,Dt],gt=mt):(we=gt,gt=r)):(we=gt,gt=r);Ne!==r?(ye=[ye,Ne],ee=ye):(we=ee,ee=r)}else we=ee,ee=r;return ee}function st(){var ee;return t.substr(we,2)===du?(ee=du,we+=2):(ee=r,Ft===0&&Ze(QA)),ee===r&&(t.charCodeAt(we)===10?(ee=FA,we++):(ee=r,Ft===0&&Ze(mc)),ee===r&&(t.charCodeAt(we)===13?(ee=yc,we++):(ee=r,Ft===0&&Ze(Il)))),ee}let vt=2,ar=0;if(Bn=a(),Bn!==r&&we===t.length)return Bn;throw Bn!==r&&we"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>_K(t[e])):!1}function rL(t,e,r){if(t===null)return`null +`;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} +`;if(typeof t=="string")return`${MK(t)} +`;if(Array.isArray(t)){if(t.length===0)return`[] +`;let o=" ".repeat(e);return` +${t.map(n=>`${o}- ${rL(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[o,a]=t instanceof DS?[t.data,!1]:[t,!0],n=" ".repeat(e),u=Object.keys(o);a&&u.sort((p,h)=>{let E=OK.indexOf(p),w=OK.indexOf(h);return E===-1&&w===-1?ph?1:0:E!==-1&&w===-1?-1:E===-1&&w!==-1?1:E-w});let A=u.filter(p=>!_K(o[p])).map((p,h)=>{let E=o[p],w=MK(p),D=rL(E,e+1,!0),b=h>0||r?n:"",C=w.length>1024?`? ${w} +${b}:`:`${w}:`,T=D.startsWith(` +`)?D:` ${D}`;return`${b}${C}${T}`}).join(e===0?` +`:"")||` +`;return r?` +${A}`:`${A}`}throw new Error(`Unsupported value type (${t})`)}function Sa(t){try{let e=rL(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}}function L6e(t){return t.endsWith(` +`)||(t+=` +`),(0,UK.parse)(t)}function O6e(t){if(N6e.test(t))return L6e(t);let e=(0,SS.safeLoad)(t,{schema:SS.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 Vi(t){return O6e(t)}var SS,UK,T6e,OK,DS,N6e,HK=It(()=>{SS=et(TK()),UK=et(NK()),T6e=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,OK=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],DS=class{constructor(e){this.data=e}};Sa.PreserveOrdering=DS;N6e=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var Ew={};Vt(Ew,{parseResolution:()=>pS,parseShell:()=>uS,parseSyml:()=>Vi,stringifyArgument:()=>qT,stringifyArgumentSegment:()=>jT,stringifyArithmeticExpression:()=>fS,stringifyCommand:()=>HT,stringifyCommandChain:()=>mm,stringifyCommandChainThen:()=>_T,stringifyCommandLine:()=>AS,stringifyCommandLineThen:()=>UT,stringifyEnvSegment:()=>cS,stringifyRedirectArgument:()=>fw,stringifyResolution:()=>hS,stringifyShell:()=>dm,stringifyShellLine:()=>dm,stringifySyml:()=>Sa,stringifyValueArgument:()=>J0});var Ol=It(()=>{_Y();GY();HK()});var jK=_((tbt,nL)=>{"use strict";var M6e=t=>{let e=!1,r=!1,o=!1;for(let a=0;a{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=a=>e.pascalCase?a.charAt(0).toUpperCase()+a.slice(1):a;return Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=M6e(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};nL.exports=qK;nL.exports.default=qK});var GK=_((rbt,U6e)=>{U6e.exports=[{name:"Agola CI",constant:"AGOLA",env:"AGOLA_GIT_REF",pr:"AGOLA_PULL_REQUEST_ID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"TF_BUILD",pr:{BUILD_REASON:"PullRequest"}},{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:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codemagic",constant:"CODEMAGIC",env:"CM_BUILD_ID",pr:"CM_PULL_REQUEST"},{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:"Earthly",constant:"EARTHLY",env:"EARTHLY_CI"},{name:"Expo Application Services",constant:"EAS",env:"EAS_BUILD"},{name:"Gerrit",constant:"GERRIT",env:"GERRIT_PROJECT"},{name:"Gitea Actions",constant:"GITEA_ACTIONS",env:"GITEA_ACTIONS"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Google Cloud Build",constant:"GOOGLE_CLOUD_BUILD",env:"BUILDER_OUTPUT"},{name:"Harness CI",constant:"HARNESS",env:"HARNESS_BUILD_ID"},{name:"Heroku",constant:"HEROKU",env:{env:"NODE",includes:"/app/.heroku/node/bin/node"}},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Prow",constant:"PROW",env:"PROW_JOB_ID"},{name:"ReleaseHub",constant:"RELEASEHUB",env:"RELEASE_BUILD_ID"},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Sourcehut",constant:"SOURCEHUT",env:{CI_NAME:"sourcehut"}},{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"}},{name:"Vela",constant:"VELA",env:"VELA",pr:{VELA_PULL_REQUEST:"1"}},{name:"Vercel",constant:"VERCEL",env:{any:["NOW_BUILDER","VERCEL"]},pr:"VERCEL_GIT_PULL_REQUEST_ID"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"},{name:"Woodpecker",constant:"WOODPECKER",env:{CI:"woodpecker"},pr:{CI_BUILD_EVENT:"pull_request"}},{name:"Xcode Cloud",constant:"XCODE_CLOUD",env:"CI_XCODE_PROJECT",pr:"CI_PULL_REQUEST_NUMBER"},{name:"Xcode Server",constant:"XCODE_SERVER",env:"XCS"}]});var sg=_(nl=>{"use strict";var YK=GK(),ls=process.env;Object.defineProperty(nl,"_vendors",{value:YK.map(function(t){return t.constant})});nl.name=null;nl.isPR=null;YK.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(o){return WK(o)});if(nl[t.constant]=r,!!r)switch(nl.name=t.name,typeof t.pr){case"string":nl.isPR=!!ls[t.pr];break;case"object":"env"in t.pr?nl.isPR=t.pr.env in ls&&ls[t.pr.env]!==t.pr.ne:"any"in t.pr?nl.isPR=t.pr.any.some(function(o){return!!ls[o]}):nl.isPR=WK(t.pr);break;default:nl.isPR=null}});nl.isCI=!!(ls.CI!=="false"&&(ls.BUILD_ID||ls.BUILD_NUMBER||ls.CI||ls.CI_APP_ID||ls.CI_BUILD_ID||ls.CI_BUILD_NUMBER||ls.CI_NAME||ls.CONTINUOUS_INTEGRATION||ls.RUN_ID||nl.name));function WK(t){return typeof t=="string"?!!ls[t]:"env"in t?ls[t.env]&&ls[t.env].includes(t.includes):"any"in t?t.any.some(function(e){return!!ls[e]}):Object.keys(t).every(function(e){return ls[e]===t[e]})}});var Vn,pn,og,iL,PS,VK,sL,oL,xS=It(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(Vn||(Vn={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(pn||(pn={}));og=-1,iL=/^(-h|--help)(?:=([0-9]+))?$/,PS=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,VK=/^-[a-zA-Z]{2,}$/,sL=/^([^=]+)=([\s\S]*)$/,oL=process.env.DEBUG_CLI==="1"});var it,Dm,bS,aL,kS=It(()=>{xS();it=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},Dm=class extends Error{constructor(e,r){if(super(),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(o=>o.reason!==null&&o.reason===r[0].reason)){let[{reason:o}]=this.candidates;this.message=`${o} + +${this.candidates.map(({usage:a})=>`$ ${a}`).join(` +`)}`}else if(this.candidates.length===1){let[{usage:o}]=this.candidates;this.message=`Command not found; did you mean: + +$ ${o} +${aL(e)}`}else this.message=`Command not found; did you mean one of: + +${this.candidates.map(({usage:o},a)=>`${`${a}.`.padStart(4)} ${o}`).join(` +`)} + +${aL(e)}`}},bS=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((o,a)=>`${`${a}.`.padStart(4)} ${o}`).join(` +`)} + +${aL(e)}`}},aL=t=>`While running ${t.filter(e=>e!==Vn.EndOfInput&&e!==Vn.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function _6e(t){let e=t.split(` +`),r=e.filter(a=>a.match(/\S/)),o=r.length>0?r.reduce((a,n)=>Math.min(a,n.length-n.trimStart().length),Number.MAX_VALUE):0;return e.map(a=>a.slice(o).trimRight()).join(` +`)}function yo(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` +`),t=_6e(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 + +`),t=t.replace(/\n(\n)?\n*/g,(o,a)=>a||" "),r&&(t=t.split(/\n/).map(o=>{let a=o.match(/^\s*[*-][\t ]+(.*)/);if(!a)return o.match(/(.{1,80})(?: |$)/g).join(` +`);let n=o.length-o.trimStart().length;return a[1].match(new RegExp(`(.{1,${78-n}})(?: |$)`,"g")).map((u,A)=>" ".repeat(n)+(A===0?"- ":" ")+u).join(` +`)}).join(` + +`)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(o,a,n)=>e.code(a+n+a)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(o,a,n)=>e.bold(a+n+a)),t?`${t} +`:""}var lL,KK,JK,cL=It(()=>{lL=Array(80).fill("\u2501");for(let t=0;t<=24;++t)lL[lL.length-t]=`\x1B[38;5;${232+t}m\u2501`;KK={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<75?` ${lL.slice(t.length+5).join("")}`:":"}\x1B[0m`,bold:t=>`\x1B[1m${t}\x1B[22m`,error:t=>`\x1B[31m\x1B[1m${t}\x1B[22m\x1B[39m`,code:t=>`\x1B[36m${t}\x1B[39m`},JK={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function Wo(t){return{...t,[Cw]:!0}}function Yu(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function QS(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,o,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=o!=="."||!e?`${o.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function Iw(t,e){return e.length===1?new it(`${t}${QS(e[0],{mergeName:!0})}`):new it(`${t}: +${e.map(r=>` +- ${QS(r)}`).join("")}`)}function ag(t,e,r){if(typeof r>"u")return e;let o=[],a=[],n=A=>{let p=e;return e=A,n.bind(null,p)};if(!r(e,{errors:o,coercions:a,coercion:n}))throw Iw(`Invalid value for ${t}`,o);for(let[,A]of a)A();return e}var Cw,yf=It(()=>{kS();Cw=Symbol("clipanion/isOption")});var Yo={};Vt(Yo,{KeyRelationship:()=>Vu,TypeAssertionError:()=>zp,applyCascade:()=>vw,as:()=>sqe,assert:()=>rqe,assertWithErrors:()=>nqe,cascade:()=>NS,fn:()=>oqe,hasAtLeastOneKey:()=>dL,hasExactLength:()=>eJ,hasForbiddenKeys:()=>Dqe,hasKeyRelationship:()=>Sw,hasMaxLength:()=>lqe,hasMinLength:()=>aqe,hasMutuallyExclusiveKeys:()=>Sqe,hasRequiredKeys:()=>vqe,hasUniqueItems:()=>cqe,isArray:()=>RS,isAtLeast:()=>hL,isAtMost:()=>fqe,isBase64:()=>Cqe,isBoolean:()=>K6e,isDate:()=>z6e,isDict:()=>$6e,isEnum:()=>js,isHexColor:()=>Eqe,isISO8601:()=>yqe,isInExclusiveRange:()=>hqe,isInInclusiveRange:()=>pqe,isInstanceOf:()=>tqe,isInteger:()=>gL,isJSON:()=>Iqe,isLiteral:()=>XK,isLowerCase:()=>gqe,isMap:()=>Z6e,isNegative:()=>uqe,isNullable:()=>Bqe,isNumber:()=>fL,isObject:()=>ZK,isOneOf:()=>pL,isOptional:()=>wqe,isPartial:()=>eqe,isPayload:()=>J6e,isPositive:()=>Aqe,isRecord:()=>LS,isSet:()=>X6e,isString:()=>Pm,isTuple:()=>TS,isUUID4:()=>mqe,isUnknown:()=>AL,isUpperCase:()=>dqe,makeTrait:()=>$K,makeValidator:()=>qr,matchesRegExp:()=>Bw,softAssert:()=>iqe});function Kn(t){return t===null?"null":t===void 0?"undefined":t===""?"an empty string":typeof t=="symbol"?`<${t.toString()}>`:Array.isArray(t)?"an array":JSON.stringify(t)}function Sm(t,e){if(t.length===0)return"nothing";if(t.length===1)return Kn(t[0]);let r=t.slice(0,-1),o=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>Kn(n)).join(", ")}${a}${Kn(o)}`}function Jp(t,e){var r,o,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:H6e.test(e)?`${(o=t?.p)!==null&&o!==void 0?o:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function uL(t,e,r){return t===1?e:r}function gr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function Y6e(t,e){return r=>{t[e]=r}}function Ku(t,e){return r=>{let o=t[e];return t[e]=r,Ku(t,e).bind(null,o)}}function ww(t,e,r){let o=()=>(t(r()),a),a=()=>(t(e),o);return o}function AL(){return qr({test:(t,e)=>!0})}function XK(t){return qr({test:(e,r)=>e!==t?gr(r,`Expected ${Kn(t)} (got ${Kn(e)})`):!0})}function Pm(){return qr({test:(t,e)=>typeof t!="string"?gr(e,`Expected a string (got ${Kn(t)})`):!0})}function js(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),o=new Set(e);return o.size===1?XK([...o][0]):qr({test:(a,n)=>o.has(a)?!0:r?gr(n,`Expected one of ${Sm(e,"or")} (got ${Kn(a)})`):gr(n,`Expected a valid enumeration value (got ${Kn(a)})`)})}function K6e(){return qr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return gr(e,"Unbound coercion result");let o=V6e.get(t);if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return gr(e,`Expected a boolean (got ${Kn(t)})`)}return!0}})}function fL(){return qr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return gr(e,"Unbound coercion result");let o;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)o=a;else return gr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return gr(e,`Expected a number (got ${Kn(t)})`)}return!0}})}function J6e(t){return qr({test:(e,r)=>{var o;if(typeof r?.coercions>"u")return gr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return gr(r,"Unbound coercion result");if(typeof e!="string")return gr(r,`Expected a string (got ${Kn(e)})`);let a;try{a=JSON.parse(e)}catch{return gr(r,`Expected a JSON string (got ${Kn(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Ku(n,"value")}))?(r.coercions.push([(o=r.p)!==null&&o!==void 0?o:".",r.coercion.bind(null,n.value)]),!0):!1}})}function z6e(){return qr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return gr(e,"Unbound coercion result");let o;if(typeof t=="string"&&zK.test(t))o=new Date(t);else{let a;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch{}typeof n=="number"&&(a=n)}else typeof t=="number"&&(a=t);if(typeof a<"u")if(Number.isSafeInteger(a)||!Number.isSafeInteger(a*1e3))o=new Date(a*1e3);else return gr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return gr(e,`Expected a date (got ${Kn(t)})`)}return!0}})}function RS(t,{delimiter:e}={}){return qr({test:(r,o)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof o?.coercions<"u"){if(typeof o?.coercion>"u")return gr(o,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return gr(o,`Expected an array (got ${Kn(r)})`);let u=!0;for(let A=0,p=r.length;A{var n,u;if(Object.getPrototypeOf(o).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return gr(a,"Unbound coercion result");let A=[...o],p=[...o];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,w)=>E!==A[w])?new Set(p):o;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",ww(a.coercion,o,h)]),!0}else{let A=!0;for(let p of o)if(A=t(p,Object.assign({},a))&&A,!A&&a?.errors==null)break;return A}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return gr(a,"Unbound coercion result");let A={value:o};return r(o,Object.assign(Object.assign({},a),{coercion:Ku(A,"value")}))?(a.coercions.push([(u=a.p)!==null&&u!==void 0?u:".",ww(a.coercion,o,()=>new Set(A.value))]),!0):!1}return gr(a,`Expected a set (got ${Kn(o)})`)}})}function Z6e(t,e){let r=RS(TS([t,e])),o=LS(e,{keys:t});return qr({test:(a,n)=>{var u,A,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return gr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let w=()=>E.some((D,b)=>D[0]!==h[b][0]||D[1]!==h[b][1])?new Map(E):a;return n.coercions.push([(u=n.p)!==null&&u!==void 0?u:".",ww(n.coercion,a,w)]),!0}else{let h=!0;for(let[E,w]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(w,Object.assign(Object.assign({},n),{p:Jp(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return gr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(A=n.p)!==null&&A!==void 0?A:".",ww(n.coercion,a,()=>new Map(h.value))]),!0):!1:o(a,Object.assign(Object.assign({},n),{coercion:Ku(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",ww(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return gr(n,`Expected a map (got ${Kn(a)})`)}})}function TS(t,{delimiter:e}={}){let r=eJ(t.length);return qr({test:(o,a)=>{var n;if(typeof o=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return gr(a,"Unbound coercion result");o=o.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)])}if(!Array.isArray(o))return gr(a,`Expected a tuple (got ${Kn(o)})`);let u=r(o,Object.assign({},a));for(let A=0,p=o.length;A{var n;if(Array.isArray(o)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?gr(a,"Unbound coercion result"):r(o,Object.assign(Object.assign({},a),{coercion:void 0}))?(o=Object.fromEntries(o),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)]),!0):!1;if(typeof o!="object"||o===null)return gr(a,`Expected an object (got ${Kn(o)})`);let u=Object.keys(o),A=!0;for(let p=0,h=u.length;p{if(typeof a!="object"||a===null)return gr(n,`Expected an object (got ${Kn(a)})`);let u=new Set([...r,...Object.keys(a)]),A={},p=!0;for(let h of u){if(h==="constructor"||h==="__proto__")p=gr(Object.assign(Object.assign({},n),{p:Jp(n,h)}),"Unsafe property name");else{let E=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,w=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof E<"u"?p=E(w,Object.assign(Object.assign({},n),{p:Jp(n,h),coercion:Ku(a,h)}))&&p:e===null?p=gr(Object.assign(Object.assign({},n),{p:Jp(n,h)}),`Extraneous property (got ${Kn(w)})`):Object.defineProperty(A,h,{enumerable:!0,get:()=>w,set:Y6e(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(A,n)&&p),p}});return Object.assign(o,{properties:t})}function eqe(t){return ZK(t,{extra:LS(AL())})}function $K(t){return()=>t}function qr({test:t}){return $K(t)()}function rqe(t,e){if(!e(t))throw new zp}function nqe(t,e){let r=[];if(!e(t,{errors:r}))throw new zp({errors:r})}function iqe(t,e){}function sqe(t,e,{coerce:r=!1,errors:o,throw:a}={}){let n=o?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new zp({errors:n});return{value:void 0,errors:n??!0}}let u={value:t},A=Ku(u,"value"),p=[];if(!e(t,{errors:n,coercion:A,coercions:p})){if(a)throw new zp({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?u.value:{value:u.value,errors:void 0}}function oqe(t,e){let r=TS(t);return(...o)=>{if(!r(o))throw new zp;return e(...o)}}function aqe(t){return qr({test:(e,r)=>e.length>=t?!0:gr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function lqe(t){return qr({test:(e,r)=>e.length<=t?!0:gr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function eJ(t){return qr({test:(e,r)=>e.length!==t?gr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function cqe({map:t}={}){return qr({test:(e,r)=>{let o=new Set,a=new Set;for(let n=0,u=e.length;nt<=0?!0:gr(e,`Expected to be negative (got ${t})`)})}function Aqe(){return qr({test:(t,e)=>t>=0?!0:gr(e,`Expected to be positive (got ${t})`)})}function hL(t){return qr({test:(e,r)=>e>=t?!0:gr(r,`Expected to be at least ${t} (got ${e})`)})}function fqe(t){return qr({test:(e,r)=>e<=t?!0:gr(r,`Expected to be at most ${t} (got ${e})`)})}function pqe(t,e){return qr({test:(r,o)=>r>=t&&r<=e?!0:gr(o,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function hqe(t,e){return qr({test:(r,o)=>r>=t&&re!==Math.round(e)?gr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?gr(r,`Expected to be a safe integer (got ${e})`):!0})}function Bw(t){return qr({test:(e,r)=>t.test(e)?!0:gr(r,`Expected to match the pattern ${t.toString()} (got ${Kn(e)})`)})}function gqe(){return qr({test:(t,e)=>t!==t.toLowerCase()?gr(e,`Expected to be all-lowercase (got ${t})`):!0})}function dqe(){return qr({test:(t,e)=>t!==t.toUpperCase()?gr(e,`Expected to be all-uppercase (got ${t})`):!0})}function mqe(){return qr({test:(t,e)=>W6e.test(t)?!0:gr(e,`Expected to be a valid UUID v4 (got ${Kn(t)})`)})}function yqe(){return qr({test:(t,e)=>zK.test(t)?!0:gr(e,`Expected to be a valid ISO 8601 date string (got ${Kn(t)})`)})}function Eqe({alpha:t=!1}){return qr({test:(e,r)=>(t?q6e.test(e):j6e.test(e))?!0:gr(r,`Expected to be a valid hexadecimal color string (got ${Kn(e)})`)})}function Cqe(){return qr({test:(t,e)=>G6e.test(t)?!0:gr(e,`Expected to be a valid base 64 string (got ${Kn(t)})`)})}function Iqe(t=AL()){return qr({test:(e,r)=>{let o;try{o=JSON.parse(e)}catch{return gr(r,`Expected to be a valid JSON string (got ${Kn(e)})`)}return t(o,r)}})}function NS(t,...e){let r=Array.isArray(e[0])?e[0]:e;return qr({test:(o,a)=>{var n,u;let A={value:o},p=typeof a?.coercions<"u"?Ku(A,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(o,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let E=[];if(typeof h<"u")for(let[,w]of h)E.push(w());try{if(typeof a?.coercions<"u"){if(A.value!==o){if(typeof a?.coercion>"u")return gr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,A.value)])}(u=a?.coercions)===null||u===void 0||u.push(...h)}return r.every(w=>w(A.value,a))}finally{for(let w of E)w()}}})}function vw(t,...e){let r=Array.isArray(e[0])?e[0]:e;return NS(t,r)}function wqe(t){return qr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function Bqe(t){return qr({test:(e,r)=>e===null?!0:t(e,r)})}function vqe(t,e){var r;let o=new Set(t),a=Dw[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return qr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)||p.push(h);return p.length>0?gr(u,`Missing required ${uL(p.length,"property","properties")} ${Sm(p,"and")}`):!0}})}function dL(t,e){var r;let o=new Set(t),a=Dw[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return qr({test:(n,u)=>Object.keys(n).some(h=>a(o,h,n))?!0:gr(u,`Missing at least one property from ${Sm(Array.from(o),"or")}`)})}function Dqe(t,e){var r;let o=new Set(t),a=Dw[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return qr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>0?gr(u,`Forbidden ${uL(p.length,"property","properties")} ${Sm(p,"and")}`):!0}})}function Sqe(t,e){var r;let o=new Set(t),a=Dw[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return qr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>1?gr(u,`Mutually exclusive properties ${Sm(p,"and")}`):!0}})}function Sw(t,e,r,o){var a,n;let u=new Set((a=o?.ignore)!==null&&a!==void 0?a:[]),A=Dw[(n=o?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=Pqe[e],E=e===Vu.Forbids?"or":"and";return qr({test:(w,D)=>{let b=new Set(Object.keys(w));if(!A(b,t,w)||u.has(w[t]))return!0;let C=[];for(let T of p)(A(b,T,w)&&!u.has(w[T]))!==h.expect&&C.push(T);return C.length>=1?gr(D,`Property "${t}" ${h.message} ${uL(C.length,"property","properties")} ${Sm(C,E)}`):!0}})}var H6e,q6e,j6e,G6e,W6e,zK,V6e,tqe,pL,zp,Dw,Vu,Pqe,il=It(()=>{H6e=/^[a-zA-Z_][a-zA-Z0-9_]*$/;q6e=/^#[0-9a-f]{6}$/i,j6e=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,G6e=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,W6e=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,zK=/^(?:[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)?)$/;V6e=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);tqe=t=>qr({test:(e,r)=>e instanceof t?!0:gr(r,`Expected an instance of ${t.name} (got ${Kn(e)})`)}),pL=(t,{exclusive:e=!1}={})=>qr({test:(r,o)=>{var a,n,u;let A=[],p=typeof o?.errors<"u"?[]:void 0;for(let h=0,E=t.length;h1?gr(o,`Expected to match exactly a single predicate (matched ${A.join(", ")})`):(u=o?.errors)===null||u===void 0||u.push(...p),!1}});zp=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` +`;for(let o of e)r+=` +- ${o}`}super(r)}};Dw={missing:(t,e)=>t.has(e),undefined:(t,e,r)=>t.has(e)&&typeof r[e]<"u",nil:(t,e,r)=>t.has(e)&&r[e]!=null,falsy:(t,e,r)=>t.has(e)&&!!r[e]};(function(t){t.Forbids="Forbids",t.Requires="Requires"})(Vu||(Vu={}));Pqe={[Vu.Forbids]:{expect:!1,message:"forbids using"},[Vu.Requires]:{expect:!0,message:"requires using"}}});var ot,Xp=It(()=>{yf();ot=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(Array.isArray(r)){let{isDict:a,isUnknown:n,applyCascade:u}=await Promise.resolve().then(()=>(il(),Yo)),A=u(a(n()),r),p=[],h=[];if(!A(this,{errors:p,coercions:h}))throw Iw("Invalid option schema",p);for(let[,w]of h)w()}else if(r!=null)throw new Error("Invalid command schema");let o=await this.execute();return typeof o<"u"?o:0}};ot.isOption=Cw;ot.Default=[]});function Pa(t){oL&&console.log(t)}function rJ(){let t={nodes:[]};for(let e=0;e{if(e.has(o))return;e.add(o);let a=t.nodes[o];for(let u of Object.values(a.statics))for(let{to:A}of u)r(A);for(let[,{to:u}]of a.dynamics)r(u);for(let{to:u}of a.shortcuts)r(u);let n=new Set(a.shortcuts.map(({to:u})=>u));for(;a.shortcuts.length>0;){let{to:u}=a.shortcuts.shift(),A=t.nodes[u];for(let[p,h]of Object.entries(A.statics)){let E=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let w of h)E.some(({to:D})=>w.to===D)||E.push(w)}for(let[p,h]of A.dynamics)a.dynamics.some(([E,{to:w}])=>p===E&&h.to===w)||a.dynamics.push([p,h]);for(let p of A.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(pn.InitialNode)}function kqe(t,{prefix:e=""}={}){if(oL){Pa(`${e}Nodes are:`);for(let r=0;rE!==pn.ErrorNode).map(({state:E})=>({usage:E.candidateUsage,reason:null})));if(h.every(({node:E})=>E===pn.ErrorNode))throw new Dm(e,h.map(({state:E})=>({usage:E.candidateUsage,reason:E.errorMessage})));o=Rqe(h)}if(o.length>0){Pa(" Results:");for(let n of o)Pa(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else Pa(" No results");return o}function Fqe(t,e,{endToken:r=Vn.EndOfInput}={}){let o=Qqe(t,[...e,r]);return Tqe(e,o.map(({state:a})=>a))}function Rqe(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 Tqe(t,e){let r=e.filter(D=>D.selectedIndex!==null),o=r.filter(D=>!D.partial);if(o.length>0&&(r=o),r.length===0)throw new Error;let a=r.filter(D=>D.selectedIndex===og||D.requiredOptions.every(b=>b.some(C=>D.options.find(T=>T.name===C))));if(a.length===0)throw new Dm(t,r.map(D=>({usage:D.candidateUsage,reason:null})));let n=0;for(let D of a)D.path.length>n&&(n=D.path.length);let u=a.filter(D=>D.path.length===n),A=D=>D.positionals.filter(({extra:b})=>!b).length+D.options.length,p=u.map(D=>({state:D,positionalCount:A(D)})),h=0;for(let{positionalCount:D}of p)D>h&&(h=D);let E=p.filter(({positionalCount:D})=>D===h).map(({state:D})=>D),w=Lqe(E);if(w.length>1)throw new bS(t,w.map(D=>D.candidateUsage));return w[0]}function Lqe(t){let e=[],r=[];for(let o of t)o.selectedIndex===og?r.push(o):e.push(o);return r.length>0&&e.push({...tJ,path:nJ(...r.map(o=>o.path)),options:r.reduce((o,a)=>o.concat(a.options),[])}),e}function nJ(t,e,...r){return e===void 0?Array.from(t):nJ(t.filter((o,a)=>o===e[a]),...r)}function sl(){return{dynamics:[],shortcuts:[],statics:{}}}function iJ(t){return t===pn.SuccessNode||t===pn.ErrorNode}function mL(t,e=0){return{to:iJ(t.to)?t.to:t.to>=pn.CustomNode?t.to+e-pn.CustomNode+1:t.to+e,reducer:t.reducer}}function Nqe(t,e=0){let r=sl();for(let[o,a]of t.dynamics)r.dynamics.push([o,mL(a,e)]);for(let o of t.shortcuts)r.shortcuts.push(mL(o,e));for(let[o,a]of Object.entries(t.statics))r.statics[o]=a.map(n=>mL(n,e));return r}function Bs(t,e,r,o,a){t.nodes[e].dynamics.push([r,{to:o,reducer:a}])}function xm(t,e,r,o){t.nodes[e].shortcuts.push({to:r,reducer:o})}function Vo(t,e,r,o,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:o,reducer:a})}function OS(t,e,r,o,a){if(Array.isArray(e)){let[n,...u]=e;return t[n](r,o,a,...u)}else return t[e](r,o,a)}var tJ,Oqe,yL,ol,EL,MS,US=It(()=>{xS();kS();tJ={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:og,partial:!1,tokens:[]};Oqe={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,o)=>!t.ignoreOptions&&e===o,isBatchOption:(t,e,r,o)=>!t.ignoreOptions&&VK.test(e)&&[...e.slice(1)].every(a=>o.has(`-${a}`)),isBoundOption:(t,e,r,o,a)=>{let n=e.match(sL);return!t.ignoreOptions&&!!n&&PS.test(n[1])&&o.has(n[1])&&a.filter(u=>u.nameSet.includes(n[1])).every(u=>u.allowBinding)},isNegatedOption:(t,e,r,o)=>!t.ignoreOptions&&e===`--no-${o.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&iL.test(e),isUnsupportedOption:(t,e,r,o)=>!t.ignoreOptions&&e.startsWith("-")&&PS.test(e)&&!o.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!PS.test(e)},yL={setCandidateState:(t,e,r,o)=>({...t,...o}),setSelectedIndex:(t,e,r,o)=>({...t,selectedIndex:o}),setPartialIndex:(t,e,r,o)=>({...t,selectedIndex:o,partial:!0}),pushBatch:(t,e,r,o)=>{let a=t.options.slice(),n=t.tokens.slice();for(let u=1;u{let[,o,a]=e.match(sL),n=t.options.concat({name:o,value:a}),u=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,o.length],option:o},{segmentIndex:r,type:"assign",slice:[o.length,o.length+1]},{segmentIndex:r,type:"value",slice:[o.length+1,o.length+a.length+1]}]);return{...t,options:n,tokens:u}},pushPath:(t,e,r)=>{let o=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:o,tokens:a}},pushPositional:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtra:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:ol}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushTrue:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,o)=>{let a=t.options.concat({name:e,value:void 0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:e});return{...t,options:a,tokens:n}},pushStringValue:(t,e,r)=>{var o;let a=t.options[t.options.length-1],n=t.options.slice(),u=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((o=a.value)!==null&&o!==void 0?o:[]).concat([e]),{...t,options:n,tokens:u}},setStringValue:(t,e,r)=>{let o=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return o.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,o)=>{let[,,a]=e.match(iL);return typeof a<"u"?{...t,options:[{name:"-c",value:String(o)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(o)}]}},setError:(t,e,r,o)=>e===Vn.EndOfInput||e===Vn.EndOfPartialInput?{...t,errorMessage:`${o}.`}:{...t,errorMessage:`${o} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},ol=Symbol(),EL=class{constructor(e,r){this.allOptionNames=new Map,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:o=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:o,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===ol)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!==ol?this.arity.extra.push(e):this.arity.extra!==ol&&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===ol)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 o=0;o1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(o))throw new Error(`The arity must be an integer, got ${o}`);if(o<0)throw new Error(`The arity must be positive, got ${o}`);let A=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,A);this.options.push({preferredName:A,nameSet:e,description:r,arity:o,hidden:a,required:n,allowBinding:u})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let o=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&o.push(...this.paths[0]),e){for(let{preferredName:u,nameSet:A,arity:p,hidden:h,description:E,required:w}of this.options){if(h)continue;let D=[];for(let C=0;C`:`[${b}]`)}o.push(...this.arity.leading.map(u=>`<${u}>`)),this.arity.extra===ol?o.push("..."):o.push(...this.arity.extra.map(u=>`[${u}]`)),o.push(...this.arity.trailing.map(u=>`<${u}>`))}return{usage:o.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=rJ(),r=pn.InitialNode,o=this.usage().usage,a=this.options.filter(A=>A.required).map(A=>A.nameSet);r=jc(e,sl()),Vo(e,pn.InitialNode,Vn.StartOfInput,r,["setCandidateState",{candidateUsage:o,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",u=this.paths.length>0?this.paths:[[]];for(let A of u){let p=r;if(A.length>0){let D=jc(e,sl());xm(e,p,D),this.registerOptions(e,D),p=D}for(let D=0;D0||!this.arity.proxy){let D=jc(e,sl());Bs(e,p,"isHelp",D,["useHelp",this.cliIndex]),Bs(e,D,"always",D,"pushExtra"),Vo(e,D,Vn.EndOfInput,pn.SuccessNode,["setSelectedIndex",og]),this.registerOptions(e,p)}this.arity.leading.length>0&&(Vo(e,p,Vn.EndOfInput,pn.ErrorNode,["setError","Not enough positional arguments"]),Vo(e,p,Vn.EndOfPartialInput,pn.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let D=0;D0||D+1!==this.arity.leading.length)&&(Vo(e,b,Vn.EndOfInput,pn.ErrorNode,["setError","Not enough positional arguments"]),Vo(e,b,Vn.EndOfPartialInput,pn.SuccessNode,["setPartialIndex",this.cliIndex])),Bs(e,h,"isNotOptionLike",b,"pushPositional"),h=b}let E=h;if(this.arity.extra===ol||this.arity.extra.length>0){let D=jc(e,sl());if(xm(e,h,D),this.arity.extra===ol){let b=jc(e,sl());this.arity.proxy||this.registerOptions(e,b),Bs(e,h,n,b,"pushExtraNoLimits"),Bs(e,b,n,b,"pushExtraNoLimits"),xm(e,b,D)}else for(let b=0;b0)&&this.registerOptions(e,C),Bs(e,E,n,C,"pushExtra"),xm(e,C,D),E=C}E=D}this.arity.trailing.length>0&&(Vo(e,E,Vn.EndOfInput,pn.ErrorNode,["setError","Not enough positional arguments"]),Vo(e,E,Vn.EndOfPartialInput,pn.SuccessNode,["setPartialIndex",this.cliIndex]));let w=E;for(let D=0;D=0&&e{let u=n?Vn.EndOfPartialInput:Vn.EndOfInput;return Fqe(o,a,{endToken:u})}}}}});function oJ(){return _S.default&&"getColorDepth"in _S.default.WriteStream.prototype?_S.default.WriteStream.prototype.getColorDepth():process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}function aJ(t){let e=sJ;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=ve("async_hooks");e=sJ=new r;let o=process.stdout._write;process.stdout._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?o.call(this,n,u,A):p.stdout.write(n,u,A)};let a=process.stderr._write;process.stderr._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?a.call(this,n,u,A):p.stderr.write(n,u,A)}}return r=>e.run(t,r)}var _S,sJ,lJ=It(()=>{_S=et(ve("tty"),1)});var HS,cJ=It(()=>{Xp();HS=class t extends ot{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let o=new t(r);o.path=e.path;for(let a of e.options)switch(a.name){case"-c":o.commands.push(Number(a.value));break;case"-i":o.index=Number(a.value);break}return o}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: +`),this.context.stdout.write(` +`);let r=0;for(let o of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[o].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. +`)}}}});async function fJ(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=hJ(t);return Ko.from(r,e).runExit(o,a)}async function pJ(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=hJ(t);return Ko.from(r,e).run(o,a)}function hJ(t){let e,r,o,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(o=process.argv.slice(2)),t.length){case 1:r=t[0];break;case 2:t[0]&&t[0].prototype instanceof ot||Array.isArray(t[0])?(r=t[0],Array.isArray(t[1])?o=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],o=t[2]):t[0]&&t[0].prototype instanceof ot||Array.isArray(t[0])?(r=t[0],o=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],o=t[2],a=t[3];break}if(typeof o>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}}function AJ(t){return t()}var uJ,Ko,gJ=It(()=>{xS();US();cL();lJ();Xp();cJ();uJ=Symbol("clipanion/errorCommand");Ko=class t{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:o,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new MS({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=o,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let o=new t(r),a=Array.isArray(e)?e:[e];for(let n of a)o.register(n);return o}register(e){var r;let o=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[ot.isOption]&&o.set(p,h)}let n=this.builder.command(),u=n.cliIndex,A=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof A<"u")for(let p of A)n.addPath(p);this.registrations.set(e,{specs:o,builder:n,index:u});for(let[p,{definition:h}]of o.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:o,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:u,process:A}=this.builder.compile(),p=A(o,{partial:n}),h={...t.defaultContext,...a};switch(p.selectedIndex){case og:{let E=HS.from(p,u);return E.context=h,E.tokens=p.tokens,E}default:{let{commandClass:E}=u[p.selectedIndex],w=this.registrations.get(E);if(typeof w>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let D=new E;D.context=h,D.tokens=p.tokens,D.path=p.path;try{for(let[b,{transformer:C}]of w.specs.entries())D[b]=C(w.builder,b,p,h);return D}catch(b){throw b[uJ]=D,b}}break}}async run(e,r){var o,a;let n,u={...t.defaultContext,...r},A=(o=this.enableColors)!==null&&o!==void 0?o:u.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,u)}catch(E){return u.stdout.write(this.error(E,{colored:A})),1}if(n.help)return u.stdout.write(this.usage(n,{colored:A,detailed:!0})),0;n.context=u,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),definition:E=>this.definition(E),error:(E,w)=>this.error(E,w),format:E=>this.format(E),process:(E,w)=>this.process(E,{...u,...w}),run:(E,w)=>this.run(E,{...u,...w}),usage:(E,w)=>this.usage(E,w)};let p=this.enableCapture&&(a=aJ(u))!==null&&a!==void 0?a:AJ,h;try{h=await p(()=>n.validateAndExecute().catch(E=>n.catch(E).then(()=>0)))}catch(E){return u.stdout.write(this.error(E,{colored:A,command:n})),1}return h}async runExit(e,r){process.exitCode=await this.run(e,r)}definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:o}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),u=typeof e.usage.category<"u"?yo(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,A=typeof e.usage.description<"u"?yo(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?yo(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([E,w])=>[yo(E,{format:this.format(r),paragraphs:!1}),w.replace(/\$0/g,this.binaryName)]):void 0;return{path:o,usage:a,category:u,description:A,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let o of this.registrations.keys()){let a=this.definition(o,{colored:e});a&&r.push(a)}return r}usage(e=null,{colored:r,detailed:o=!1,prefix:a="$ "}={}){var n;if(e===null){for(let p of this.registrations.keys()){let h=p.paths,E=typeof p.usage<"u";if(!h||h.length===0||h.length===1&&h[0].length===0||((n=h?.some(b=>b.length===0))!==null&&n!==void 0?n:!1))if(e){e=null;break}else e=p;else if(E){e=null;continue}}e&&(o=!0)}let u=e!==null&&e instanceof ot?e.constructor:e,A="";if(u)if(o){let{description:p="",details:h="",examples:E=[]}=u.usage||{};p!==""&&(A+=yo(p,{format:this.format(r),paragraphs:!1}).replace(/^./,b=>b.toUpperCase()),A+=` +`),(h!==""||E.length>0)&&(A+=`${this.format(r).header("Usage")} +`,A+=` +`);let{usage:w,options:D}=this.getUsageByRegistration(u,{inlineOptions:!1});if(A+=`${this.format(r).bold(a)}${w} +`,D.length>0){A+=` +`,A+=`${this.format(r).header("Options")} +`;let b=D.reduce((C,T)=>Math.max(C,T.definition.length),0);A+=` +`;for(let{definition:C,description:T}of D)A+=` ${this.format(r).bold(C.padEnd(b))} ${yo(T,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(A+=` +`,A+=`${this.format(r).header("Details")} +`,A+=` +`,A+=yo(h,{format:this.format(r),paragraphs:!0})),E.length>0){A+=` +`,A+=`${this.format(r).header("Examples")} +`;for(let[b,C]of E)A+=` +`,A+=yo(b,{format:this.format(r),paragraphs:!1}),A+=`${C.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} +`}}else{let{usage:p}=this.getUsageByRegistration(u);A+=`${this.format(r).bold(a)}${p} +`}else{let p=new Map;for(let[D,{index:b}]of this.registrations.entries()){if(typeof D.usage>"u")continue;let C=typeof D.usage.category<"u"?yo(D.usage.category,{format:this.format(r),paragraphs:!1}):null,T=p.get(C);typeof T>"u"&&p.set(C,T=[]);let{usage:N}=this.getUsageByIndex(b);T.push({commandClass:D,usage:N})}let h=Array.from(p.keys()).sort((D,b)=>D===null?-1:b===null?1:D.localeCompare(b,"en",{usage:"sort",caseFirst:"upper"})),E=typeof this.binaryLabel<"u",w=typeof this.binaryVersion<"u";E||w?(E&&w?A+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} + +`:E?A+=`${this.format(r).header(`${this.binaryLabel}`)} +`:A+=`${this.format(r).header(`${this.binaryVersion}`)} +`,A+=` ${this.format(r).bold(a)}${this.binaryName} +`):A+=`${this.format(r).bold(a)}${this.binaryName} +`;for(let D of h){let b=p.get(D).slice().sort((T,N)=>T.usage.localeCompare(N.usage,"en",{usage:"sort",caseFirst:"upper"})),C=D!==null?D.trim():"General commands";A+=` +`,A+=`${this.format(r).header(`${C}`)} +`;for(let{commandClass:T,usage:N}of b){let U=T.usage.description||"undocumented";A+=` +`,A+=` ${this.format(r).bold(N)} +`,A+=` ${yo(U,{format:this.format(r),paragraphs:!1})}`}}A+=` +`,A+=yo("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 o,{colored:a,command:n=(o=e[uJ])!==null&&o!==void 0?o:null}=r===void 0?{}:r;(!e||typeof e!="object"||!("stack"in e))&&(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let u="",A=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");A==="Error"&&(A="Internal Error"),u+=`${this.format(a).error(A)}: ${e.message} +`;let p=e.clipanion;return typeof p<"u"?p.type==="usage"&&(u+=` +`,u+=this.usage(n)):e.stack&&(u+=`${e.stack.replace(/^.*\n/,"")} +`),u}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:t.defaultContext.colorDepth>1)?KK:JK}getUsageByRegistration(e,r){let o=this.registrations.get(e);if(typeof o>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(o.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};Ko.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:oJ()}});var Pw,dJ=It(()=>{Xp();Pw=class extends ot{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} +`)}};Pw.paths=[["--clipanion=definitions"]]});var xw,mJ=It(()=>{Xp();xw=class extends ot{async execute(){this.context.stdout.write(this.cli.usage())}};xw.paths=[["-h"],["--help"]]});function qS(t={}){return Wo({definition(e,r){var o;e.addProxy({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){return o.positionals.map(({value:a})=>a)}})}var CL=It(()=>{yf()});var bw,yJ=It(()=>{Xp();CL();bw=class extends ot{constructor(){super(...arguments),this.args=qS()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} +`)}};bw.paths=[["--clipanion=tokens"]]});var kw,EJ=It(()=>{Xp();kw=class extends ot{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} +`)}};kw.paths=[["-v"],["--version"]]});var IL={};Vt(IL,{DefinitionsCommand:()=>Pw,HelpCommand:()=>xw,TokensCommand:()=>bw,VersionCommand:()=>kw});var CJ=It(()=>{dJ();mJ();yJ();EJ()});function IJ(t,e,r){let[o,a]=Yu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Wo({definition(p){p.addOption({names:u,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,E){let w,D=typeof o<"u"?[...o]:void 0;for(let{name:b,value:C}of E.options)A.has(b)&&(w=b,D=D??[],D.push(C));return typeof D<"u"?ag(w??h,D,a.validator):D}})}var wJ=It(()=>{yf()});function BJ(t,e,r){let[o,a]=Yu(e,r??{}),n=t.split(","),u=new Set(n);return Wo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:w,value:D}of h.options)u.has(w)&&(E=D);return E}})}var vJ=It(()=>{yf()});function DJ(t,e,r){let[o,a]=Yu(e,r??{}),n=t.split(","),u=new Set(n);return Wo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:w,value:D}of h.options)u.has(w)&&(E??(E=0),D?E+=1:E=0);return E}})}var SJ=It(()=>{yf()});function PJ(t={}){return Wo({definition(e,r){var o;e.addRest({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){let a=u=>{let A=o.positionals[u];return A.extra===ol||A.extra===!1&&uu)}})}var xJ=It(()=>{US();yf()});function Mqe(t,e,r){let[o,a]=Yu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Wo({definition(p){p.addOption({names:u,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,E,w){let D,b=o;typeof a.env<"u"&&w.env[a.env]&&(D=a.env,b=w.env[a.env]);for(let{name:C,value:T}of E.options)A.has(C)&&(D=C,b=T);return typeof b=="string"?ag(D??h,b,a.validator):b}})}function Uqe(t={}){let{required:e=!0}=t;return Wo({definition(r,o){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:o,required:t.required})},transformer(r,o,a){var n;for(let u=0;u{US();yf()});var de={};Vt(de,{Array:()=>IJ,Boolean:()=>BJ,Counter:()=>DJ,Proxy:()=>qS,Rest:()=>PJ,String:()=>bJ,applyValidator:()=>ag,cleanValidationError:()=>QS,formatError:()=>Iw,isOptionSymbol:()=>Cw,makeCommandOption:()=>Wo,rerouteArguments:()=>Yu});var QJ=It(()=>{yf();CL();wJ();vJ();SJ();xJ();kJ()});var Qw={};Vt(Qw,{Builtins:()=>IL,Cli:()=>Ko,Command:()=>ot,Option:()=>de,UsageError:()=>it,formatMarkdownish:()=>yo,run:()=>pJ,runExit:()=>fJ});var Gt=It(()=>{kS();cL();Xp();gJ();CJ();QJ()});var FJ=_((ckt,_qe)=>{_qe.exports={name:"dotenv",version:"16.3.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard","lint-readme":"standard-markdown",pretest:"npm run lint && npm run dts-check",test:"tap tests/*.js --100 -Rspec",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},funding:"https://github.com/motdotla/dotenv?sponsor=1",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3",decache:"^4.6.1",sinon:"^14.0.1",standard:"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0",tap:"^16.3.0",tar:"^6.1.11",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var NJ=_((ukt,Ef)=>{var RJ=ve("fs"),BL=ve("path"),Hqe=ve("os"),qqe=ve("crypto"),jqe=FJ(),vL=jqe.version,Gqe=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function Wqe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` +`);let o;for(;(o=Gqe.exec(r))!=null;){let a=o[1],n=o[2]||"";n=n.trim();let u=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),u==='"'&&(n=n.replace(/\\n/g,` +`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function Yqe(t){let e=LJ(t),r=vs.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let o=TJ(t).split(","),a=o.length,n;for(let u=0;u=a)throw A}return vs.parse(n)}function Vqe(t){console.log(`[dotenv@${vL}][INFO] ${t}`)}function Kqe(t){console.log(`[dotenv@${vL}][WARN] ${t}`)}function wL(t){console.log(`[dotenv@${vL}][DEBUG] ${t}`)}function TJ(t){return t&&t.DOTENV_KEY&&t.DOTENV_KEY.length>0?t.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function Jqe(t,e){let r;try{r=new URL(e)}catch(A){throw A.code==="ERR_INVALID_URL"?new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"):A}let o=r.password;if(!o)throw new Error("INVALID_DOTENV_KEY: Missing key part");let a=r.searchParams.get("environment");if(!a)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let n=`DOTENV_VAULT_${a.toUpperCase()}`,u=t.parsed[n];if(!u)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:u,key:o}}function LJ(t){let e=BL.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function zqe(t){return t[0]==="~"?BL.join(Hqe.homedir(),t.slice(1)):t}function Xqe(t){Vqe("Loading env from encrypted .env.vault");let e=vs._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),vs.populate(r,e,t),{parsed:e}}function Zqe(t){let e=BL.resolve(process.cwd(),".env"),r="utf8",o=!!(t&&t.debug);t&&(t.path!=null&&(e=zqe(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=vs.parse(RJ.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),vs.populate(n,a,t),{parsed:a}}catch(a){return o&&wL(`Failed to load ${e} ${a.message}`),{error:a}}}function $qe(t){let e=LJ(t);return TJ(t).length===0?vs.configDotenv(t):RJ.existsSync(e)?vs._configVault(t):(Kqe(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),vs.configDotenv(t))}function eje(t,e){let r=Buffer.from(e.slice(-64),"hex"),o=Buffer.from(t,"base64"),a=o.slice(0,12),n=o.slice(-16);o=o.slice(12,-16);try{let u=qqe.createDecipheriv("aes-256-gcm",r,a);return u.setAuthTag(n),`${u.update(o)}${u.final()}`}catch(u){let A=u instanceof RangeError,p=u.message==="Invalid key length",h=u.message==="Unsupported state or unable to authenticate data";if(A||p){let E="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(E)}else if(h){let E="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(E)}else throw console.error("Error: ",u.code),console.error("Error: ",u.message),u}}function tje(t,e,r={}){let o=!!(r&&r.debug),a=!!(r&&r.override);if(typeof e!="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(t,n)?(a===!0&&(t[n]=e[n]),o&&wL(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var vs={configDotenv:Zqe,_configVault:Xqe,_parseVault:Yqe,config:$qe,decrypt:eje,parse:Wqe,populate:tje};Ef.exports.configDotenv=vs.configDotenv;Ef.exports._configVault=vs._configVault;Ef.exports._parseVault=vs._parseVault;Ef.exports.config=vs.config;Ef.exports.decrypt=vs.decrypt;Ef.exports.parse=vs.parse;Ef.exports.populate=vs.populate;Ef.exports=vs});var MJ=_((Akt,OJ)=>{"use strict";OJ.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var lg=_((fkt,DL)=>{"use strict";var rje=MJ(),UJ=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,o=()=>{r--,e.length>0&&e.shift()()},a=(A,p,...h)=>{r++;let E=rje(A,...h);p(E),E.then(o,o)},n=(A,p,...h)=>{rnew Promise(h=>n(A,h,...p));return Object.defineProperties(u,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),u};DL.exports=UJ;DL.exports.default=UJ});function Ju(t){return`YN${t.toString(10).padStart(4,"0")}`}function jS(t){let e=Number(t.slice(2));if(typeof vr[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var vr,GS=It(()=>{vr=(Me=>(Me[Me.UNNAMED=0]="UNNAMED",Me[Me.EXCEPTION=1]="EXCEPTION",Me[Me.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",Me[Me.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",Me[Me.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",Me[Me.BUILD_DISABLED=5]="BUILD_DISABLED",Me[Me.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",Me[Me.MUST_BUILD=7]="MUST_BUILD",Me[Me.MUST_REBUILD=8]="MUST_REBUILD",Me[Me.BUILD_FAILED=9]="BUILD_FAILED",Me[Me.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",Me[Me.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",Me[Me.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",Me[Me.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",Me[Me.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",Me[Me.REMOTE_INVALID=15]="REMOTE_INVALID",Me[Me.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",Me[Me.RESOLUTION_PACK=17]="RESOLUTION_PACK",Me[Me.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",Me[Me.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",Me[Me.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",Me[Me.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",Me[Me.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",Me[Me.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",Me[Me.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",Me[Me.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",Me[Me.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",Me[Me.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",Me[Me.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",Me[Me.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",Me[Me.FETCH_FAILED=30]="FETCH_FAILED",Me[Me.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",Me[Me.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",Me[Me.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",Me[Me.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",Me[Me.NETWORK_ERROR=35]="NETWORK_ERROR",Me[Me.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",Me[Me.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",Me[Me.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",Me[Me.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",Me[Me.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",Me[Me.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",Me[Me.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",Me[Me.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",Me[Me.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",Me[Me.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",Me[Me.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",Me[Me.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",Me[Me.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",Me[Me.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",Me[Me.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",Me[Me.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",Me[Me.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",Me[Me.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",Me[Me.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",Me[Me.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",Me[Me.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",Me[Me.INVALID_MANIFEST=57]="INVALID_MANIFEST",Me[Me.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",Me[Me.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",Me[Me.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",Me[Me.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",Me[Me.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",Me[Me.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",Me[Me.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",Me[Me.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",Me[Me.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",Me[Me.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",Me[Me.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",Me[Me.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",Me[Me.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",Me[Me.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",Me[Me.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",Me[Me.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",Me[Me.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",Me[Me.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",Me[Me.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",Me[Me.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE",Me[Me.RESOLUTION_MISMATCH=78]="RESOLUTION_MISMATCH",Me[Me.PROLOG_LIMIT_EXCEEDED=79]="PROLOG_LIMIT_EXCEEDED",Me[Me.NETWORK_DISABLED=80]="NETWORK_DISABLED",Me[Me.NETWORK_UNSAFE_HTTP=81]="NETWORK_UNSAFE_HTTP",Me[Me.RESOLUTION_FAILED=82]="RESOLUTION_FAILED",Me[Me.AUTOMERGE_GIT_ERROR=83]="AUTOMERGE_GIT_ERROR",Me[Me.CONSTRAINTS_CHECK_FAILED=84]="CONSTRAINTS_CHECK_FAILED",Me[Me.UPDATED_RESOLUTION_RECORD=85]="UPDATED_RESOLUTION_RECORD",Me[Me.EXPLAIN_PEER_DEPENDENCIES_CTA=86]="EXPLAIN_PEER_DEPENDENCIES_CTA",Me[Me.MIGRATION_SUCCESS=87]="MIGRATION_SUCCESS",Me[Me.VERSION_NOTICE=88]="VERSION_NOTICE",Me[Me.TIPS_NOTICE=89]="TIPS_NOTICE",Me[Me.OFFLINE_MODE_ENABLED=90]="OFFLINE_MODE_ENABLED",Me))(vr||{})});var Fw=_((hkt,_J)=>{var nje="2.0.0",ije=Number.MAX_SAFE_INTEGER||9007199254740991,sje=16,oje=250,aje=["major","premajor","minor","preminor","patch","prepatch","prerelease"];_J.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:sje,MAX_SAFE_BUILD_LENGTH:oje,MAX_SAFE_INTEGER:ije,RELEASE_TYPES:aje,SEMVER_SPEC_VERSION:nje,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var Rw=_((gkt,HJ)=>{var lje=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};HJ.exports=lje});var bm=_((Cf,qJ)=>{var{MAX_SAFE_COMPONENT_LENGTH:SL,MAX_SAFE_BUILD_LENGTH:cje,MAX_LENGTH:uje}=Fw(),Aje=Rw();Cf=qJ.exports={};var fje=Cf.re=[],pje=Cf.safeRe=[],tr=Cf.src=[],rr=Cf.t={},hje=0,PL="[a-zA-Z0-9-]",gje=[["\\s",1],["\\d",uje],[PL,cje]],dje=t=>{for(let[e,r]of gje)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},Gr=(t,e,r)=>{let o=dje(e),a=hje++;Aje(t,a,e),rr[t]=a,tr[a]=e,fje[a]=new RegExp(e,r?"g":void 0),pje[a]=new RegExp(o,r?"g":void 0)};Gr("NUMERICIDENTIFIER","0|[1-9]\\d*");Gr("NUMERICIDENTIFIERLOOSE","\\d+");Gr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${PL}*`);Gr("MAINVERSION",`(${tr[rr.NUMERICIDENTIFIER]})\\.(${tr[rr.NUMERICIDENTIFIER]})\\.(${tr[rr.NUMERICIDENTIFIER]})`);Gr("MAINVERSIONLOOSE",`(${tr[rr.NUMERICIDENTIFIERLOOSE]})\\.(${tr[rr.NUMERICIDENTIFIERLOOSE]})\\.(${tr[rr.NUMERICIDENTIFIERLOOSE]})`);Gr("PRERELEASEIDENTIFIER",`(?:${tr[rr.NUMERICIDENTIFIER]}|${tr[rr.NONNUMERICIDENTIFIER]})`);Gr("PRERELEASEIDENTIFIERLOOSE",`(?:${tr[rr.NUMERICIDENTIFIERLOOSE]}|${tr[rr.NONNUMERICIDENTIFIER]})`);Gr("PRERELEASE",`(?:-(${tr[rr.PRERELEASEIDENTIFIER]}(?:\\.${tr[rr.PRERELEASEIDENTIFIER]})*))`);Gr("PRERELEASELOOSE",`(?:-?(${tr[rr.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${tr[rr.PRERELEASEIDENTIFIERLOOSE]})*))`);Gr("BUILDIDENTIFIER",`${PL}+`);Gr("BUILD",`(?:\\+(${tr[rr.BUILDIDENTIFIER]}(?:\\.${tr[rr.BUILDIDENTIFIER]})*))`);Gr("FULLPLAIN",`v?${tr[rr.MAINVERSION]}${tr[rr.PRERELEASE]}?${tr[rr.BUILD]}?`);Gr("FULL",`^${tr[rr.FULLPLAIN]}$`);Gr("LOOSEPLAIN",`[v=\\s]*${tr[rr.MAINVERSIONLOOSE]}${tr[rr.PRERELEASELOOSE]}?${tr[rr.BUILD]}?`);Gr("LOOSE",`^${tr[rr.LOOSEPLAIN]}$`);Gr("GTLT","((?:<|>)?=?)");Gr("XRANGEIDENTIFIERLOOSE",`${tr[rr.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Gr("XRANGEIDENTIFIER",`${tr[rr.NUMERICIDENTIFIER]}|x|X|\\*`);Gr("XRANGEPLAIN",`[v=\\s]*(${tr[rr.XRANGEIDENTIFIER]})(?:\\.(${tr[rr.XRANGEIDENTIFIER]})(?:\\.(${tr[rr.XRANGEIDENTIFIER]})(?:${tr[rr.PRERELEASE]})?${tr[rr.BUILD]}?)?)?`);Gr("XRANGEPLAINLOOSE",`[v=\\s]*(${tr[rr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${tr[rr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${tr[rr.XRANGEIDENTIFIERLOOSE]})(?:${tr[rr.PRERELEASELOOSE]})?${tr[rr.BUILD]}?)?)?`);Gr("XRANGE",`^${tr[rr.GTLT]}\\s*${tr[rr.XRANGEPLAIN]}$`);Gr("XRANGELOOSE",`^${tr[rr.GTLT]}\\s*${tr[rr.XRANGEPLAINLOOSE]}$`);Gr("COERCEPLAIN",`(^|[^\\d])(\\d{1,${SL}})(?:\\.(\\d{1,${SL}}))?(?:\\.(\\d{1,${SL}}))?`);Gr("COERCE",`${tr[rr.COERCEPLAIN]}(?:$|[^\\d])`);Gr("COERCEFULL",tr[rr.COERCEPLAIN]+`(?:${tr[rr.PRERELEASE]})?(?:${tr[rr.BUILD]})?(?:$|[^\\d])`);Gr("COERCERTL",tr[rr.COERCE],!0);Gr("COERCERTLFULL",tr[rr.COERCEFULL],!0);Gr("LONETILDE","(?:~>?)");Gr("TILDETRIM",`(\\s*)${tr[rr.LONETILDE]}\\s+`,!0);Cf.tildeTrimReplace="$1~";Gr("TILDE",`^${tr[rr.LONETILDE]}${tr[rr.XRANGEPLAIN]}$`);Gr("TILDELOOSE",`^${tr[rr.LONETILDE]}${tr[rr.XRANGEPLAINLOOSE]}$`);Gr("LONECARET","(?:\\^)");Gr("CARETTRIM",`(\\s*)${tr[rr.LONECARET]}\\s+`,!0);Cf.caretTrimReplace="$1^";Gr("CARET",`^${tr[rr.LONECARET]}${tr[rr.XRANGEPLAIN]}$`);Gr("CARETLOOSE",`^${tr[rr.LONECARET]}${tr[rr.XRANGEPLAINLOOSE]}$`);Gr("COMPARATORLOOSE",`^${tr[rr.GTLT]}\\s*(${tr[rr.LOOSEPLAIN]})$|^$`);Gr("COMPARATOR",`^${tr[rr.GTLT]}\\s*(${tr[rr.FULLPLAIN]})$|^$`);Gr("COMPARATORTRIM",`(\\s*)${tr[rr.GTLT]}\\s*(${tr[rr.LOOSEPLAIN]}|${tr[rr.XRANGEPLAIN]})`,!0);Cf.comparatorTrimReplace="$1$2$3";Gr("HYPHENRANGE",`^\\s*(${tr[rr.XRANGEPLAIN]})\\s+-\\s+(${tr[rr.XRANGEPLAIN]})\\s*$`);Gr("HYPHENRANGELOOSE",`^\\s*(${tr[rr.XRANGEPLAINLOOSE]})\\s+-\\s+(${tr[rr.XRANGEPLAINLOOSE]})\\s*$`);Gr("STAR","(<|>)?=?\\s*\\*");Gr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Gr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var WS=_((dkt,jJ)=>{var mje=Object.freeze({loose:!0}),yje=Object.freeze({}),Eje=t=>t?typeof t!="object"?mje:t:yje;jJ.exports=Eje});var xL=_((mkt,YJ)=>{var GJ=/^[0-9]+$/,WJ=(t,e)=>{let r=GJ.test(t),o=GJ.test(e);return r&&o&&(t=+t,e=+e),t===e?0:r&&!o?-1:o&&!r?1:tWJ(e,t);YJ.exports={compareIdentifiers:WJ,rcompareIdentifiers:Cje}});var Eo=_((ykt,zJ)=>{var YS=Rw(),{MAX_LENGTH:VJ,MAX_SAFE_INTEGER:VS}=Fw(),{safeRe:KJ,t:JJ}=bm(),Ije=WS(),{compareIdentifiers:km}=xL(),bL=class t{constructor(e,r){if(r=Ije(r),e instanceof t){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>VJ)throw new TypeError(`version is longer than ${VJ} characters`);YS("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let o=e.trim().match(r.loose?KJ[JJ.LOOSE]:KJ[JJ.FULL]);if(!o)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>VS||this.major<0)throw new TypeError("Invalid major version");if(this.minor>VS||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>VS||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){let n=+a;if(n>=0&&n=0;)typeof this.prerelease[n]=="number"&&(this.prerelease[n]++,n=-2);if(n===-1){if(r===this.prerelease.join(".")&&o===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];o===!1&&(n=[r]),km(this.prerelease[0],r)===0?isNaN(this.prerelease[1])&&(this.prerelease=n):this.prerelease=n}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};zJ.exports=bL});var cg=_((Ekt,ZJ)=>{var XJ=Eo(),wje=(t,e,r=!1)=>{if(t instanceof XJ)return t;try{return new XJ(t,e)}catch(o){if(!r)return null;throw o}};ZJ.exports=wje});var ez=_((Ckt,$J)=>{var Bje=cg(),vje=(t,e)=>{let r=Bje(t,e);return r?r.version:null};$J.exports=vje});var rz=_((Ikt,tz)=>{var Dje=cg(),Sje=(t,e)=>{let r=Dje(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};tz.exports=Sje});var sz=_((wkt,iz)=>{var nz=Eo(),Pje=(t,e,r,o,a)=>{typeof r=="string"&&(a=o,o=r,r=void 0);try{return new nz(t instanceof nz?t.version:t,r).inc(e,o,a).version}catch{return null}};iz.exports=Pje});var lz=_((Bkt,az)=>{var oz=cg(),xje=(t,e)=>{let r=oz(t,null,!0),o=oz(e,null,!0),a=r.compare(o);if(a===0)return null;let n=a>0,u=n?r:o,A=n?o:r,p=!!u.prerelease.length;if(!!A.prerelease.length&&!p)return!A.patch&&!A.minor?"major":u.patch?"patch":u.minor?"minor":"major";let E=p?"pre":"";return r.major!==o.major?E+"major":r.minor!==o.minor?E+"minor":r.patch!==o.patch?E+"patch":"prerelease"};az.exports=xje});var uz=_((vkt,cz)=>{var bje=Eo(),kje=(t,e)=>new bje(t,e).major;cz.exports=kje});var fz=_((Dkt,Az)=>{var Qje=Eo(),Fje=(t,e)=>new Qje(t,e).minor;Az.exports=Fje});var hz=_((Skt,pz)=>{var Rje=Eo(),Tje=(t,e)=>new Rje(t,e).patch;pz.exports=Tje});var dz=_((Pkt,gz)=>{var Lje=cg(),Nje=(t,e)=>{let r=Lje(t,e);return r&&r.prerelease.length?r.prerelease:null};gz.exports=Nje});var Ml=_((xkt,yz)=>{var mz=Eo(),Oje=(t,e,r)=>new mz(t,r).compare(new mz(e,r));yz.exports=Oje});var Cz=_((bkt,Ez)=>{var Mje=Ml(),Uje=(t,e,r)=>Mje(e,t,r);Ez.exports=Uje});var wz=_((kkt,Iz)=>{var _je=Ml(),Hje=(t,e)=>_je(t,e,!0);Iz.exports=Hje});var KS=_((Qkt,vz)=>{var Bz=Eo(),qje=(t,e,r)=>{let o=new Bz(t,r),a=new Bz(e,r);return o.compare(a)||o.compareBuild(a)};vz.exports=qje});var Sz=_((Fkt,Dz)=>{var jje=KS(),Gje=(t,e)=>t.sort((r,o)=>jje(r,o,e));Dz.exports=Gje});var xz=_((Rkt,Pz)=>{var Wje=KS(),Yje=(t,e)=>t.sort((r,o)=>Wje(o,r,e));Pz.exports=Yje});var Tw=_((Tkt,bz)=>{var Vje=Ml(),Kje=(t,e,r)=>Vje(t,e,r)>0;bz.exports=Kje});var JS=_((Lkt,kz)=>{var Jje=Ml(),zje=(t,e,r)=>Jje(t,e,r)<0;kz.exports=zje});var kL=_((Nkt,Qz)=>{var Xje=Ml(),Zje=(t,e,r)=>Xje(t,e,r)===0;Qz.exports=Zje});var QL=_((Okt,Fz)=>{var $je=Ml(),eGe=(t,e,r)=>$je(t,e,r)!==0;Fz.exports=eGe});var zS=_((Mkt,Rz)=>{var tGe=Ml(),rGe=(t,e,r)=>tGe(t,e,r)>=0;Rz.exports=rGe});var XS=_((Ukt,Tz)=>{var nGe=Ml(),iGe=(t,e,r)=>nGe(t,e,r)<=0;Tz.exports=iGe});var FL=_((_kt,Lz)=>{var sGe=kL(),oGe=QL(),aGe=Tw(),lGe=zS(),cGe=JS(),uGe=XS(),AGe=(t,e,r,o)=>{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 sGe(t,r,o);case"!=":return oGe(t,r,o);case">":return aGe(t,r,o);case">=":return lGe(t,r,o);case"<":return cGe(t,r,o);case"<=":return uGe(t,r,o);default:throw new TypeError(`Invalid operator: ${e}`)}};Lz.exports=AGe});var Oz=_((Hkt,Nz)=>{var fGe=Eo(),pGe=cg(),{safeRe:ZS,t:$S}=bm(),hGe=(t,e)=>{if(t instanceof fGe)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(e.includePrerelease?ZS[$S.COERCEFULL]:ZS[$S.COERCE]);else{let p=e.includePrerelease?ZS[$S.COERCERTLFULL]:ZS[$S.COERCERTL],h;for(;(h=p.exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||h.index+h[0].length!==r.index+r[0].length)&&(r=h),p.lastIndex=h.index+h[1].length+h[2].length;p.lastIndex=-1}if(r===null)return null;let o=r[2],a=r[3]||"0",n=r[4]||"0",u=e.includePrerelease&&r[5]?`-${r[5]}`:"",A=e.includePrerelease&&r[6]?`+${r[6]}`:"";return pGe(`${o}.${a}.${n}${u}${A}`,e)};Nz.exports=hGe});var Uz=_((qkt,Mz)=>{"use strict";Mz.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var eP=_((jkt,_z)=>{"use strict";_z.exports=xn;xn.Node=ug;xn.create=xn;function xn(t){var e=this;if(e instanceof xn||(e=new xn),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var r=0,o=arguments.length;r1)r=e;else if(this.head)o=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;o!==null;a++)r=t(r,o.value,a),o=o.next;return r};xn.prototype.reduceReverse=function(t,e){var r,o=this.tail;if(arguments.length>1)r=e;else if(this.tail)o=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;o!==null;a--)r=t(r,o.value,a),o=o.prev;return r};xn.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};xn.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};xn.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 xn;if(ethis.length&&(e=this.length);for(var o=0,a=this.head;a!==null&&othis.length&&(e=this.length);for(var o=this.length,a=this.tail;a!==null&&o>e;o--)a=a.prev;for(;a!==null&&o>t;o--,a=a.prev)r.push(a.value);return r};xn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var o=0,a=this.head;a!==null&&o{"use strict";var yGe=eP(),Ag=Symbol("max"),wf=Symbol("length"),Qm=Symbol("lengthCalculator"),Nw=Symbol("allowStale"),fg=Symbol("maxAge"),If=Symbol("dispose"),Hz=Symbol("noDisposeOnSet"),Ds=Symbol("lruList"),Gc=Symbol("cache"),jz=Symbol("updateAgeOnGet"),RL=()=>1,LL=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[Ag]=e.max||1/0,o=e.length||RL;if(this[Qm]=typeof o!="function"?RL:o,this[Nw]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[fg]=e.maxAge||0,this[If]=e.dispose,this[Hz]=e.noDisposeOnSet||!1,this[jz]=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[Ag]=e||1/0,Lw(this)}get max(){return this[Ag]}set allowStale(e){this[Nw]=!!e}get allowStale(){return this[Nw]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[fg]=e,Lw(this)}get maxAge(){return this[fg]}set lengthCalculator(e){typeof e!="function"&&(e=RL),e!==this[Qm]&&(this[Qm]=e,this[wf]=0,this[Ds].forEach(r=>{r.length=this[Qm](r.value,r.key),this[wf]+=r.length})),Lw(this)}get lengthCalculator(){return this[Qm]}get length(){return this[wf]}get itemCount(){return this[Ds].length}rforEach(e,r){r=r||this;for(let o=this[Ds].tail;o!==null;){let a=o.prev;qz(this,e,o,r),o=a}}forEach(e,r){r=r||this;for(let o=this[Ds].head;o!==null;){let a=o.next;qz(this,e,o,r),o=a}}keys(){return this[Ds].toArray().map(e=>e.key)}values(){return this[Ds].toArray().map(e=>e.value)}reset(){this[If]&&this[Ds]&&this[Ds].length&&this[Ds].forEach(e=>this[If](e.key,e.value)),this[Gc]=new Map,this[Ds]=new yGe,this[wf]=0}dump(){return this[Ds].map(e=>tP(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[Ds]}set(e,r,o){if(o=o||this[fg],o&&typeof o!="number")throw new TypeError("maxAge must be a number");let a=o?Date.now():0,n=this[Qm](r,e);if(this[Gc].has(e)){if(n>this[Ag])return Fm(this,this[Gc].get(e)),!1;let p=this[Gc].get(e).value;return this[If]&&(this[Hz]||this[If](e,p.value)),p.now=a,p.maxAge=o,p.value=r,this[wf]+=n-p.length,p.length=n,this.get(e),Lw(this),!0}let u=new NL(e,r,n,a,o);return u.length>this[Ag]?(this[If]&&this[If](e,r),!1):(this[wf]+=u.length,this[Ds].unshift(u),this[Gc].set(e,this[Ds].head),Lw(this),!0)}has(e){if(!this[Gc].has(e))return!1;let r=this[Gc].get(e).value;return!tP(this,r)}get(e){return TL(this,e,!0)}peek(e){return TL(this,e,!1)}pop(){let e=this[Ds].tail;return e?(Fm(this,e),e.value):null}del(e){Fm(this,this[Gc].get(e))}load(e){this.reset();let r=Date.now();for(let o=e.length-1;o>=0;o--){let a=e[o],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let u=n-r;u>0&&this.set(a.k,a.v,u)}}}prune(){this[Gc].forEach((e,r)=>TL(this,r,!1))}},TL=(t,e,r)=>{let o=t[Gc].get(e);if(o){let a=o.value;if(tP(t,a)){if(Fm(t,o),!t[Nw])return}else r&&(t[jz]&&(o.value.now=Date.now()),t[Ds].unshiftNode(o));return a.value}},tP=(t,e)=>{if(!e||!e.maxAge&&!t[fg])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[fg]&&r>t[fg]},Lw=t=>{if(t[wf]>t[Ag])for(let e=t[Ds].tail;t[wf]>t[Ag]&&e!==null;){let r=e.prev;Fm(t,e),e=r}},Fm=(t,e)=>{if(e){let r=e.value;t[If]&&t[If](r.key,r.value),t[wf]-=r.length,t[Gc].delete(r.key),t[Ds].removeNode(e)}},NL=class{constructor(e,r,o,a,n){this.key=e,this.value=r,this.length=o,this.now=a,this.maxAge=n||0}},qz=(t,e,r,o)=>{let a=r.value;tP(t,a)&&(Fm(t,r),t[Nw]||(a=void 0)),a&&e.call(o,a.value,a.key,t)};Gz.exports=LL});var Ul=_((Wkt,Jz)=>{var OL=class t{constructor(e,r){if(r=CGe(r),e instanceof t)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new t(e.raw,r);if(e instanceof ML)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.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(o=>this.parseRange(o.trim())).filter(o=>o.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let o=this.set[0];if(this.set=this.set.filter(a=>!Vz(a[0])),this.set.length===0)this.set=[o];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&PGe(a[0])){this.set=[a];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let o=((this.options.includePrerelease&&DGe)|(this.options.loose&&SGe))+":"+e,a=Yz.get(o);if(a)return a;let n=this.options.loose,u=n?xa[Jo.HYPHENRANGELOOSE]:xa[Jo.HYPHENRANGE];e=e.replace(u,OGe(this.options.includePrerelease)),gi("hyphen replace",e),e=e.replace(xa[Jo.COMPARATORTRIM],wGe),gi("comparator trim",e),e=e.replace(xa[Jo.TILDETRIM],BGe),gi("tilde trim",e),e=e.replace(xa[Jo.CARETTRIM],vGe),gi("caret trim",e);let A=e.split(" ").map(w=>xGe(w,this.options)).join(" ").split(/\s+/).map(w=>NGe(w,this.options));n&&(A=A.filter(w=>(gi("loose invalid filter",w,this.options),!!w.match(xa[Jo.COMPARATORLOOSE])))),gi("range list",A);let p=new Map,h=A.map(w=>new ML(w,this.options));for(let w of h){if(Vz(w))return[w];p.set(w.value,w)}p.size>1&&p.has("")&&p.delete("");let E=[...p.values()];return Yz.set(o,E),E}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is required");return this.set.some(o=>Kz(o,r)&&e.set.some(a=>Kz(a,r)&&o.every(n=>a.every(u=>n.intersects(u,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new IGe(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",PGe=t=>t.value==="",Kz=(t,e)=>{let r=!0,o=t.slice(),a=o.pop();for(;r&&o.length;)r=o.every(n=>a.intersects(n,e)),a=o.pop();return r},xGe=(t,e)=>(gi("comp",t,e),t=QGe(t,e),gi("caret",t),t=bGe(t,e),gi("tildes",t),t=RGe(t,e),gi("xrange",t),t=LGe(t,e),gi("stars",t),t),zo=t=>!t||t.toLowerCase()==="x"||t==="*",bGe=(t,e)=>t.trim().split(/\s+/).map(r=>kGe(r,e)).join(" "),kGe=(t,e)=>{let r=e.loose?xa[Jo.TILDELOOSE]:xa[Jo.TILDE];return t.replace(r,(o,a,n,u,A)=>{gi("tilde",t,o,a,n,u,A);let p;return zo(a)?p="":zo(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:zo(u)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:A?(gi("replaceTilde pr",A),p=`>=${a}.${n}.${u}-${A} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${u} <${a}.${+n+1}.0-0`,gi("tilde return",p),p})},QGe=(t,e)=>t.trim().split(/\s+/).map(r=>FGe(r,e)).join(" "),FGe=(t,e)=>{gi("caret",t,e);let r=e.loose?xa[Jo.CARETLOOSE]:xa[Jo.CARET],o=e.includePrerelease?"-0":"";return t.replace(r,(a,n,u,A,p)=>{gi("caret",t,a,n,u,A,p);let h;return zo(n)?h="":zo(u)?h=`>=${n}.0.0${o} <${+n+1}.0.0-0`:zo(A)?n==="0"?h=`>=${n}.${u}.0${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.0${o} <${+n+1}.0.0-0`:p?(gi("replaceCaret pr",p),n==="0"?u==="0"?h=`>=${n}.${u}.${A}-${p} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}-${p} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A}-${p} <${+n+1}.0.0-0`):(gi("no pr"),n==="0"?u==="0"?h=`>=${n}.${u}.${A}${o} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A} <${+n+1}.0.0-0`),gi("caret return",h),h})},RGe=(t,e)=>(gi("replaceXRanges",t,e),t.split(/\s+/).map(r=>TGe(r,e)).join(" ")),TGe=(t,e)=>{t=t.trim();let r=e.loose?xa[Jo.XRANGELOOSE]:xa[Jo.XRANGE];return t.replace(r,(o,a,n,u,A,p)=>{gi("xRange",t,o,a,n,u,A,p);let h=zo(n),E=h||zo(u),w=E||zo(A),D=w;return a==="="&&D&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?o="<0.0.0-0":o="*":a&&D?(E&&(u=0),A=0,a===">"?(a=">=",E?(n=+n+1,u=0,A=0):(u=+u+1,A=0)):a==="<="&&(a="<",E?n=+n+1:u=+u+1),a==="<"&&(p="-0"),o=`${a+n}.${u}.${A}${p}`):E?o=`>=${n}.0.0${p} <${+n+1}.0.0-0`:w&&(o=`>=${n}.${u}.0${p} <${n}.${+u+1}.0-0`),gi("xRange return",o),o})},LGe=(t,e)=>(gi("replaceStars",t,e),t.trim().replace(xa[Jo.STAR],"")),NGe=(t,e)=>(gi("replaceGTE0",t,e),t.trim().replace(xa[e.includePrerelease?Jo.GTE0PRE:Jo.GTE0],"")),OGe=t=>(e,r,o,a,n,u,A,p,h,E,w,D,b)=>(zo(o)?r="":zo(a)?r=`>=${o}.0.0${t?"-0":""}`:zo(n)?r=`>=${o}.${a}.0${t?"-0":""}`:u?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,zo(h)?p="":zo(E)?p=`<${+h+1}.0.0-0`:zo(w)?p=`<${h}.${+E+1}.0-0`:D?p=`<=${h}.${E}.${w}-${D}`:t?p=`<${h}.${E}.${+w+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),MGe=(t,e,r)=>{for(let o=0;o0){let a=t[o].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var Ow=_((Ykt,tX)=>{var Mw=Symbol("SemVer ANY"),HL=class t{static get ANY(){return Mw}constructor(e,r){if(r=zz(r),e instanceof t){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),_L("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===Mw?this.value="":this.value=this.operator+this.semver.version,_L("comp",this)}parse(e){let r=this.options.loose?Xz[Zz.COMPARATORLOOSE]:Xz[Zz.COMPARATOR],o=e.match(r);if(!o)throw new TypeError(`Invalid comparator: ${e}`);this.operator=o[1]!==void 0?o[1]:"",this.operator==="="&&(this.operator=""),o[2]?this.semver=new $z(o[2],this.options.loose):this.semver=Mw}toString(){return this.value}test(e){if(_L("Comparator.test",e,this.options.loose),this.semver===Mw||e===Mw)return!0;if(typeof e=="string")try{e=new $z(e,this.options)}catch{return!1}return UL(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new eX(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new eX(this.value,r).test(e.semver):(r=zz(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||UL(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||UL(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};tX.exports=HL;var zz=WS(),{safeRe:Xz,t:Zz}=bm(),UL=FL(),_L=Rw(),$z=Eo(),eX=Ul()});var Uw=_((Vkt,rX)=>{var UGe=Ul(),_Ge=(t,e,r)=>{try{e=new UGe(e,r)}catch{return!1}return e.test(t)};rX.exports=_Ge});var iX=_((Kkt,nX)=>{var HGe=Ul(),qGe=(t,e)=>new HGe(t,e).set.map(r=>r.map(o=>o.value).join(" ").trim().split(" "));nX.exports=qGe});var oX=_((Jkt,sX)=>{var jGe=Eo(),GGe=Ul(),WGe=(t,e,r)=>{let o=null,a=null,n=null;try{n=new GGe(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===-1)&&(o=u,a=new jGe(o,r))}),o};sX.exports=WGe});var lX=_((zkt,aX)=>{var YGe=Eo(),VGe=Ul(),KGe=(t,e,r)=>{let o=null,a=null,n=null;try{n=new VGe(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===1)&&(o=u,a=new YGe(o,r))}),o};aX.exports=KGe});var AX=_((Xkt,uX)=>{var qL=Eo(),JGe=Ul(),cX=Tw(),zGe=(t,e)=>{t=new JGe(t,e);let r=new qL("0.0.0");if(t.test(r)||(r=new qL("0.0.0-0"),t.test(r)))return r;r=null;for(let o=0;o{let A=new qL(u.semver.version);switch(u.operator){case">":A.prerelease.length===0?A.patch++:A.prerelease.push(0),A.raw=A.format();case"":case">=":(!n||cX(A,n))&&(n=A);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${u.operator}`)}}),n&&(!r||cX(r,n))&&(r=n)}return r&&t.test(r)?r:null};uX.exports=zGe});var pX=_((Zkt,fX)=>{var XGe=Ul(),ZGe=(t,e)=>{try{return new XGe(t,e).range||"*"}catch{return null}};fX.exports=ZGe});var rP=_(($kt,mX)=>{var $Ge=Eo(),dX=Ow(),{ANY:e5e}=dX,t5e=Ul(),r5e=Uw(),hX=Tw(),gX=JS(),n5e=XS(),i5e=zS(),s5e=(t,e,r,o)=>{t=new $Ge(t,o),e=new t5e(e,o);let a,n,u,A,p;switch(r){case">":a=hX,n=n5e,u=gX,A=">",p=">=";break;case"<":a=gX,n=i5e,u=hX,A="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(r5e(t,e,o))return!1;for(let h=0;h{b.semver===e5e&&(b=new dX(">=0.0.0")),w=w||b,D=D||b,a(b.semver,w.semver,o)?w=b:u(b.semver,D.semver,o)&&(D=b)}),w.operator===A||w.operator===p||(!D.operator||D.operator===A)&&n(t,D.semver))return!1;if(D.operator===p&&u(t,D.semver))return!1}return!0};mX.exports=s5e});var EX=_((eQt,yX)=>{var o5e=rP(),a5e=(t,e,r)=>o5e(t,e,">",r);yX.exports=a5e});var IX=_((tQt,CX)=>{var l5e=rP(),c5e=(t,e,r)=>l5e(t,e,"<",r);CX.exports=c5e});var vX=_((rQt,BX)=>{var wX=Ul(),u5e=(t,e,r)=>(t=new wX(t,r),e=new wX(e,r),t.intersects(e,r));BX.exports=u5e});var SX=_((nQt,DX)=>{var A5e=Uw(),f5e=Ml();DX.exports=(t,e,r)=>{let o=[],a=null,n=null,u=t.sort((E,w)=>f5e(E,w,r));for(let E of u)A5e(E,e,r)?(n=E,a||(a=E)):(n&&o.push([a,n]),n=null,a=null);a&&o.push([a,null]);let A=[];for(let[E,w]of o)E===w?A.push(E):!w&&E===u[0]?A.push("*"):w?E===u[0]?A.push(`<=${w}`):A.push(`${E} - ${w}`):A.push(`>=${E}`);let p=A.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var PX=Ul(),WL=Ow(),{ANY:jL}=WL,_w=Uw(),YL=Ml(),p5e=(t,e,r={})=>{if(t===e)return!0;t=new PX(t,r),e=new PX(e,r);let o=!1;e:for(let a of t.set){for(let n of e.set){let u=g5e(a,n,r);if(o=o||u!==null,u)continue e}if(o)return!1}return!0},h5e=[new WL(">=0.0.0-0")],xX=[new WL(">=0.0.0")],g5e=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===jL){if(e.length===1&&e[0].semver===jL)return!0;r.includePrerelease?t=h5e:t=xX}if(e.length===1&&e[0].semver===jL){if(r.includePrerelease)return!0;e=xX}let o=new Set,a,n;for(let b of t)b.operator===">"||b.operator===">="?a=bX(a,b,r):b.operator==="<"||b.operator==="<="?n=kX(n,b,r):o.add(b.semver);if(o.size>1)return null;let u;if(a&&n){if(u=YL(a.semver,n.semver,r),u>0)return null;if(u===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let b of o){if(a&&!_w(b,String(a),r)||n&&!_w(b,String(n),r))return null;for(let C of e)if(!_w(b,String(C),r))return!1;return!0}let A,p,h,E,w=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,D=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;w&&w.prerelease.length===1&&n.operator==="<"&&w.prerelease[0]===0&&(w=!1);for(let b of e){if(E=E||b.operator===">"||b.operator===">=",h=h||b.operator==="<"||b.operator==="<=",a){if(D&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===D.major&&b.semver.minor===D.minor&&b.semver.patch===D.patch&&(D=!1),b.operator===">"||b.operator===">="){if(A=bX(a,b,r),A===b&&A!==a)return!1}else if(a.operator===">="&&!_w(a.semver,String(b),r))return!1}if(n){if(w&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===w.major&&b.semver.minor===w.minor&&b.semver.patch===w.patch&&(w=!1),b.operator==="<"||b.operator==="<="){if(p=kX(n,b,r),p===b&&p!==n)return!1}else if(n.operator==="<="&&!_w(n.semver,String(b),r))return!1}if(!b.operator&&(n||a)&&u!==0)return!1}return!(a&&h&&!n&&u!==0||n&&E&&!a&&u!==0||D||w)},bX=(t,e,r)=>{if(!t)return e;let o=YL(t.semver,e.semver,r);return o>0?t:o<0||e.operator===">"&&t.operator===">="?e:t},kX=(t,e,r)=>{if(!t)return e;let o=YL(t.semver,e.semver,r);return o<0?t:o>0||e.operator==="<"&&t.operator==="<="?e:t};QX.exports=p5e});var ni=_((sQt,LX)=>{var VL=bm(),RX=Fw(),d5e=Eo(),TX=xL(),m5e=cg(),y5e=ez(),E5e=rz(),C5e=sz(),I5e=lz(),w5e=uz(),B5e=fz(),v5e=hz(),D5e=dz(),S5e=Ml(),P5e=Cz(),x5e=wz(),b5e=KS(),k5e=Sz(),Q5e=xz(),F5e=Tw(),R5e=JS(),T5e=kL(),L5e=QL(),N5e=zS(),O5e=XS(),M5e=FL(),U5e=Oz(),_5e=Ow(),H5e=Ul(),q5e=Uw(),j5e=iX(),G5e=oX(),W5e=lX(),Y5e=AX(),V5e=pX(),K5e=rP(),J5e=EX(),z5e=IX(),X5e=vX(),Z5e=SX(),$5e=FX();LX.exports={parse:m5e,valid:y5e,clean:E5e,inc:C5e,diff:I5e,major:w5e,minor:B5e,patch:v5e,prerelease:D5e,compare:S5e,rcompare:P5e,compareLoose:x5e,compareBuild:b5e,sort:k5e,rsort:Q5e,gt:F5e,lt:R5e,eq:T5e,neq:L5e,gte:N5e,lte:O5e,cmp:M5e,coerce:U5e,Comparator:_5e,Range:H5e,satisfies:q5e,toComparators:j5e,maxSatisfying:G5e,minSatisfying:W5e,minVersion:Y5e,validRange:V5e,outside:K5e,gtr:J5e,ltr:z5e,intersects:X5e,simplifyRange:Z5e,subset:$5e,SemVer:d5e,re:VL.re,src:VL.src,tokens:VL.t,SEMVER_SPEC_VERSION:RX.SEMVER_SPEC_VERSION,RELEASE_TYPES:RX.RELEASE_TYPES,compareIdentifiers:TX.compareIdentifiers,rcompareIdentifiers:TX.rcompareIdentifiers}});var OX=_((oQt,NX)=>{"use strict";function e9e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function pg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,pg)}e9e(pg,Error);pg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",w;for(w=0;w0){for(w=1,D=1;w{switch(Fe[1]){case"|":return be|Fe[3];case"&":return be&Fe[3];case"^":return be^Fe[3]}},$)},D="!",b=Le("!",!1),C=function($){return!$},T="(",N=Le("(",!1),U=")",J=Le(")",!1),te=function($){return $},le=/^[^ \t\n\r()!|&\^]/,ce=Te([" "," ",` +`,"\r","(",")","!","|","&","^"],!0,!1),ue=function($){return e.queryPattern.test($)},Ie=function($){return e.checkFn($)},he=xe("whitespace"),De=/^[ \t\n\r]/,Ee=Te([" "," ",` +`,"\r"],!1,!1),g=0,me=0,Ce=[{line:1,column:1}],fe=0,ie=[],Z=0,Se;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function Re(){return t.substring(me,g)}function ht(){return He(me,g)}function q($,se){throw se=se!==void 0?se:He(me,g),P([xe($)],t.substring(me,g),se)}function nt($,se){throw se=se!==void 0?se:He(me,g),I($,se)}function Le($,se){return{type:"literal",text:$,ignoreCase:se}}function Te($,se,be){return{type:"class",parts:$,inverted:se,ignoreCase:be}}function ke(){return{type:"any"}}function Ke(){return{type:"end"}}function xe($){return{type:"other",description:$}}function tt($){var se=Ce[$],be;if(se)return se;for(be=$-1;!Ce[be];)be--;for(se=Ce[be],se={line:se.line,column:se.column};be<$;)t.charCodeAt(be)===10?(se.line++,se.column=1):se.column++,be++;return Ce[$]=se,se}function He($,se){var be=tt($),Fe=tt(se);return{start:{offset:$,line:be.line,column:be.column},end:{offset:se,line:Fe.line,column:Fe.column}}}function x($){gfe&&(fe=g,ie=[]),ie.push($))}function I($,se){return new pg($,null,null,se)}function P($,se,be){return new pg(pg.buildMessage($,se),$,se,be)}function y(){var $,se,be,Fe,lt,Et,qt,nr;if($=g,se=R(),se!==r){for(be=[],Fe=g,lt=X(),lt!==r?(t.charCodeAt(g)===124?(Et=n,g++):(Et=r,Z===0&&x(u)),Et===r&&(t.charCodeAt(g)===38?(Et=A,g++):(Et=r,Z===0&&x(p)),Et===r&&(t.charCodeAt(g)===94?(Et=h,g++):(Et=r,Z===0&&x(E)))),Et!==r?(qt=X(),qt!==r?(nr=R(),nr!==r?(lt=[lt,Et,qt,nr],Fe=lt):(g=Fe,Fe=r)):(g=Fe,Fe=r)):(g=Fe,Fe=r)):(g=Fe,Fe=r);Fe!==r;)be.push(Fe),Fe=g,lt=X(),lt!==r?(t.charCodeAt(g)===124?(Et=n,g++):(Et=r,Z===0&&x(u)),Et===r&&(t.charCodeAt(g)===38?(Et=A,g++):(Et=r,Z===0&&x(p)),Et===r&&(t.charCodeAt(g)===94?(Et=h,g++):(Et=r,Z===0&&x(E)))),Et!==r?(qt=X(),qt!==r?(nr=R(),nr!==r?(lt=[lt,Et,qt,nr],Fe=lt):(g=Fe,Fe=r)):(g=Fe,Fe=r)):(g=Fe,Fe=r)):(g=Fe,Fe=r);be!==r?(me=$,se=w(se,be),$=se):(g=$,$=r)}else g=$,$=r;return $}function R(){var $,se,be,Fe,lt,Et;return $=g,t.charCodeAt(g)===33?(se=D,g++):(se=r,Z===0&&x(b)),se!==r?(be=R(),be!==r?(me=$,se=C(be),$=se):(g=$,$=r)):(g=$,$=r),$===r&&($=g,t.charCodeAt(g)===40?(se=T,g++):(se=r,Z===0&&x(N)),se!==r?(be=X(),be!==r?(Fe=y(),Fe!==r?(lt=X(),lt!==r?(t.charCodeAt(g)===41?(Et=U,g++):(Et=r,Z===0&&x(J)),Et!==r?(me=$,se=te(Fe),$=se):(g=$,$=r)):(g=$,$=r)):(g=$,$=r)):(g=$,$=r)):(g=$,$=r),$===r&&($=z())),$}function z(){var $,se,be,Fe,lt;if($=g,se=X(),se!==r){if(be=g,Fe=[],le.test(t.charAt(g))?(lt=t.charAt(g),g++):(lt=r,Z===0&&x(ce)),lt!==r)for(;lt!==r;)Fe.push(lt),le.test(t.charAt(g))?(lt=t.charAt(g),g++):(lt=r,Z===0&&x(ce));else Fe=r;Fe!==r?be=t.substring(be,g):be=Fe,be!==r?(me=g,Fe=ue(be),Fe?Fe=void 0:Fe=r,Fe!==r?(me=$,se=Ie(be),$=se):(g=$,$=r)):(g=$,$=r)}else g=$,$=r;return $}function X(){var $,se;for(Z++,$=[],De.test(t.charAt(g))?(se=t.charAt(g),g++):(se=r,Z===0&&x(Ee));se!==r;)$.push(se),De.test(t.charAt(g))?(se=t.charAt(g),g++):(se=r,Z===0&&x(Ee));return Z--,$===r&&(se=r,Z===0&&x(he)),$}if(Se=a(),Se!==r&&g===t.length)return Se;throw Se!==r&&g{var{parse:r9e}=OX();nP.makeParser=(t=/[a-z]+/)=>(e,r)=>r9e(e,{queryPattern:t,checkFn:r});nP.parse=nP.makeParser()});var _X=_((lQt,UX)=>{"use strict";UX.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 KL=_((cQt,qX)=>{var Hw=_X(),HX={};for(let t of Object.keys(Hw))HX[Hw[t]]=t;var fr={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"]}};qX.exports=fr;for(let t of Object.keys(fr)){if(!("channels"in fr[t]))throw new Error("missing channels property: "+t);if(!("labels"in fr[t]))throw new Error("missing channel labels property: "+t);if(fr[t].labels.length!==fr[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=fr[t];delete fr[t].channels,delete fr[t].labels,Object.defineProperty(fr[t],"channels",{value:e}),Object.defineProperty(fr[t],"labels",{value:r})}fr.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(e,r,o),n=Math.max(e,r,o),u=n-a,A,p;n===a?A=0:e===n?A=(r-o)/u:r===n?A=2+(o-e)/u:o===n&&(A=4+(e-r)/u),A=Math.min(A*60,360),A<0&&(A+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=u/(n+a):p=u/(2-n-a),[A,p*100,h*100]};fr.rgb.hsv=function(t){let e,r,o,a,n,u=t[0]/255,A=t[1]/255,p=t[2]/255,h=Math.max(u,A,p),E=h-Math.min(u,A,p),w=function(D){return(h-D)/6/E+1/2};return E===0?(a=0,n=0):(n=E/h,e=w(u),r=w(A),o=w(p),u===h?a=o-r:A===h?a=1/3+e-o:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};fr.rgb.hwb=function(t){let e=t[0],r=t[1],o=t[2],a=fr.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,o));return o=1-1/255*Math.max(e,Math.max(r,o)),[a,n*100,o*100]};fr.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(1-e,1-r,1-o),n=(1-e-a)/(1-a)||0,u=(1-r-a)/(1-a)||0,A=(1-o-a)/(1-a)||0;return[n*100,u*100,A*100,a*100]};function n9e(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}fr.rgb.keyword=function(t){let e=HX[t];if(e)return e;let r=1/0,o;for(let a of Object.keys(Hw)){let n=Hw[a],u=n9e(t,n);u.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let a=e*.4124+r*.3576+o*.1805,n=e*.2126+r*.7152+o*.0722,u=e*.0193+r*.1192+o*.9505;return[a*100,n*100,u*100]};fr.rgb.lab=function(t){let e=fr.rgb.xyz(t),r=e[0],o=e[1],a=e[2];r/=95.047,o/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*o-16,u=500*(r-o),A=200*(o-a);return[n,u,A]};fr.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a,n,u;if(r===0)return u=o*255,[u,u,u];o<.5?a=o*(1+r):a=o+r-o*r;let A=2*o-a,p=[0,0,0];for(let h=0;h<3;h++)n=e+1/3*-(h-1),n<0&&n++,n>1&&n--,6*n<1?u=A+(a-A)*6*n:2*n<1?u=a:3*n<2?u=A+(a-A)*(2/3-n)*6:u=A,p[h]=u*255;return p};fr.hsl.hsv=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=r,n=Math.max(o,.01);o*=2,r*=o<=1?o:2-o,a*=n<=1?n:2-n;let u=(o+r)/2,A=o===0?2*a/(n+a):2*r/(o+r);return[e,A*100,u*100]};fr.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,o=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),u=255*o*(1-r),A=255*o*(1-r*n),p=255*o*(1-r*(1-n));switch(o*=255,a){case 0:return[o,p,u];case 1:return[A,o,u];case 2:return[u,o,p];case 3:return[u,A,o];case 4:return[p,u,o];case 5:return[o,u,A]}};fr.hsv.hsl=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=Math.max(o,.01),n,u;u=(2-r)*o;let A=(2-r)*a;return n=r*a,n/=A<=1?A:2-A,n=n||0,u/=2,[e,n*100,u*100]};fr.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a=r+o,n;a>1&&(r/=a,o/=a);let u=Math.floor(6*e),A=1-o;n=6*e-u,u&1&&(n=1-n);let p=r+n*(A-r),h,E,w;switch(u){default:case 6:case 0:h=A,E=p,w=r;break;case 1:h=p,E=A,w=r;break;case 2:h=r,E=A,w=p;break;case 3:h=r,E=p,w=A;break;case 4:h=p,E=r,w=A;break;case 5:h=A,E=r,w=p;break}return[h*255,E*255,w*255]};fr.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),u=1-Math.min(1,r*(1-a)+a),A=1-Math.min(1,o*(1-a)+a);return[n*255,u*255,A*255]};fr.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a,n,u;return a=e*3.2406+r*-1.5372+o*-.4986,n=e*-.9689+r*1.8758+o*.0415,u=e*.0557+r*-.204+o*1.057,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,u=u>.0031308?1.055*u**(1/2.4)-.055:u*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),u=Math.min(Math.max(0,u),1),[a*255,n*255,u*255]};fr.xyz.lab=function(t){let e=t[0],r=t[1],o=t[2];e/=95.047,r/=100,o/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let a=116*r-16,n=500*(e-r),u=200*(r-o);return[a,n,u]};fr.lab.xyz=function(t){let e=t[0],r=t[1],o=t[2],a,n,u;n=(e+16)/116,a=r/500+n,u=n-o/200;let A=n**3,p=a**3,h=u**3;return n=A>.008856?A:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,u=h>.008856?h:(u-16/116)/7.787,a*=95.047,n*=100,u*=108.883,[a,n,u]};fr.lab.lch=function(t){let e=t[0],r=t[1],o=t[2],a;a=Math.atan2(o,r)*360/2/Math.PI,a<0&&(a+=360);let u=Math.sqrt(r*r+o*o);return[e,u,a]};fr.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),u=r*Math.sin(a);return[e,n,u]};fr.rgb.ansi16=function(t,e=null){let[r,o,a]=t,n=e===null?fr.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let u=30+(Math.round(a/255)<<2|Math.round(o/255)<<1|Math.round(r/255));return n===2&&(u+=60),u};fr.hsv.ansi16=function(t){return fr.rgb.ansi16(fr.hsv.rgb(t),t[2])};fr.rgb.ansi256=function(t){let e=t[0],r=t[1],o=t[2];return e===r&&r===o?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(o/255*5)};fr.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,o=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[o,a,n]};fr.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,o=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,o,a]};fr.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};fr.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 o=parseInt(r,16),a=o>>16&255,n=o>>8&255,u=o&255;return[a,n,u]};fr.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.max(Math.max(e,r),o),n=Math.min(Math.min(e,r),o),u=a-n,A,p;return u<1?A=n/(1-u):A=0,u<=0?p=0:a===e?p=(r-o)/u%6:a===r?p=2+(o-e)/u:p=4+(e-r)/u,p/=6,p%=1,[p*360,u*100,A*100]};fr.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=r<.5?2*e*r:2*e*(1-r),a=0;return o<1&&(a=(r-.5*o)/(1-o)),[t[0],o*100,a*100]};fr.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=e*r,a=0;return o<1&&(a=(r-o)/(1-o)),[t[0],o*100,a*100]};fr.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100;if(r===0)return[o*255,o*255,o*255];let a=[0,0,0],n=e%1*6,u=n%1,A=1-u,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=u,a[2]=0;break;case 1:a[0]=A,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=u;break;case 3:a[0]=0,a[1]=A,a[2]=1;break;case 4:a[0]=u,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=A}return p=(1-r)*o,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};fr.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e),a=0;return o>0&&(a=e/o),[t[0],a*100,o*100]};fr.hcg.hsl=function(t){let e=t[1]/100,o=t[2]/100*(1-e)+.5*e,a=0;return o>0&&o<.5?a=e/(2*o):o>=.5&&o<1&&(a=e/(2*(1-o))),[t[0],a*100,o*100]};fr.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e);return[t[0],(o-e)*100,(1-o)*100]};fr.hwb.hcg=function(t){let e=t[1]/100,o=1-t[2]/100,a=o-e,n=0;return a<1&&(n=(o-a)/(1-a)),[t[0],a*100,n*100]};fr.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};fr.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};fr.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};fr.gray.hsl=function(t){return[0,0,t[0]]};fr.gray.hsv=fr.gray.hsl;fr.gray.hwb=function(t){return[0,100,t[0]]};fr.gray.cmyk=function(t){return[0,0,0,t[0]]};fr.gray.lab=function(t){return[t[0],0,0]};fr.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,o=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(o.length)+o};fr.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var GX=_((uQt,jX)=>{var iP=KL();function i9e(){let t={},e=Object.keys(iP);for(let r=e.length,o=0;o{var JL=KL(),l9e=GX(),Rm={},c9e=Object.keys(JL);function u9e(t){let e=function(...r){let o=r[0];return o==null?o:(o.length>1&&(r=o),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function A9e(t){let e=function(...r){let o=r[0];if(o==null)return o;o.length>1&&(r=o);let a=t(r);if(typeof a=="object")for(let n=a.length,u=0;u{Rm[t]={},Object.defineProperty(Rm[t],"channels",{value:JL[t].channels}),Object.defineProperty(Rm[t],"labels",{value:JL[t].labels});let e=l9e(t);Object.keys(e).forEach(o=>{let a=e[o];Rm[t][o]=A9e(a),Rm[t][o].raw=u9e(a)})});WX.exports=Rm});var qw=_((fQt,XX)=>{"use strict";var VX=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,KX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};5;${o}m`},JX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};2;${o[0]};${o[1]};${o[2]}m`},sP=t=>t,zX=(t,e,r)=>[t,e,r],Tm=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let o=r();return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0}),o},enumerable:!0,configurable:!0})},zL,Lm=(t,e,r,o)=>{zL===void 0&&(zL=YX());let a=o?10:0,n={};for(let[u,A]of Object.entries(zL)){let p=u==="ansi16"?"ansi":u;u===e?n[p]=t(r,a):typeof A=="object"&&(n[p]=t(A[e],a))}return n};function f9e(){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,o]of Object.entries(e)){for(let[a,n]of Object.entries(o))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:o,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",Tm(e.color,"ansi",()=>Lm(VX,"ansi16",sP,!1)),Tm(e.color,"ansi256",()=>Lm(KX,"ansi256",sP,!1)),Tm(e.color,"ansi16m",()=>Lm(JX,"rgb",zX,!1)),Tm(e.bgColor,"ansi",()=>Lm(VX,"ansi16",sP,!0)),Tm(e.bgColor,"ansi256",()=>Lm(KX,"ansi256",sP,!0)),Tm(e.bgColor,"ansi16m",()=>Lm(JX,"rgb",zX,!0)),e}Object.defineProperty(XX,"exports",{enumerable:!0,get:f9e})});var $X=_((pQt,ZX)=>{"use strict";ZX.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(r+t),a=e.indexOf("--");return o!==-1&&(a===-1||o{"use strict";var p9e=ve("os"),eZ=ve("tty"),_l=$X(),{env:cs}=process,Zp;_l("no-color")||_l("no-colors")||_l("color=false")||_l("color=never")?Zp=0:(_l("color")||_l("colors")||_l("color=true")||_l("color=always"))&&(Zp=1);"FORCE_COLOR"in cs&&(cs.FORCE_COLOR==="true"?Zp=1:cs.FORCE_COLOR==="false"?Zp=0:Zp=cs.FORCE_COLOR.length===0?1:Math.min(parseInt(cs.FORCE_COLOR,10),3));function XL(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function ZL(t,e){if(Zp===0)return 0;if(_l("color=16m")||_l("color=full")||_l("color=truecolor"))return 3;if(_l("color=256"))return 2;if(t&&!e&&Zp===void 0)return 0;let r=Zp||0;if(cs.TERM==="dumb")return r;if(process.platform==="win32"){let o=p9e.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in cs)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(o=>o in cs)||cs.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in cs)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(cs.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in cs)return 1;if(cs.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in cs){let o=parseInt((cs.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(cs.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(cs.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(cs.TERM)||"COLORTERM"in cs?1:r}function h9e(t){let e=ZL(t,t&&t.isTTY);return XL(e)}tZ.exports={supportsColor:h9e,stdout:XL(ZL(!0,eZ.isatty(1))),stderr:XL(ZL(!0,eZ.isatty(2)))}});var nZ=_((gQt,rZ)=>{"use strict";var g9e=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},d9e=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`:` +`)+r,a=o+1,o=t.indexOf(` +`,a)}while(o!==-1);return n+=t.substr(a),n};rZ.exports={stringReplaceAll:g9e,stringEncaseCRLFWithFirstIndex:d9e}});var lZ=_((dQt,aZ)=>{"use strict";var m9e=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,iZ=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,y9e=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,E9e=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,C9e=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function oZ(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)):C9e.get(t)||t}function I9e(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(y9e))r.push(a[2].replace(E9e,(A,p,h)=>p?oZ(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function w9e(t){iZ.lastIndex=0;let e=[],r;for(;(r=iZ.exec(t))!==null;){let o=r[1];if(r[2]){let a=I9e(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function sZ(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}aZ.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(m9e,(n,u,A,p,h,E)=>{if(u)a.push(oZ(u));else if(p){let w=a.join("");a=[],o.push(r.length===0?w:sZ(t,r)(w)),r.push({inverse:A,styles:w9e(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(sZ(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var sN=_((mQt,fZ)=>{"use strict";var jw=qw(),{stdout:tN,stderr:rN}=$L(),{stringReplaceAll:B9e,stringEncaseCRLFWithFirstIndex:v9e}=nZ(),cZ=["ansi","ansi","ansi256","ansi16m"],Nm=Object.create(null),D9e=(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=tN?tN.level:0;t.level=e.level===void 0?r:e.level},nN=class{constructor(e){return uZ(e)}},uZ=t=>{let e={};return D9e(e,t),e.template=(...r)=>x9e(e.template,...r),Object.setPrototypeOf(e,oP.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=nN,e.template};function oP(t){return uZ(t)}for(let[t,e]of Object.entries(jw))Nm[t]={get(){let r=aP(this,iN(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};Nm.visible={get(){let t=aP(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var AZ=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of AZ)Nm[t]={get(){let{level:e}=this;return function(...r){let o=iN(jw.color[cZ[e]][t](...r),jw.color.close,this._styler);return aP(this,o,this._isEmpty)}}};for(let t of AZ){let e="bg"+t[0].toUpperCase()+t.slice(1);Nm[e]={get(){let{level:r}=this;return function(...o){let a=iN(jw.bgColor[cZ[r]][t](...o),jw.bgColor.close,this._styler);return aP(this,a,this._isEmpty)}}}}var S9e=Object.defineProperties(()=>{},{...Nm,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),iN=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},aP=(t,e,r)=>{let o=(...a)=>P9e(o,a.length===1?""+a[0]:a.join(" "));return o.__proto__=S9e,o._generator=t,o._styler=e,o._isEmpty=r,o},P9e=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=B9e(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=v9e(e,a,o,n)),o+e+a},eN,x9e=(t,...e)=>{let[r]=e;if(!Array.isArray(r))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";Hl.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Hl.find=(t,e)=>t.nodes.find(r=>r.type===e);Hl.exceedsLimit=(t,e,r=1,o)=>o===!1||!Hl.isInteger(t)||!Hl.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=o;Hl.escapeNode=(t,e=0,r)=>{let o=t.nodes[e];o&&(r&&o.type===r||o.type==="open"||o.type==="close")&&o.escaped!==!0&&(o.value="\\"+o.value,o.escaped=!0)};Hl.encloseBrace=t=>t.type!=="brace"||t.commas>>0+t.ranges>>0?!1:(t.invalid=!0,!0);Hl.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:!(t.commas>>0+t.ranges>>0)||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;Hl.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Hl.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Hl.flatten=(...t)=>{let e=[],r=o=>{for(let a=0;a{"use strict";var pZ=lP();hZ.exports=(t,e={})=>{let r=(o,a={})=>{let n=e.escapeInvalid&&pZ.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A="";if(o.value)return(n||u)&&pZ.isOpenOrClose(o)?"\\"+o.value:o.value;if(o.value)return o.value;if(o.nodes)for(let p of o.nodes)A+=r(p);return A};return r(t)}});var dZ=_((CQt,gZ)=>{"use strict";gZ.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var DZ=_((IQt,vZ)=>{"use strict";var mZ=dZ(),hg=(t,e,r)=>{if(mZ(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(mZ(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let o={relaxZeros:!0,...r};typeof o.strictZeros=="boolean"&&(o.relaxZeros=o.strictZeros===!1);let a=String(o.relaxZeros),n=String(o.shorthand),u=String(o.capture),A=String(o.wrap),p=t+":"+e+"="+a+n+u+A;if(hg.cache.hasOwnProperty(p))return hg.cache[p].result;let h=Math.min(t,e),E=Math.max(t,e);if(Math.abs(h-E)===1){let T=t+"|"+e;return o.capture?`(${T})`:o.wrap===!1?T:`(?:${T})`}let w=BZ(t)||BZ(e),D={min:t,max:e,a:h,b:E},b=[],C=[];if(w&&(D.isPadded=w,D.maxLen=String(D.max).length),h<0){let T=E<0?Math.abs(E):1;C=yZ(T,Math.abs(h),D,o),h=D.a=0}return E>=0&&(b=yZ(h,E,D,o)),D.negatives=C,D.positives=b,D.result=b9e(C,b,o),o.capture===!0?D.result=`(${D.result})`:o.wrap!==!1&&b.length+C.length>1&&(D.result=`(?:${D.result})`),hg.cache[p]=D,D.result};function b9e(t,e,r){let o=oN(t,e,"-",!1,r)||[],a=oN(e,t,"",!1,r)||[],n=oN(t,e,"-?",!0,r)||[];return o.concat(n).concat(a).join("|")}function k9e(t,e){let r=1,o=1,a=CZ(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=CZ(t,r);for(a=IZ(e+1,o)-1;t1&&A.count.pop(),A.count.push(E.count[0]),A.string=A.pattern+wZ(A.count),u=h+1;continue}r.isPadded&&(w=L9e(h,r,o)),E.string=w+E.pattern+wZ(E.count),n.push(E),u=h+1,A=E}return n}function oN(t,e,r,o,a){let n=[];for(let u of t){let{string:A}=u;!o&&!EZ(e,"string",A)&&n.push(r+A),o&&EZ(e,"string",A)&&n.push(r+A)}return n}function F9e(t,e){let r=[];for(let o=0;oe?1:e>t?-1:0}function EZ(t,e,r){return t.some(o=>o[e]===r)}function CZ(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function IZ(t,e){return t-t%Math.pow(10,e)}function wZ(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function T9e(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function BZ(t){return/^-?(0+)\d/.test(t)}function L9e(t,e,r){if(!e.isPadded)return t;let o=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(o){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${o}}`:`0{${o}}`}}hg.cache={};hg.clearCache=()=>hg.cache={};vZ.exports=hg});var cN=_((wQt,RZ)=>{"use strict";var N9e=ve("util"),xZ=DZ(),SZ=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),O9e=t=>e=>t===!0?Number(e):String(e),aN=t=>typeof t=="number"||typeof t=="string"&&t!=="",Ww=t=>Number.isInteger(+t),lN=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},M9e=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,U9e=(t,e,r)=>{if(e>0){let o=t[0]==="-"?"-":"";o&&(t=t.slice(1)),t=o+t.padStart(o?e-1:e,"0")}return r===!1?String(t):t},PZ=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((u,A)=>uA?1:0),t.positives.sort((u,A)=>uA?1:0);let r=e.capture?"":"?:",o="",a="",n;return t.positives.length&&(o=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),o&&a?n=`${o}|${a}`:n=o||a,e.wrap?`(${r}${n})`:n},bZ=(t,e,r,o)=>{if(r)return xZ(t,e,{wrap:!1,...o});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},kZ=(t,e,r)=>{if(Array.isArray(t)){let o=r.wrap===!0,a=r.capture?"":"?:";return o?`(${a}${t.join("|")})`:t.join("|")}return xZ(t,e,r)},QZ=(...t)=>new RangeError("Invalid range arguments: "+N9e.inspect(...t)),FZ=(t,e,r)=>{if(r.strictRanges===!0)throw QZ([t,e]);return[]},H9e=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},q9e=(t,e,r=1,o={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(o.strictRanges===!0)throw QZ([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let u=a>n,A=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let E=lN(A)||lN(p)||lN(h),w=E?Math.max(A.length,p.length,h.length):0,D=E===!1&&M9e(t,e,o)===!1,b=o.transform||O9e(D);if(o.toRegex&&r===1)return bZ(PZ(t,w),PZ(e,w),!0,o);let C={negatives:[],positives:[]},T=J=>C[J<0?"negatives":"positives"].push(Math.abs(J)),N=[],U=0;for(;u?a>=n:a<=n;)o.toRegex===!0&&r>1?T(a):N.push(U9e(b(a,U),w,D)),a=u?a-r:a+r,U++;return o.toRegex===!0?r>1?_9e(C,o):kZ(N,null,{wrap:!1,...o}):N},j9e=(t,e,r=1,o={})=>{if(!Ww(t)&&t.length>1||!Ww(e)&&e.length>1)return FZ(t,e,o);let a=o.transform||(D=>String.fromCharCode(D)),n=`${t}`.charCodeAt(0),u=`${e}`.charCodeAt(0),A=n>u,p=Math.min(n,u),h=Math.max(n,u);if(o.toRegex&&r===1)return bZ(p,h,!1,o);let E=[],w=0;for(;A?n>=u:n<=u;)E.push(a(n,w)),n=A?n-r:n+r,w++;return o.toRegex===!0?kZ(E,null,{wrap:!1,options:o}):E},uP=(t,e,r,o={})=>{if(e==null&&aN(t))return[t];if(!aN(t)||!aN(e))return FZ(t,e,o);if(typeof r=="function")return uP(t,e,1,{transform:r});if(SZ(r))return uP(t,e,0,r);let a={...o};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,Ww(r)?Ww(t)&&Ww(e)?q9e(t,e,r,a):j9e(t,e,Math.max(Math.abs(r),1),a):r!=null&&!SZ(r)?H9e(r,a):uP(t,e,1,r)};RZ.exports=uP});var NZ=_((BQt,LZ)=>{"use strict";var G9e=cN(),TZ=lP(),W9e=(t,e={})=>{let r=(o,a={})=>{let n=TZ.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A=n===!0||u===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(o.isOpen===!0||o.isClose===!0)return p+o.value;if(o.type==="open")return A?p+o.value:"(";if(o.type==="close")return A?p+o.value:")";if(o.type==="comma")return o.prev.type==="comma"?"":A?o.value:"|";if(o.value)return o.value;if(o.nodes&&o.ranges>0){let E=TZ.reduce(o.nodes),w=G9e(...E,{...e,wrap:!1,toRegex:!0});if(w.length!==0)return E.length>1&&w.length>1?`(${w})`:w}if(o.nodes)for(let E of o.nodes)h+=r(E,o);return h};return r(t)};LZ.exports=W9e});var UZ=_((vQt,MZ)=>{"use strict";var Y9e=cN(),OZ=cP(),Om=lP(),gg=(t="",e="",r=!1)=>{let o=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Om.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)o.push(gg(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),o.push(Array.isArray(n)?gg(a,n,r):a+n);return Om.flatten(o)},V9e=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,o=(a,n={})=>{a.queue=[];let u=n,A=n.queue;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,A=u.queue;if(a.invalid||a.dollar){A.push(gg(A.pop(),OZ(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){A.push(gg(A.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let w=Om.reduce(a.nodes);if(Om.exceedsLimit(...w,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let D=Y9e(...w,e);D.length===0&&(D=OZ(a,e)),A.push(gg(A.pop(),D)),a.nodes=[];return}let p=Om.encloseBrace(a),h=a.queue,E=a;for(;E.type!=="brace"&&E.type!=="root"&&E.parent;)E=E.parent,h=E.queue;for(let w=0;w{"use strict";_Z.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 YZ=_((SQt,WZ)=>{"use strict";var K9e=cP(),{MAX_LENGTH:qZ,CHAR_BACKSLASH:uN,CHAR_BACKTICK:J9e,CHAR_COMMA:z9e,CHAR_DOT:X9e,CHAR_LEFT_PARENTHESES:Z9e,CHAR_RIGHT_PARENTHESES:$9e,CHAR_LEFT_CURLY_BRACE:e7e,CHAR_RIGHT_CURLY_BRACE:t7e,CHAR_LEFT_SQUARE_BRACKET:jZ,CHAR_RIGHT_SQUARE_BRACKET:GZ,CHAR_DOUBLE_QUOTE:r7e,CHAR_SINGLE_QUOTE:n7e,CHAR_NO_BREAK_SPACE:i7e,CHAR_ZERO_WIDTH_NOBREAK_SPACE:s7e}=HZ(),o7e=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},o=typeof r.maxLength=="number"?Math.min(qZ,r.maxLength):qZ;if(t.length>o)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${o})`);let a={type:"root",input:t,nodes:[]},n=[a],u=a,A=a,p=0,h=t.length,E=0,w=0,D,b={},C=()=>t[E++],T=N=>{if(N.type==="text"&&A.type==="dot"&&(A.type="text"),A&&A.type==="text"&&N.type==="text"){A.value+=N.value;return}return u.nodes.push(N),N.parent=u,N.prev=A,A=N,N};for(T({type:"bos"});E0){if(u.ranges>0){u.ranges=0;let N=u.nodes.shift();u.nodes=[N,{type:"text",value:K9e(u)}]}T({type:"comma",value:D}),u.commas++;continue}if(D===X9e&&w>0&&u.commas===0){let N=u.nodes;if(w===0||N.length===0){T({type:"text",value:D});continue}if(A.type==="dot"){if(u.range=[],A.value+=D,A.type="range",u.nodes.length!==3&&u.nodes.length!==5){u.invalid=!0,u.ranges=0,A.type="text";continue}u.ranges++,u.args=[];continue}if(A.type==="range"){N.pop();let U=N[N.length-1];U.value+=A.value+D,A=U,u.ranges--;continue}T({type:"dot",value:D});continue}T({type:"text",value:D})}do if(u=n.pop(),u.type!=="root"){u.nodes.forEach(J=>{J.nodes||(J.type==="open"&&(J.isOpen=!0),J.type==="close"&&(J.isClose=!0),J.nodes||(J.type="text"),J.invalid=!0)});let N=n[n.length-1],U=N.nodes.indexOf(u);N.nodes.splice(U,1,...u.nodes)}while(n.length>0);return T({type:"eos"}),a};WZ.exports=o7e});var JZ=_((PQt,KZ)=>{"use strict";var VZ=cP(),a7e=NZ(),l7e=UZ(),c7e=YZ(),al=(t,e={})=>{let r=[];if(Array.isArray(t))for(let o of t){let a=al.create(o,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(al.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};al.parse=(t,e={})=>c7e(t,e);al.stringify=(t,e={})=>VZ(typeof t=="string"?al.parse(t,e):t,e);al.compile=(t,e={})=>(typeof t=="string"&&(t=al.parse(t,e)),a7e(t,e));al.expand=(t,e={})=>{typeof t=="string"&&(t=al.parse(t,e));let r=l7e(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};al.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?al.compile(t,e):al.expand(t,e);KZ.exports=al});var Yw=_((xQt,e$)=>{"use strict";var u7e=ve("path"),zu="\\\\/",zZ=`[^${zu}]`,Bf="\\.",A7e="\\+",f7e="\\?",AP="\\/",p7e="(?=.)",XZ="[^/]",AN=`(?:${AP}|$)`,ZZ=`(?:^|${AP})`,fN=`${Bf}{1,2}${AN}`,h7e=`(?!${Bf})`,g7e=`(?!${ZZ}${fN})`,d7e=`(?!${Bf}{0,1}${AN})`,m7e=`(?!${fN})`,y7e=`[^.${AP}]`,E7e=`${XZ}*?`,$Z={DOT_LITERAL:Bf,PLUS_LITERAL:A7e,QMARK_LITERAL:f7e,SLASH_LITERAL:AP,ONE_CHAR:p7e,QMARK:XZ,END_ANCHOR:AN,DOTS_SLASH:fN,NO_DOT:h7e,NO_DOTS:g7e,NO_DOT_SLASH:d7e,NO_DOTS_SLASH:m7e,QMARK_NO_DOT:y7e,STAR:E7e,START_ANCHOR:ZZ},C7e={...$Z,SLASH_LITERAL:`[${zu}]`,QMARK:zZ,STAR:`${zZ}*?`,DOTS_SLASH:`${Bf}{1,2}(?:[${zu}]|$)`,NO_DOT:`(?!${Bf})`,NO_DOTS:`(?!(?:^|[${zu}])${Bf}{1,2}(?:[${zu}]|$))`,NO_DOT_SLASH:`(?!${Bf}{0,1}(?:[${zu}]|$))`,NO_DOTS_SLASH:`(?!${Bf}{1,2}(?:[${zu}]|$))`,QMARK_NO_DOT:`[^.${zu}]`,START_ANCHOR:`(?:^|[${zu}])`,END_ANCHOR:`(?:[${zu}]|$)`},I7e={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"};e$.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:I7e,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:u7e.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?C7e:$Z}}});var Vw=_(ba=>{"use strict";var w7e=ve("path"),B7e=process.platform==="win32",{REGEX_BACKSLASH:v7e,REGEX_REMOVE_BACKSLASH:D7e,REGEX_SPECIAL_CHARS:S7e,REGEX_SPECIAL_CHARS_GLOBAL:P7e}=Yw();ba.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);ba.hasRegexChars=t=>S7e.test(t);ba.isRegexChar=t=>t.length===1&&ba.hasRegexChars(t);ba.escapeRegex=t=>t.replace(P7e,"\\$1");ba.toPosixSlashes=t=>t.replace(v7e,"/");ba.removeBackslashes=t=>t.replace(D7e,e=>e==="\\"?"":e);ba.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};ba.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:B7e===!0||w7e.sep==="\\";ba.escapeLast=(t,e,r)=>{let o=t.lastIndexOf(e,r);return o===-1?t:t[o-1]==="\\"?ba.escapeLast(t,e,o-1):`${t.slice(0,o)}\\${t.slice(o)}`};ba.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};ba.wrapOutput=(t,e={},r={})=>{let o=r.contains?"":"^",a=r.contains?"":"$",n=`${o}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var l$=_((kQt,a$)=>{"use strict";var t$=Vw(),{CHAR_ASTERISK:pN,CHAR_AT:x7e,CHAR_BACKWARD_SLASH:Kw,CHAR_COMMA:b7e,CHAR_DOT:hN,CHAR_EXCLAMATION_MARK:gN,CHAR_FORWARD_SLASH:o$,CHAR_LEFT_CURLY_BRACE:dN,CHAR_LEFT_PARENTHESES:mN,CHAR_LEFT_SQUARE_BRACKET:k7e,CHAR_PLUS:Q7e,CHAR_QUESTION_MARK:r$,CHAR_RIGHT_CURLY_BRACE:F7e,CHAR_RIGHT_PARENTHESES:n$,CHAR_RIGHT_SQUARE_BRACKET:R7e}=Yw(),i$=t=>t===o$||t===Kw,s$=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},T7e=(t,e)=>{let r=e||{},o=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],u=[],A=[],p=t,h=-1,E=0,w=0,D=!1,b=!1,C=!1,T=!1,N=!1,U=!1,J=!1,te=!1,le=!1,ce=!1,ue=0,Ie,he,De={value:"",depth:0,isGlob:!1},Ee=()=>h>=o,g=()=>p.charCodeAt(h+1),me=()=>(Ie=he,p.charCodeAt(++h));for(;h0&&(fe=p.slice(0,E),p=p.slice(E),w-=E),Ce&&C===!0&&w>0?(Ce=p.slice(0,w),ie=p.slice(w)):C===!0?(Ce="",ie=p):Ce=p,Ce&&Ce!==""&&Ce!=="/"&&Ce!==p&&i$(Ce.charCodeAt(Ce.length-1))&&(Ce=Ce.slice(0,-1)),r.unescape===!0&&(ie&&(ie=t$.removeBackslashes(ie)),Ce&&J===!0&&(Ce=t$.removeBackslashes(Ce)));let Z={prefix:fe,input:t,start:E,base:Ce,glob:ie,isBrace:D,isBracket:b,isGlob:C,isExtglob:T,isGlobstar:N,negated:te,negatedExtglob:le};if(r.tokens===!0&&(Z.maxDepth=0,i$(he)||u.push(De),Z.tokens=u),r.parts===!0||r.tokens===!0){let Se;for(let Re=0;Re{"use strict";var fP=Yw(),ll=Vw(),{MAX_LENGTH:pP,POSIX_REGEX_SOURCE:L7e,REGEX_NON_SPECIAL_CHARS:N7e,REGEX_SPECIAL_CHARS_BACKREF:O7e,REPLACEMENTS:c$}=fP,M7e=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch{return t.map(a=>ll.escapeRegex(a)).join("..")}return r},Mm=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,yN=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=c$[t]||t;let r={...e},o=typeof r.maxLength=="number"?Math.min(pP,r.maxLength):pP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);let n={type:"bos",value:"",output:r.prepend||""},u=[n],A=r.capture?"":"?:",p=ll.isWindows(e),h=fP.globChars(p),E=fP.extglobChars(h),{DOT_LITERAL:w,PLUS_LITERAL:D,SLASH_LITERAL:b,ONE_CHAR:C,DOTS_SLASH:T,NO_DOT:N,NO_DOT_SLASH:U,NO_DOTS_SLASH:J,QMARK:te,QMARK_NO_DOT:le,STAR:ce,START_ANCHOR:ue}=h,Ie=x=>`(${A}(?:(?!${ue}${x.dot?T:w}).)*?)`,he=r.dot?"":N,De=r.dot?te:le,Ee=r.bash===!0?Ie(r):ce;r.capture&&(Ee=`(${Ee})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let g={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:u};t=ll.removePrefix(t,g),a=t.length;let me=[],Ce=[],fe=[],ie=n,Z,Se=()=>g.index===a-1,Re=g.peek=(x=1)=>t[g.index+x],ht=g.advance=()=>t[++g.index]||"",q=()=>t.slice(g.index+1),nt=(x="",I=0)=>{g.consumed+=x,g.index+=I},Le=x=>{g.output+=x.output!=null?x.output:x.value,nt(x.value)},Te=()=>{let x=1;for(;Re()==="!"&&(Re(2)!=="("||Re(3)==="?");)ht(),g.start++,x++;return x%2===0?!1:(g.negated=!0,g.start++,!0)},ke=x=>{g[x]++,fe.push(x)},Ke=x=>{g[x]--,fe.pop()},xe=x=>{if(ie.type==="globstar"){let I=g.braces>0&&(x.type==="comma"||x.type==="brace"),P=x.extglob===!0||me.length&&(x.type==="pipe"||x.type==="paren");x.type!=="slash"&&x.type!=="paren"&&!I&&!P&&(g.output=g.output.slice(0,-ie.output.length),ie.type="star",ie.value="*",ie.output=Ee,g.output+=ie.output)}if(me.length&&x.type!=="paren"&&(me[me.length-1].inner+=x.value),(x.value||x.output)&&Le(x),ie&&ie.type==="text"&&x.type==="text"){ie.value+=x.value,ie.output=(ie.output||"")+x.value;return}x.prev=ie,u.push(x),ie=x},tt=(x,I)=>{let P={...E[I],conditions:1,inner:""};P.prev=ie,P.parens=g.parens,P.output=g.output;let y=(r.capture?"(":"")+P.open;ke("parens"),xe({type:x,value:I,output:g.output?"":C}),xe({type:"paren",extglob:!0,value:ht(),output:y}),me.push(P)},He=x=>{let I=x.close+(r.capture?")":""),P;if(x.type==="negate"){let y=Ee;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(y=Ie(r)),(y!==Ee||Se()||/^\)+$/.test(q()))&&(I=x.close=`)$))${y}`),x.inner.includes("*")&&(P=q())&&/^\.[^\\/.]+$/.test(P)){let R=yN(P,{...e,fastpaths:!1}).output;I=x.close=`)${R})${y})`}x.prev.type==="bos"&&(g.negatedExtglob=!0)}xe({type:"paren",extglob:!0,value:Z,output:I}),Ke("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,I=t.replace(O7e,(P,y,R,z,X,$)=>z==="\\"?(x=!0,P):z==="?"?y?y+z+(X?te.repeat(X.length):""):$===0?De+(X?te.repeat(X.length):""):te.repeat(R.length):z==="."?w.repeat(R.length):z==="*"?y?y+z+(X?Ee:""):Ee:y?P:`\\${P}`);return x===!0&&(r.unescape===!0?I=I.replace(/\\/g,""):I=I.replace(/\\+/g,P=>P.length%2===0?"\\\\":P?"\\":"")),I===t&&r.contains===!0?(g.output=t,g):(g.output=ll.wrapOutput(I,g,e),g)}for(;!Se();){if(Z=ht(),Z==="\0")continue;if(Z==="\\"){let P=Re();if(P==="/"&&r.bash!==!0||P==="."||P===";")continue;if(!P){Z+="\\",xe({type:"text",value:Z});continue}let y=/^\\+/.exec(q()),R=0;if(y&&y[0].length>2&&(R=y[0].length,g.index+=R,R%2!==0&&(Z+="\\")),r.unescape===!0?Z=ht():Z+=ht(),g.brackets===0){xe({type:"text",value:Z});continue}}if(g.brackets>0&&(Z!=="]"||ie.value==="["||ie.value==="[^")){if(r.posix!==!1&&Z===":"){let P=ie.value.slice(1);if(P.includes("[")&&(ie.posix=!0,P.includes(":"))){let y=ie.value.lastIndexOf("["),R=ie.value.slice(0,y),z=ie.value.slice(y+2),X=L7e[z];if(X){ie.value=R+X,g.backtrack=!0,ht(),!n.output&&u.indexOf(ie)===1&&(n.output=C);continue}}}(Z==="["&&Re()!==":"||Z==="-"&&Re()==="]")&&(Z=`\\${Z}`),Z==="]"&&(ie.value==="["||ie.value==="[^")&&(Z=`\\${Z}`),r.posix===!0&&Z==="!"&&ie.value==="["&&(Z="^"),ie.value+=Z,Le({value:Z});continue}if(g.quotes===1&&Z!=='"'){Z=ll.escapeRegex(Z),ie.value+=Z,Le({value:Z});continue}if(Z==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&xe({type:"text",value:Z});continue}if(Z==="("){ke("parens"),xe({type:"paren",value:Z});continue}if(Z===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Mm("opening","("));let P=me[me.length-1];if(P&&g.parens===P.parens+1){He(me.pop());continue}xe({type:"paren",value:Z,output:g.parens?")":"\\)"}),Ke("parens");continue}if(Z==="["){if(r.nobracket===!0||!q().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Mm("closing","]"));Z=`\\${Z}`}else ke("brackets");xe({type:"bracket",value:Z});continue}if(Z==="]"){if(r.nobracket===!0||ie&&ie.type==="bracket"&&ie.value.length===1){xe({type:"text",value:Z,output:`\\${Z}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Mm("opening","["));xe({type:"text",value:Z,output:`\\${Z}`});continue}Ke("brackets");let P=ie.value.slice(1);if(ie.posix!==!0&&P[0]==="^"&&!P.includes("/")&&(Z=`/${Z}`),ie.value+=Z,Le({value:Z}),r.literalBrackets===!1||ll.hasRegexChars(P))continue;let y=ll.escapeRegex(ie.value);if(g.output=g.output.slice(0,-ie.value.length),r.literalBrackets===!0){g.output+=y,ie.value=y;continue}ie.value=`(${A}${y}|${ie.value})`,g.output+=ie.value;continue}if(Z==="{"&&r.nobrace!==!0){ke("braces");let P={type:"brace",value:Z,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};Ce.push(P),xe(P);continue}if(Z==="}"){let P=Ce[Ce.length-1];if(r.nobrace===!0||!P){xe({type:"text",value:Z,output:Z});continue}let y=")";if(P.dots===!0){let R=u.slice(),z=[];for(let X=R.length-1;X>=0&&(u.pop(),R[X].type!=="brace");X--)R[X].type!=="dots"&&z.unshift(R[X].value);y=M7e(z,r),g.backtrack=!0}if(P.comma!==!0&&P.dots!==!0){let R=g.output.slice(0,P.outputIndex),z=g.tokens.slice(P.tokensIndex);P.value=P.output="\\{",Z=y="\\}",g.output=R;for(let X of z)g.output+=X.output||X.value}xe({type:"brace",value:Z,output:y}),Ke("braces"),Ce.pop();continue}if(Z==="|"){me.length>0&&me[me.length-1].conditions++,xe({type:"text",value:Z});continue}if(Z===","){let P=Z,y=Ce[Ce.length-1];y&&fe[fe.length-1]==="braces"&&(y.comma=!0,P="|"),xe({type:"comma",value:Z,output:P});continue}if(Z==="/"){if(ie.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",u.pop(),ie=n;continue}xe({type:"slash",value:Z,output:b});continue}if(Z==="."){if(g.braces>0&&ie.type==="dot"){ie.value==="."&&(ie.output=w);let P=Ce[Ce.length-1];ie.type="dots",ie.output+=Z,ie.value+=Z,P.dots=!0;continue}if(g.braces+g.parens===0&&ie.type!=="bos"&&ie.type!=="slash"){xe({type:"text",value:Z,output:w});continue}xe({type:"dot",value:Z,output:w});continue}if(Z==="?"){if(!(ie&&ie.value==="(")&&r.noextglob!==!0&&Re()==="("&&Re(2)!=="?"){tt("qmark",Z);continue}if(ie&&ie.type==="paren"){let y=Re(),R=Z;if(y==="<"&&!ll.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(ie.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(q()))&&(R=`\\${Z}`),xe({type:"text",value:Z,output:R});continue}if(r.dot!==!0&&(ie.type==="slash"||ie.type==="bos")){xe({type:"qmark",value:Z,output:le});continue}xe({type:"qmark",value:Z,output:te});continue}if(Z==="!"){if(r.noextglob!==!0&&Re()==="("&&(Re(2)!=="?"||!/[!=<:]/.test(Re(3)))){tt("negate",Z);continue}if(r.nonegate!==!0&&g.index===0){Te();continue}}if(Z==="+"){if(r.noextglob!==!0&&Re()==="("&&Re(2)!=="?"){tt("plus",Z);continue}if(ie&&ie.value==="("||r.regex===!1){xe({type:"plus",value:Z,output:D});continue}if(ie&&(ie.type==="bracket"||ie.type==="paren"||ie.type==="brace")||g.parens>0){xe({type:"plus",value:Z});continue}xe({type:"plus",value:D});continue}if(Z==="@"){if(r.noextglob!==!0&&Re()==="("&&Re(2)!=="?"){xe({type:"at",extglob:!0,value:Z,output:""});continue}xe({type:"text",value:Z});continue}if(Z!=="*"){(Z==="$"||Z==="^")&&(Z=`\\${Z}`);let P=N7e.exec(q());P&&(Z+=P[0],g.index+=P[0].length),xe({type:"text",value:Z});continue}if(ie&&(ie.type==="globstar"||ie.star===!0)){ie.type="star",ie.star=!0,ie.value+=Z,ie.output=Ee,g.backtrack=!0,g.globstar=!0,nt(Z);continue}let x=q();if(r.noextglob!==!0&&/^\([^?]/.test(x)){tt("star",Z);continue}if(ie.type==="star"){if(r.noglobstar===!0){nt(Z);continue}let P=ie.prev,y=P.prev,R=P.type==="slash"||P.type==="bos",z=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!R||x[0]&&x[0]!=="/")){xe({type:"star",value:Z,output:""});continue}let X=g.braces>0&&(P.type==="comma"||P.type==="brace"),$=me.length&&(P.type==="pipe"||P.type==="paren");if(!R&&P.type!=="paren"&&!X&&!$){xe({type:"star",value:Z,output:""});continue}for(;x.slice(0,3)==="/**";){let se=t[g.index+4];if(se&&se!=="/")break;x=x.slice(3),nt("/**",3)}if(P.type==="bos"&&Se()){ie.type="globstar",ie.value+=Z,ie.output=Ie(r),g.output=ie.output,g.globstar=!0,nt(Z);continue}if(P.type==="slash"&&P.prev.type!=="bos"&&!z&&Se()){g.output=g.output.slice(0,-(P.output+ie.output).length),P.output=`(?:${P.output}`,ie.type="globstar",ie.output=Ie(r)+(r.strictSlashes?")":"|$)"),ie.value+=Z,g.globstar=!0,g.output+=P.output+ie.output,nt(Z);continue}if(P.type==="slash"&&P.prev.type!=="bos"&&x[0]==="/"){let se=x[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(P.output+ie.output).length),P.output=`(?:${P.output}`,ie.type="globstar",ie.output=`${Ie(r)}${b}|${b}${se})`,ie.value+=Z,g.output+=P.output+ie.output,g.globstar=!0,nt(Z+ht()),xe({type:"slash",value:"/",output:""});continue}if(P.type==="bos"&&x[0]==="/"){ie.type="globstar",ie.value+=Z,ie.output=`(?:^|${b}|${Ie(r)}${b})`,g.output=ie.output,g.globstar=!0,nt(Z+ht()),xe({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-ie.output.length),ie.type="globstar",ie.output=Ie(r),ie.value+=Z,g.output+=ie.output,g.globstar=!0,nt(Z);continue}let I={type:"star",value:Z,output:Ee};if(r.bash===!0){I.output=".*?",(ie.type==="bos"||ie.type==="slash")&&(I.output=he+I.output),xe(I);continue}if(ie&&(ie.type==="bracket"||ie.type==="paren")&&r.regex===!0){I.output=Z,xe(I);continue}(g.index===g.start||ie.type==="slash"||ie.type==="dot")&&(ie.type==="dot"?(g.output+=U,ie.output+=U):r.dot===!0?(g.output+=J,ie.output+=J):(g.output+=he,ie.output+=he),Re()!=="*"&&(g.output+=C,ie.output+=C)),xe(I)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Mm("closing","]"));g.output=ll.escapeLast(g.output,"["),Ke("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Mm("closing",")"));g.output=ll.escapeLast(g.output,"("),Ke("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Mm("closing","}"));g.output=ll.escapeLast(g.output,"{"),Ke("braces")}if(r.strictSlashes!==!0&&(ie.type==="star"||ie.type==="bracket")&&xe({type:"maybe_slash",value:"",output:`${b}?`}),g.backtrack===!0){g.output="";for(let x of g.tokens)g.output+=x.output!=null?x.output:x.value,x.suffix&&(g.output+=x.suffix)}return g};yN.fastpaths=(t,e)=>{let r={...e},o=typeof r.maxLength=="number"?Math.min(pP,r.maxLength):pP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);t=c$[t]||t;let n=ll.isWindows(e),{DOT_LITERAL:u,SLASH_LITERAL:A,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:E,NO_DOTS:w,NO_DOTS_SLASH:D,STAR:b,START_ANCHOR:C}=fP.globChars(n),T=r.dot?w:E,N=r.dot?D:E,U=r.capture?"":"?:",J={negated:!1,prefix:""},te=r.bash===!0?".*?":b;r.capture&&(te=`(${te})`);let le=he=>he.noglobstar===!0?te:`(${U}(?:(?!${C}${he.dot?h:u}).)*?)`,ce=he=>{switch(he){case"*":return`${T}${p}${te}`;case".*":return`${u}${p}${te}`;case"*.*":return`${T}${te}${u}${p}${te}`;case"*/*":return`${T}${te}${A}${p}${N}${te}`;case"**":return T+le(r);case"**/*":return`(?:${T}${le(r)}${A})?${N}${p}${te}`;case"**/*.*":return`(?:${T}${le(r)}${A})?${N}${te}${u}${p}${te}`;case"**/.*":return`(?:${T}${le(r)}${A})?${u}${p}${te}`;default:{let De=/^(.*?)\.(\w+)$/.exec(he);if(!De)return;let Ee=ce(De[1]);return Ee?Ee+u+De[2]:void 0}}},ue=ll.removePrefix(t,J),Ie=ce(ue);return Ie&&r.strictSlashes!==!0&&(Ie+=`${A}?`),Ie};u$.exports=yN});var p$=_((FQt,f$)=>{"use strict";var U7e=ve("path"),_7e=l$(),EN=A$(),CN=Vw(),H7e=Yw(),q7e=t=>t&&typeof t=="object"&&!Array.isArray(t),Mi=(t,e,r=!1)=>{if(Array.isArray(t)){let E=t.map(D=>Mi(D,e,r));return D=>{for(let b of E){let C=b(D);if(C)return C}return!1}}let o=q7e(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=CN.isWindows(e),u=o?Mi.compileRe(t,e):Mi.makeRe(t,e,!1,!0),A=u.state;delete u.state;let p=()=>!1;if(a.ignore){let E={...e,ignore:null,onMatch:null,onResult:null};p=Mi(a.ignore,E,r)}let h=(E,w=!1)=>{let{isMatch:D,match:b,output:C}=Mi.test(E,u,e,{glob:t,posix:n}),T={glob:t,state:A,regex:u,posix:n,input:E,output:C,match:b,isMatch:D};return typeof a.onResult=="function"&&a.onResult(T),D===!1?(T.isMatch=!1,w?T:!1):p(E)?(typeof a.onIgnore=="function"&&a.onIgnore(T),T.isMatch=!1,w?T:!1):(typeof a.onMatch=="function"&&a.onMatch(T),w?T:!0)};return r&&(h.state=A),h};Mi.test=(t,e,r,{glob:o,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},u=n.format||(a?CN.toPosixSlashes:null),A=t===o,p=A&&u?u(t):t;return A===!1&&(p=u?u(t):t,A=p===o),(A===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?A=Mi.matchBase(t,e,r,a):A=e.exec(p)),{isMatch:!!A,match:A,output:p}};Mi.matchBase=(t,e,r,o=CN.isWindows(r))=>(e instanceof RegExp?e:Mi.makeRe(e,r)).test(U7e.basename(t));Mi.isMatch=(t,e,r)=>Mi(e,r)(t);Mi.parse=(t,e)=>Array.isArray(t)?t.map(r=>Mi.parse(r,e)):EN(t,{...e,fastpaths:!1});Mi.scan=(t,e)=>_7e(t,e);Mi.compileRe=(t,e,r=!1,o=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",u=a.contains?"":"$",A=`${n}(?:${t.output})${u}`;t&&t.negated===!0&&(A=`^(?!${A}).*$`);let p=Mi.toRegex(A,e);return o===!0&&(p.state=t),p};Mi.makeRe=(t,e={},r=!1,o=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let a={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a.output=EN.fastpaths(t,e)),a.output||(a=EN(t,e)),Mi.compileRe(a,e,r,o)};Mi.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/$^/}};Mi.constants=H7e;f$.exports=Mi});var g$=_((RQt,h$)=>{"use strict";h$.exports=p$()});var Xo=_((TQt,E$)=>{"use strict";var m$=ve("util"),y$=JZ(),Xu=g$(),IN=Vw(),d$=t=>t===""||t==="./",Ii=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let o=new Set,a=new Set,n=new Set,u=0,A=E=>{n.add(E.output),r&&r.onResult&&r.onResult(E)};for(let E=0;E!o.has(E));if(r&&h.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(E=>E.replace(/\\/g,"")):e}return h};Ii.match=Ii;Ii.matcher=(t,e)=>Xu(t,e);Ii.isMatch=(t,e,r)=>Xu(e,r)(t);Ii.any=Ii.isMatch;Ii.not=(t,e,r={})=>{e=[].concat(e).map(String);let o=new Set,a=[],n=A=>{r.onResult&&r.onResult(A),a.push(A.output)},u=new Set(Ii(t,e,{...r,onResult:n}));for(let A of a)u.has(A)||o.add(A);return[...o]};Ii.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${m$.inspect(t)}"`);if(Array.isArray(e))return e.some(o=>Ii.contains(t,o,r));if(typeof e=="string"){if(d$(t)||d$(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return Ii.isMatch(t,e,{...r,contains:!0})};Ii.matchKeys=(t,e,r)=>{if(!IN.isObject(t))throw new TypeError("Expected the first argument to be an object");let o=Ii(Object.keys(t),e,r),a={};for(let n of o)a[n]=t[n];return a};Ii.some=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Xu(String(a),r);if(o.some(u=>n(u)))return!0}return!1};Ii.every=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Xu(String(a),r);if(!o.every(u=>n(u)))return!1}return!0};Ii.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${m$.inspect(t)}"`);return[].concat(e).every(o=>Xu(o,r)(t))};Ii.capture=(t,e,r)=>{let o=IN.isWindows(r),n=Xu.makeRe(String(t),{...r,capture:!0}).exec(o?IN.toPosixSlashes(e):e);if(n)return n.slice(1).map(u=>u===void 0?"":u)};Ii.makeRe=(...t)=>Xu.makeRe(...t);Ii.scan=(...t)=>Xu.scan(...t);Ii.parse=(t,e)=>{let r=[];for(let o of[].concat(t||[]))for(let a of y$(String(o),e))r.push(Xu.parse(a,e));return r};Ii.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:y$(t,e)};Ii.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return Ii.braces(t,{...e,expand:!0})};E$.exports=Ii});var I$=_((LQt,C$)=>{"use strict";C$.exports=({onlyFirst:t=!1}={})=>{let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[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 hP=_((NQt,w$)=>{"use strict";var j7e=I$();w$.exports=t=>typeof t=="string"?t.replace(j7e(),""):t});var v$=_((OQt,B$)=>{function G7e(){this.__data__=[],this.size=0}B$.exports=G7e});var Um=_((MQt,D$)=>{function W7e(t,e){return t===e||t!==t&&e!==e}D$.exports=W7e});var Jw=_((UQt,S$)=>{var Y7e=Um();function V7e(t,e){for(var r=t.length;r--;)if(Y7e(t[r][0],e))return r;return-1}S$.exports=V7e});var x$=_((_Qt,P$)=>{var K7e=Jw(),J7e=Array.prototype,z7e=J7e.splice;function X7e(t){var e=this.__data__,r=K7e(e,t);if(r<0)return!1;var o=e.length-1;return r==o?e.pop():z7e.call(e,r,1),--this.size,!0}P$.exports=X7e});var k$=_((HQt,b$)=>{var Z7e=Jw();function $7e(t){var e=this.__data__,r=Z7e(e,t);return r<0?void 0:e[r][1]}b$.exports=$7e});var F$=_((qQt,Q$)=>{var eWe=Jw();function tWe(t){return eWe(this.__data__,t)>-1}Q$.exports=tWe});var T$=_((jQt,R$)=>{var rWe=Jw();function nWe(t,e){var r=this.__data__,o=rWe(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}R$.exports=nWe});var zw=_((GQt,L$)=>{var iWe=v$(),sWe=x$(),oWe=k$(),aWe=F$(),lWe=T$();function _m(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var cWe=zw();function uWe(){this.__data__=new cWe,this.size=0}N$.exports=uWe});var U$=_((YQt,M$)=>{function AWe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}M$.exports=AWe});var H$=_((VQt,_$)=>{function fWe(t){return this.__data__.get(t)}_$.exports=fWe});var j$=_((KQt,q$)=>{function pWe(t){return this.__data__.has(t)}q$.exports=pWe});var wN=_((JQt,G$)=>{var hWe=typeof global=="object"&&global&&global.Object===Object&&global;G$.exports=hWe});var ql=_((zQt,W$)=>{var gWe=wN(),dWe=typeof self=="object"&&self&&self.Object===Object&&self,mWe=gWe||dWe||Function("return this")();W$.exports=mWe});var dg=_((XQt,Y$)=>{var yWe=ql(),EWe=yWe.Symbol;Y$.exports=EWe});var z$=_((ZQt,J$)=>{var V$=dg(),K$=Object.prototype,CWe=K$.hasOwnProperty,IWe=K$.toString,Xw=V$?V$.toStringTag:void 0;function wWe(t){var e=CWe.call(t,Xw),r=t[Xw];try{t[Xw]=void 0;var o=!0}catch{}var a=IWe.call(t);return o&&(e?t[Xw]=r:delete t[Xw]),a}J$.exports=wWe});var Z$=_(($Qt,X$)=>{var BWe=Object.prototype,vWe=BWe.toString;function DWe(t){return vWe.call(t)}X$.exports=DWe});var mg=_((eFt,tee)=>{var $$=dg(),SWe=z$(),PWe=Z$(),xWe="[object Null]",bWe="[object Undefined]",eee=$$?$$.toStringTag:void 0;function kWe(t){return t==null?t===void 0?bWe:xWe:eee&&eee in Object(t)?SWe(t):PWe(t)}tee.exports=kWe});var cl=_((tFt,ree)=>{function QWe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}ree.exports=QWe});var gP=_((rFt,nee)=>{var FWe=mg(),RWe=cl(),TWe="[object AsyncFunction]",LWe="[object Function]",NWe="[object GeneratorFunction]",OWe="[object Proxy]";function MWe(t){if(!RWe(t))return!1;var e=FWe(t);return e==LWe||e==NWe||e==TWe||e==OWe}nee.exports=MWe});var see=_((nFt,iee)=>{var UWe=ql(),_We=UWe["__core-js_shared__"];iee.exports=_We});var lee=_((iFt,aee)=>{var BN=see(),oee=function(){var t=/[^.]+$/.exec(BN&&BN.keys&&BN.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function HWe(t){return!!oee&&oee in t}aee.exports=HWe});var vN=_((sFt,cee)=>{var qWe=Function.prototype,jWe=qWe.toString;function GWe(t){if(t!=null){try{return jWe.call(t)}catch{}try{return t+""}catch{}}return""}cee.exports=GWe});var Aee=_((oFt,uee)=>{var WWe=gP(),YWe=lee(),VWe=cl(),KWe=vN(),JWe=/[\\^$.*+?()[\]{}|]/g,zWe=/^\[object .+?Constructor\]$/,XWe=Function.prototype,ZWe=Object.prototype,$We=XWe.toString,eYe=ZWe.hasOwnProperty,tYe=RegExp("^"+$We.call(eYe).replace(JWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function rYe(t){if(!VWe(t)||YWe(t))return!1;var e=WWe(t)?tYe:zWe;return e.test(KWe(t))}uee.exports=rYe});var pee=_((aFt,fee)=>{function nYe(t,e){return t?.[e]}fee.exports=nYe});var $p=_((lFt,hee)=>{var iYe=Aee(),sYe=pee();function oYe(t,e){var r=sYe(t,e);return iYe(r)?r:void 0}hee.exports=oYe});var dP=_((cFt,gee)=>{var aYe=$p(),lYe=ql(),cYe=aYe(lYe,"Map");gee.exports=cYe});var Zw=_((uFt,dee)=>{var uYe=$p(),AYe=uYe(Object,"create");dee.exports=AYe});var Eee=_((AFt,yee)=>{var mee=Zw();function fYe(){this.__data__=mee?mee(null):{},this.size=0}yee.exports=fYe});var Iee=_((fFt,Cee)=>{function pYe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}Cee.exports=pYe});var Bee=_((pFt,wee)=>{var hYe=Zw(),gYe="__lodash_hash_undefined__",dYe=Object.prototype,mYe=dYe.hasOwnProperty;function yYe(t){var e=this.__data__;if(hYe){var r=e[t];return r===gYe?void 0:r}return mYe.call(e,t)?e[t]:void 0}wee.exports=yYe});var Dee=_((hFt,vee)=>{var EYe=Zw(),CYe=Object.prototype,IYe=CYe.hasOwnProperty;function wYe(t){var e=this.__data__;return EYe?e[t]!==void 0:IYe.call(e,t)}vee.exports=wYe});var Pee=_((gFt,See)=>{var BYe=Zw(),vYe="__lodash_hash_undefined__";function DYe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=BYe&&e===void 0?vYe:e,this}See.exports=DYe});var bee=_((dFt,xee)=>{var SYe=Eee(),PYe=Iee(),xYe=Bee(),bYe=Dee(),kYe=Pee();function Hm(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var kee=bee(),QYe=zw(),FYe=dP();function RYe(){this.size=0,this.__data__={hash:new kee,map:new(FYe||QYe),string:new kee}}Qee.exports=RYe});var Tee=_((yFt,Ree)=>{function TYe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}Ree.exports=TYe});var $w=_((EFt,Lee)=>{var LYe=Tee();function NYe(t,e){var r=t.__data__;return LYe(e)?r[typeof e=="string"?"string":"hash"]:r.map}Lee.exports=NYe});var Oee=_((CFt,Nee)=>{var OYe=$w();function MYe(t){var e=OYe(this,t).delete(t);return this.size-=e?1:0,e}Nee.exports=MYe});var Uee=_((IFt,Mee)=>{var UYe=$w();function _Ye(t){return UYe(this,t).get(t)}Mee.exports=_Ye});var Hee=_((wFt,_ee)=>{var HYe=$w();function qYe(t){return HYe(this,t).has(t)}_ee.exports=qYe});var jee=_((BFt,qee)=>{var jYe=$w();function GYe(t,e){var r=jYe(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}qee.exports=GYe});var mP=_((vFt,Gee)=>{var WYe=Fee(),YYe=Oee(),VYe=Uee(),KYe=Hee(),JYe=jee();function qm(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var zYe=zw(),XYe=dP(),ZYe=mP(),$Ye=200;function eVe(t,e){var r=this.__data__;if(r instanceof zYe){var o=r.__data__;if(!XYe||o.length<$Ye-1)return o.push([t,e]),this.size=++r.size,this;r=this.__data__=new ZYe(o)}return r.set(t,e),this.size=r.size,this}Wee.exports=eVe});var yP=_((SFt,Vee)=>{var tVe=zw(),rVe=O$(),nVe=U$(),iVe=H$(),sVe=j$(),oVe=Yee();function jm(t){var e=this.__data__=new tVe(t);this.size=e.size}jm.prototype.clear=rVe;jm.prototype.delete=nVe;jm.prototype.get=iVe;jm.prototype.has=sVe;jm.prototype.set=oVe;Vee.exports=jm});var Jee=_((PFt,Kee)=>{var aVe="__lodash_hash_undefined__";function lVe(t){return this.__data__.set(t,aVe),this}Kee.exports=lVe});var Xee=_((xFt,zee)=>{function cVe(t){return this.__data__.has(t)}zee.exports=cVe});var $ee=_((bFt,Zee)=>{var uVe=mP(),AVe=Jee(),fVe=Xee();function EP(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new uVe;++e{function pVe(t,e){for(var r=-1,o=t==null?0:t.length;++r{function hVe(t,e){return t.has(e)}rte.exports=hVe});var DN=_((FFt,ite)=>{var gVe=$ee(),dVe=tte(),mVe=nte(),yVe=1,EVe=2;function CVe(t,e,r,o,a,n){var u=r&yVe,A=t.length,p=e.length;if(A!=p&&!(u&&p>A))return!1;var h=n.get(t),E=n.get(e);if(h&&E)return h==e&&E==t;var w=-1,D=!0,b=r&EVe?new gVe:void 0;for(n.set(t,e),n.set(e,t);++w{var IVe=ql(),wVe=IVe.Uint8Array;ste.exports=wVe});var ate=_((TFt,ote)=>{function BVe(t){var e=-1,r=Array(t.size);return t.forEach(function(o,a){r[++e]=[a,o]}),r}ote.exports=BVe});var cte=_((LFt,lte)=>{function vVe(t){var e=-1,r=Array(t.size);return t.forEach(function(o){r[++e]=o}),r}lte.exports=vVe});var hte=_((NFt,pte)=>{var ute=dg(),Ate=SN(),DVe=Um(),SVe=DN(),PVe=ate(),xVe=cte(),bVe=1,kVe=2,QVe="[object Boolean]",FVe="[object Date]",RVe="[object Error]",TVe="[object Map]",LVe="[object Number]",NVe="[object RegExp]",OVe="[object Set]",MVe="[object String]",UVe="[object Symbol]",_Ve="[object ArrayBuffer]",HVe="[object DataView]",fte=ute?ute.prototype:void 0,PN=fte?fte.valueOf:void 0;function qVe(t,e,r,o,a,n,u){switch(r){case HVe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case _Ve:return!(t.byteLength!=e.byteLength||!n(new Ate(t),new Ate(e)));case QVe:case FVe:case LVe:return DVe(+t,+e);case RVe:return t.name==e.name&&t.message==e.message;case NVe:case MVe:return t==e+"";case TVe:var A=PVe;case OVe:var p=o&bVe;if(A||(A=xVe),t.size!=e.size&&!p)return!1;var h=u.get(t);if(h)return h==e;o|=kVe,u.set(t,e);var E=SVe(A(t),A(e),o,a,n,u);return u.delete(t),E;case UVe:if(PN)return PN.call(t)==PN.call(e)}return!1}pte.exports=qVe});var CP=_((OFt,gte)=>{function jVe(t,e){for(var r=-1,o=e.length,a=t.length;++r{var GVe=Array.isArray;dte.exports=GVe});var xN=_((UFt,mte)=>{var WVe=CP(),YVe=jl();function VVe(t,e,r){var o=e(t);return YVe(t)?o:WVe(o,r(t))}mte.exports=VVe});var Ete=_((_Ft,yte)=>{function KVe(t,e){for(var r=-1,o=t==null?0:t.length,a=0,n=[];++r{function JVe(){return[]}Cte.exports=JVe});var IP=_((qFt,wte)=>{var zVe=Ete(),XVe=bN(),ZVe=Object.prototype,$Ve=ZVe.propertyIsEnumerable,Ite=Object.getOwnPropertySymbols,eKe=Ite?function(t){return t==null?[]:(t=Object(t),zVe(Ite(t),function(e){return $Ve.call(t,e)}))}:XVe;wte.exports=eKe});var vte=_((jFt,Bte)=>{function tKe(t,e){for(var r=-1,o=Array(t);++r{function rKe(t){return t!=null&&typeof t=="object"}Dte.exports=rKe});var Pte=_((WFt,Ste)=>{var nKe=mg(),iKe=Zu(),sKe="[object Arguments]";function oKe(t){return iKe(t)&&nKe(t)==sKe}Ste.exports=oKe});var e1=_((YFt,kte)=>{var xte=Pte(),aKe=Zu(),bte=Object.prototype,lKe=bte.hasOwnProperty,cKe=bte.propertyIsEnumerable,uKe=xte(function(){return arguments}())?xte:function(t){return aKe(t)&&lKe.call(t,"callee")&&!cKe.call(t,"callee")};kte.exports=uKe});var Fte=_((VFt,Qte)=>{function AKe(){return!1}Qte.exports=AKe});var r1=_((t1,Gm)=>{var fKe=ql(),pKe=Fte(),Lte=typeof t1=="object"&&t1&&!t1.nodeType&&t1,Rte=Lte&&typeof Gm=="object"&&Gm&&!Gm.nodeType&&Gm,hKe=Rte&&Rte.exports===Lte,Tte=hKe?fKe.Buffer:void 0,gKe=Tte?Tte.isBuffer:void 0,dKe=gKe||pKe;Gm.exports=dKe});var n1=_((KFt,Nte)=>{var mKe=9007199254740991,yKe=/^(?:0|[1-9]\d*)$/;function EKe(t,e){var r=typeof t;return e=e??mKe,!!e&&(r=="number"||r!="symbol"&&yKe.test(t))&&t>-1&&t%1==0&&t{var CKe=9007199254740991;function IKe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=CKe}Ote.exports=IKe});var Ute=_((zFt,Mte)=>{var wKe=mg(),BKe=wP(),vKe=Zu(),DKe="[object Arguments]",SKe="[object Array]",PKe="[object Boolean]",xKe="[object Date]",bKe="[object Error]",kKe="[object Function]",QKe="[object Map]",FKe="[object Number]",RKe="[object Object]",TKe="[object RegExp]",LKe="[object Set]",NKe="[object String]",OKe="[object WeakMap]",MKe="[object ArrayBuffer]",UKe="[object DataView]",_Ke="[object Float32Array]",HKe="[object Float64Array]",qKe="[object Int8Array]",jKe="[object Int16Array]",GKe="[object Int32Array]",WKe="[object Uint8Array]",YKe="[object Uint8ClampedArray]",VKe="[object Uint16Array]",KKe="[object Uint32Array]",di={};di[_Ke]=di[HKe]=di[qKe]=di[jKe]=di[GKe]=di[WKe]=di[YKe]=di[VKe]=di[KKe]=!0;di[DKe]=di[SKe]=di[MKe]=di[PKe]=di[UKe]=di[xKe]=di[bKe]=di[kKe]=di[QKe]=di[FKe]=di[RKe]=di[TKe]=di[LKe]=di[NKe]=di[OKe]=!1;function JKe(t){return vKe(t)&&BKe(t.length)&&!!di[wKe(t)]}Mte.exports=JKe});var BP=_((XFt,_te)=>{function zKe(t){return function(e){return t(e)}}_te.exports=zKe});var vP=_((i1,Wm)=>{var XKe=wN(),Hte=typeof i1=="object"&&i1&&!i1.nodeType&&i1,s1=Hte&&typeof Wm=="object"&&Wm&&!Wm.nodeType&&Wm,ZKe=s1&&s1.exports===Hte,kN=ZKe&&XKe.process,$Ke=function(){try{var t=s1&&s1.require&&s1.require("util").types;return t||kN&&kN.binding&&kN.binding("util")}catch{}}();Wm.exports=$Ke});var DP=_((ZFt,Gte)=>{var eJe=Ute(),tJe=BP(),qte=vP(),jte=qte&&qte.isTypedArray,rJe=jte?tJe(jte):eJe;Gte.exports=rJe});var QN=_(($Ft,Wte)=>{var nJe=vte(),iJe=e1(),sJe=jl(),oJe=r1(),aJe=n1(),lJe=DP(),cJe=Object.prototype,uJe=cJe.hasOwnProperty;function AJe(t,e){var r=sJe(t),o=!r&&iJe(t),a=!r&&!o&&oJe(t),n=!r&&!o&&!a&&lJe(t),u=r||o||a||n,A=u?nJe(t.length,String):[],p=A.length;for(var h in t)(e||uJe.call(t,h))&&!(u&&(h=="length"||a&&(h=="offset"||h=="parent")||n&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||aJe(h,p)))&&A.push(h);return A}Wte.exports=AJe});var SP=_((eRt,Yte)=>{var fJe=Object.prototype;function pJe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||fJe;return t===r}Yte.exports=pJe});var FN=_((tRt,Vte)=>{function hJe(t,e){return function(r){return t(e(r))}}Vte.exports=hJe});var Jte=_((rRt,Kte)=>{var gJe=FN(),dJe=gJe(Object.keys,Object);Kte.exports=dJe});var Xte=_((nRt,zte)=>{var mJe=SP(),yJe=Jte(),EJe=Object.prototype,CJe=EJe.hasOwnProperty;function IJe(t){if(!mJe(t))return yJe(t);var e=[];for(var r in Object(t))CJe.call(t,r)&&r!="constructor"&&e.push(r);return e}zte.exports=IJe});var o1=_((iRt,Zte)=>{var wJe=gP(),BJe=wP();function vJe(t){return t!=null&&BJe(t.length)&&!wJe(t)}Zte.exports=vJe});var PP=_((sRt,$te)=>{var DJe=QN(),SJe=Xte(),PJe=o1();function xJe(t){return PJe(t)?DJe(t):SJe(t)}$te.exports=xJe});var RN=_((oRt,ere)=>{var bJe=xN(),kJe=IP(),QJe=PP();function FJe(t){return bJe(t,QJe,kJe)}ere.exports=FJe});var nre=_((aRt,rre)=>{var tre=RN(),RJe=1,TJe=Object.prototype,LJe=TJe.hasOwnProperty;function NJe(t,e,r,o,a,n){var u=r&RJe,A=tre(t),p=A.length,h=tre(e),E=h.length;if(p!=E&&!u)return!1;for(var w=p;w--;){var D=A[w];if(!(u?D in e:LJe.call(e,D)))return!1}var b=n.get(t),C=n.get(e);if(b&&C)return b==e&&C==t;var T=!0;n.set(t,e),n.set(e,t);for(var N=u;++w{var OJe=$p(),MJe=ql(),UJe=OJe(MJe,"DataView");ire.exports=UJe});var are=_((cRt,ore)=>{var _Je=$p(),HJe=ql(),qJe=_Je(HJe,"Promise");ore.exports=qJe});var cre=_((uRt,lre)=>{var jJe=$p(),GJe=ql(),WJe=jJe(GJe,"Set");lre.exports=WJe});var Are=_((ARt,ure)=>{var YJe=$p(),VJe=ql(),KJe=YJe(VJe,"WeakMap");ure.exports=KJe});var a1=_((fRt,yre)=>{var TN=sre(),LN=dP(),NN=are(),ON=cre(),MN=Are(),mre=mg(),Ym=vN(),fre="[object Map]",JJe="[object Object]",pre="[object Promise]",hre="[object Set]",gre="[object WeakMap]",dre="[object DataView]",zJe=Ym(TN),XJe=Ym(LN),ZJe=Ym(NN),$Je=Ym(ON),eze=Ym(MN),yg=mre;(TN&&yg(new TN(new ArrayBuffer(1)))!=dre||LN&&yg(new LN)!=fre||NN&&yg(NN.resolve())!=pre||ON&&yg(new ON)!=hre||MN&&yg(new MN)!=gre)&&(yg=function(t){var e=mre(t),r=e==JJe?t.constructor:void 0,o=r?Ym(r):"";if(o)switch(o){case zJe:return dre;case XJe:return fre;case ZJe:return pre;case $Je:return hre;case eze:return gre}return e});yre.exports=yg});var Sre=_((pRt,Dre)=>{var UN=yP(),tze=DN(),rze=hte(),nze=nre(),Ere=a1(),Cre=jl(),Ire=r1(),ize=DP(),sze=1,wre="[object Arguments]",Bre="[object Array]",xP="[object Object]",oze=Object.prototype,vre=oze.hasOwnProperty;function aze(t,e,r,o,a,n){var u=Cre(t),A=Cre(e),p=u?Bre:Ere(t),h=A?Bre:Ere(e);p=p==wre?xP:p,h=h==wre?xP:h;var E=p==xP,w=h==xP,D=p==h;if(D&&Ire(t)){if(!Ire(e))return!1;u=!0,E=!1}if(D&&!E)return n||(n=new UN),u||ize(t)?tze(t,e,r,o,a,n):rze(t,e,p,r,o,a,n);if(!(r&sze)){var b=E&&vre.call(t,"__wrapped__"),C=w&&vre.call(e,"__wrapped__");if(b||C){var T=b?t.value():t,N=C?e.value():e;return n||(n=new UN),a(T,N,r,o,n)}}return D?(n||(n=new UN),nze(t,e,r,o,a,n)):!1}Dre.exports=aze});var kre=_((hRt,bre)=>{var lze=Sre(),Pre=Zu();function xre(t,e,r,o,a){return t===e?!0:t==null||e==null||!Pre(t)&&!Pre(e)?t!==t&&e!==e:lze(t,e,r,o,xre,a)}bre.exports=xre});var Fre=_((gRt,Qre)=>{var cze=kre();function uze(t,e){return cze(t,e)}Qre.exports=uze});var _N=_((dRt,Rre)=>{var Aze=$p(),fze=function(){try{var t=Aze(Object,"defineProperty");return t({},"",{}),t}catch{}}();Rre.exports=fze});var bP=_((mRt,Lre)=>{var Tre=_N();function pze(t,e,r){e=="__proto__"&&Tre?Tre(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}Lre.exports=pze});var HN=_((yRt,Nre)=>{var hze=bP(),gze=Um();function dze(t,e,r){(r!==void 0&&!gze(t[e],r)||r===void 0&&!(e in t))&&hze(t,e,r)}Nre.exports=dze});var Mre=_((ERt,Ore)=>{function mze(t){return function(e,r,o){for(var a=-1,n=Object(e),u=o(e),A=u.length;A--;){var p=u[t?A:++a];if(r(n[p],p,n)===!1)break}return e}}Ore.exports=mze});var _re=_((CRt,Ure)=>{var yze=Mre(),Eze=yze();Ure.exports=Eze});var qN=_((l1,Vm)=>{var Cze=ql(),Gre=typeof l1=="object"&&l1&&!l1.nodeType&&l1,Hre=Gre&&typeof Vm=="object"&&Vm&&!Vm.nodeType&&Vm,Ize=Hre&&Hre.exports===Gre,qre=Ize?Cze.Buffer:void 0,jre=qre?qre.allocUnsafe:void 0;function wze(t,e){if(e)return t.slice();var r=t.length,o=jre?jre(r):new t.constructor(r);return t.copy(o),o}Vm.exports=wze});var kP=_((IRt,Yre)=>{var Wre=SN();function Bze(t){var e=new t.constructor(t.byteLength);return new Wre(e).set(new Wre(t)),e}Yre.exports=Bze});var jN=_((wRt,Vre)=>{var vze=kP();function Dze(t,e){var r=e?vze(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}Vre.exports=Dze});var QP=_((BRt,Kre)=>{function Sze(t,e){var r=-1,o=t.length;for(e||(e=Array(o));++r{var Pze=cl(),Jre=Object.create,xze=function(){function t(){}return function(e){if(!Pze(e))return{};if(Jre)return Jre(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();zre.exports=xze});var FP=_((DRt,Zre)=>{var bze=FN(),kze=bze(Object.getPrototypeOf,Object);Zre.exports=kze});var GN=_((SRt,$re)=>{var Qze=Xre(),Fze=FP(),Rze=SP();function Tze(t){return typeof t.constructor=="function"&&!Rze(t)?Qze(Fze(t)):{}}$re.exports=Tze});var tne=_((PRt,ene)=>{var Lze=o1(),Nze=Zu();function Oze(t){return Nze(t)&&Lze(t)}ene.exports=Oze});var WN=_((xRt,nne)=>{var Mze=mg(),Uze=FP(),_ze=Zu(),Hze="[object Object]",qze=Function.prototype,jze=Object.prototype,rne=qze.toString,Gze=jze.hasOwnProperty,Wze=rne.call(Object);function Yze(t){if(!_ze(t)||Mze(t)!=Hze)return!1;var e=Uze(t);if(e===null)return!0;var r=Gze.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&rne.call(r)==Wze}nne.exports=Yze});var YN=_((bRt,ine)=>{function Vze(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}ine.exports=Vze});var RP=_((kRt,sne)=>{var Kze=bP(),Jze=Um(),zze=Object.prototype,Xze=zze.hasOwnProperty;function Zze(t,e,r){var o=t[e];(!(Xze.call(t,e)&&Jze(o,r))||r===void 0&&!(e in t))&&Kze(t,e,r)}sne.exports=Zze});var Eg=_((QRt,one)=>{var $ze=RP(),eXe=bP();function tXe(t,e,r,o){var a=!r;r||(r={});for(var n=-1,u=e.length;++n{function rXe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}ane.exports=rXe});var une=_((RRt,cne)=>{var nXe=cl(),iXe=SP(),sXe=lne(),oXe=Object.prototype,aXe=oXe.hasOwnProperty;function lXe(t){if(!nXe(t))return sXe(t);var e=iXe(t),r=[];for(var o in t)o=="constructor"&&(e||!aXe.call(t,o))||r.push(o);return r}cne.exports=lXe});var Km=_((TRt,Ane)=>{var cXe=QN(),uXe=une(),AXe=o1();function fXe(t){return AXe(t)?cXe(t,!0):uXe(t)}Ane.exports=fXe});var pne=_((LRt,fne)=>{var pXe=Eg(),hXe=Km();function gXe(t){return pXe(t,hXe(t))}fne.exports=gXe});var Ene=_((NRt,yne)=>{var hne=HN(),dXe=qN(),mXe=jN(),yXe=QP(),EXe=GN(),gne=e1(),dne=jl(),CXe=tne(),IXe=r1(),wXe=gP(),BXe=cl(),vXe=WN(),DXe=DP(),mne=YN(),SXe=pne();function PXe(t,e,r,o,a,n,u){var A=mne(t,r),p=mne(e,r),h=u.get(p);if(h){hne(t,r,h);return}var E=n?n(A,p,r+"",t,e,u):void 0,w=E===void 0;if(w){var D=dne(p),b=!D&&IXe(p),C=!D&&!b&&DXe(p);E=p,D||b||C?dne(A)?E=A:CXe(A)?E=yXe(A):b?(w=!1,E=dXe(p,!0)):C?(w=!1,E=mXe(p,!0)):E=[]:vXe(p)||gne(p)?(E=A,gne(A)?E=SXe(A):(!BXe(A)||wXe(A))&&(E=EXe(p))):w=!1}w&&(u.set(p,E),a(E,p,o,n,u),u.delete(p)),hne(t,r,E)}yne.exports=PXe});var wne=_((ORt,Ine)=>{var xXe=yP(),bXe=HN(),kXe=_re(),QXe=Ene(),FXe=cl(),RXe=Km(),TXe=YN();function Cne(t,e,r,o,a){t!==e&&kXe(e,function(n,u){if(a||(a=new xXe),FXe(n))QXe(t,e,u,r,Cne,o,a);else{var A=o?o(TXe(t,u),n,u+"",t,e,a):void 0;A===void 0&&(A=n),bXe(t,u,A)}},RXe)}Ine.exports=Cne});var VN=_((MRt,Bne)=>{function LXe(t){return t}Bne.exports=LXe});var Dne=_((URt,vne)=>{function NXe(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)}vne.exports=NXe});var KN=_((_Rt,Pne)=>{var OXe=Dne(),Sne=Math.max;function MXe(t,e,r){return e=Sne(e===void 0?t.length-1:e,0),function(){for(var o=arguments,a=-1,n=Sne(o.length-e,0),u=Array(n);++a{function UXe(t){return function(){return t}}xne.exports=UXe});var Fne=_((qRt,Qne)=>{var _Xe=bne(),kne=_N(),HXe=VN(),qXe=kne?function(t,e){return kne(t,"toString",{configurable:!0,enumerable:!1,value:_Xe(e),writable:!0})}:HXe;Qne.exports=qXe});var Tne=_((jRt,Rne)=>{var jXe=800,GXe=16,WXe=Date.now;function YXe(t){var e=0,r=0;return function(){var o=WXe(),a=GXe-(o-r);if(r=o,a>0){if(++e>=jXe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}Rne.exports=YXe});var JN=_((GRt,Lne)=>{var VXe=Fne(),KXe=Tne(),JXe=KXe(VXe);Lne.exports=JXe});var One=_((WRt,Nne)=>{var zXe=VN(),XXe=KN(),ZXe=JN();function $Xe(t,e){return ZXe(XXe(t,e,zXe),t+"")}Nne.exports=$Xe});var Une=_((YRt,Mne)=>{var eZe=Um(),tZe=o1(),rZe=n1(),nZe=cl();function iZe(t,e,r){if(!nZe(r))return!1;var o=typeof e;return(o=="number"?tZe(r)&&rZe(e,r.length):o=="string"&&e in r)?eZe(r[e],t):!1}Mne.exports=iZe});var Hne=_((VRt,_ne)=>{var sZe=One(),oZe=Une();function aZe(t){return sZe(function(e,r){var o=-1,a=r.length,n=a>1?r[a-1]:void 0,u=a>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(a--,n):void 0,u&&oZe(r[0],r[1],u)&&(n=a<3?void 0:n,a=1),e=Object(e);++o{var lZe=wne(),cZe=Hne(),uZe=cZe(function(t,e,r,o){lZe(t,e,r,o)});qne.exports=uZe});var qe={};Vt(qe,{AsyncActions:()=>ZN,BufferStream:()=>XN,CachingStrategy:()=>tie,DefaultStream:()=>$N,allSettledSafe:()=>Wc,assertNever:()=>tO,bufferStream:()=>Xm,buildIgnorePattern:()=>mZe,convertMapsToIndexableObjects:()=>LP,dynamicRequire:()=>vf,escapeRegExp:()=>fZe,getArrayWithDefault:()=>u1,getFactoryWithDefault:()=>Al,getMapWithDefault:()=>A1,getSetWithDefault:()=>Jm,groupBy:()=>CZe,isIndexableObject:()=>zN,isPathLike:()=>yZe,isTaggedYarnVersion:()=>AZe,makeDeferred:()=>Zne,mapAndFilter:()=>ul,mapAndFind:()=>eh,mergeIntoTarget:()=>nie,overrideType:()=>pZe,parseBoolean:()=>f1,parseInt:()=>Zm,parseOptionalBoolean:()=>rie,plural:()=>TP,prettifyAsyncErrors:()=>zm,prettifySyncErrors:()=>rO,releaseAfterUseAsync:()=>gZe,replaceEnvVariables:()=>NP,sortMap:()=>Ss,toMerged:()=>EZe,tryParseOptionalBoolean:()=>nO,validateEnum:()=>hZe});function AZe(t){return!!(Jne.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function TP(t,{one:e,more:r,zero:o=r}){return t===0?o:t===1?e:r}function fZe(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function pZe(t){}function tO(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function hZe(t,e){let r=Object.values(t);if(!r.includes(e))throw new it(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(o=>JSON.stringify(o)).join(", ")})`);return e}function ul(t,e){let r=[];for(let o of t){let a=e(o);a!==zne&&r.push(a)}return r}function eh(t,e){for(let r of t){let o=e(r);if(o!==Xne)return o}}function zN(t){return typeof t=="object"&&t!==null}async function Wc(t){let e=await Promise.allSettled(t),r=[];for(let o of e){if(o.status==="rejected")throw o.reason;r.push(o.value)}return r}function LP(t){if(t instanceof Map&&(t=Object.fromEntries(t)),zN(t))for(let e of Object.keys(t)){let r=t[e];zN(r)&&(t[e]=LP(r))}return t}function Al(t,e,r){let o=t.get(e);return typeof o>"u"&&t.set(e,o=r()),o}function u1(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function Jm(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function A1(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function gZe(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function zm(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function rO(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function Xm(t){return await new Promise((e,r)=>{let o=[];t.on("error",a=>{r(a)}),t.on("data",a=>{o.push(a)}),t.on("end",()=>{e(Buffer.concat(o))})})}function Zne(){let t,e;return{promise:new Promise((o,a)=>{t=o,e=a}),resolve:t,reject:e}}function $ne(t){return c1(Ae.fromPortablePath(t))}function eie(path){let physicalPath=Ae.fromPortablePath(path),currentCacheEntry=c1.cache[physicalPath];delete c1.cache[physicalPath];let result;try{result=$ne(physicalPath);let freshCacheEntry=c1.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{c1.cache[physicalPath]=currentCacheEntry}return result}function dZe(t){let e=Gne.get(t),r=ae.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let o=eie(t);return Gne.set(t,{mtime:r.mtimeMs,instance:o}),o}function vf(t,{cachingStrategy:e=2}={}){switch(e){case 0:return eie(t);case 1:return dZe(t);case 2:return $ne(t);default:throw new Error("Unsupported caching strategy")}}function Ss(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function mZe(t){return t.length===0?null:t.map(e=>`(${Vne.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function NP(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...o)=>{let{variableName:a,colon:n,fallback:u}=o[o.length-1],A=Object.hasOwn(e,a),p=e[a];if(p||A&&!n)return p;if(u!=null)return u;throw new it(`Environment variable not found (${a})`)})}function f1(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 rie(t){return typeof t>"u"?t:f1(t)}function nO(t){try{return rie(t)}catch{return null}}function yZe(t){return!!(Ae.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function nie(t,...e){let r=u=>({value:u}),o=r(t),a=e.map(u=>r(u)),{value:n}=(0,Yne.default)(o,...a,(u,A)=>{if(Array.isArray(u)&&Array.isArray(A)){for(let p of A)u.find(h=>(0,Wne.default)(h,p))||u.push(p);return u}});return n}function EZe(...t){return nie({},...t)}function CZe(t,e){let r=Object.create(null);for(let o of t){let a=o[e];r[a]??=[],r[a].push(o)}return r}function Zm(t){return typeof t=="string"?Number.parseInt(t,10):t}var Wne,Yne,Vne,Kne,Jne,eO,zne,Xne,XN,ZN,$N,c1,Gne,tie,Gl=It(()=>{St();Gt();Wne=et(Fre()),Yne=et(jne()),Vne=et(Xo()),Kne=et(lg()),Jne=et(ni()),eO=ve("stream");zne=Symbol();ul.skip=zne;Xne=Symbol();eh.skip=Xne;XN=class extends eO.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(r),a(null,null)}_flush(r){r(null,Buffer.concat(this.chunks))}};ZN=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,Kne.default)(e)}set(e,r){let o=this.deferred.get(e);typeof o>"u"&&this.deferred.set(e,o=Zne());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&o.resolve()},n=>{this.promises.get(e)===a&&o.reject(n)}),o.promise}reduce(e,r){let o=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(o))}async wait(){await Promise.all(this.promises.values())}},$N=class extends eO.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,a(null,r)}_flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}},c1=eval("require");Gne=new Map;tie=(o=>(o[o.NoCache=0]="NoCache",o[o.FsTime=1]="FsTime",o[o.Node=2]="Node",o))(tie||{})});var $m,iO,sO,iie=It(()=>{$m=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))($m||{}),iO=(o=>(o.Dependency="Dependency",o.PeerDependency="PeerDependency",o.PeerDependencyMeta="PeerDependencyMeta",o))(iO||{}),sO=(o=>(o.Inactive="inactive",o.Redundant="redundant",o.Active="active",o))(sO||{})});var pe={};Vt(pe,{LogLevel:()=>HP,Style:()=>MP,Type:()=>Ct,addLogFilterSupport:()=>g1,applyColor:()=>Gs,applyHyperlink:()=>ty,applyStyle:()=>Cg,json:()=>Ig,jsonOrPretty:()=>BZe,mark:()=>uO,pretty:()=>Ut,prettyField:()=>$u,prettyList:()=>cO,prettyTruncatedLocatorList:()=>_P,stripAnsi:()=>ey.default,supportsColor:()=>UP,supportsHyperlinks:()=>lO,tuple:()=>Yc});function sie(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let o=1024**r;return`${Math.floor(t*100/o)/100} ${e[r-1]}`}function Yc(t,e){return[e,t]}function Cg(t,e,r){return t.get("enableColors")&&r&2&&(e=h1.default.bold(e)),e}function Gs(t,e,r){if(!t.get("enableColors"))return e;let o=IZe.get(r);if(o===null)return e;let a=typeof o>"u"?r:aO.level>=3?o[0]:o[1],n=typeof a=="number"?oO.ansi256(a):a.startsWith("#")?oO.hex(a):oO[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function ty(t,e,r){return t.get("enableHyperlinks")?wZe?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function Ut(t,e,r){if(e===null)return Gs(t,"null",Ct.NULL);if(Object.hasOwn(OP,r))return OP[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Gs(t,e,r)}function cO(t,e,r,{separator:o=", "}={}){return[...e].map(a=>Ut(t,a,r)).join(o)}function Ig(t,e){if(t===null)return null;if(Object.hasOwn(OP,e))return OP[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 BZe(t,e,[r,o]){return t?Ig(r,o):Ut(e,r,o)}function uO(t){return{Check:Gs(t,"\u2713","green"),Cross:Gs(t,"\u2718","red"),Question:Gs(t,"?","cyan")}}function $u(t,{label:e,value:[r,o]}){return`${Ut(t,e,Ct.CODE)}: ${Ut(t,r,o)}`}function _P(t,e,r){let o=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=`${jr(t,h)}, `,w=AO(h).length+2;if(o.length>0&&nh).join("").slice(0,-2);let u="X".repeat(a.length.toString().length),A=`and ${u} more.`,p=a.length;for(;o.length>1&&nh).join(""),A.replace(u,Ut(t,p,Ct.NUMBER))].join("")}function g1(t,{configuration:e}){let r=e.get("logFilters"),o=new Map,a=new Map,n=[];for(let w of r){let D=w.get("level");if(typeof D>"u")continue;let b=w.get("code");typeof b<"u"&&o.set(b,D);let C=w.get("text");typeof C<"u"&&a.set(C,D);let T=w.get("pattern");typeof T<"u"&&n.push([oie.default.matcher(T,{contains:!0}),D])}n.reverse();let u=(w,D,b)=>{if(w===null||w===0)return b;let C=a.size>0||n.length>0?(0,ey.default)(D):D;if(a.size>0){let T=a.get(C);if(typeof T<"u")return T??b}if(n.length>0){for(let[T,N]of n)if(T(C))return N??b}if(o.size>0){let T=o.get(Ju(w));if(typeof T<"u")return T??b}return b},A=t.reportInfo,p=t.reportWarning,h=t.reportError,E=function(w,D,b,C){switch(u(D,b,C)){case"info":A.call(w,D,b);break;case"warning":p.call(w,D??0,b);break;case"error":h.call(w,D??0,b);break}};t.reportInfo=function(...w){return E(this,...w,"info")},t.reportWarning=function(...w){return E(this,...w,"warning")},t.reportError=function(...w){return E(this,...w,"error")}}var h1,p1,oie,ey,aie,Ct,MP,aO,UP,lO,oO,IZe,Co,OP,wZe,HP,Wl=It(()=>{St();h1=et(sN()),p1=et(sg());Gt();oie=et(Xo()),ey=et(hP()),aie=ve("util");GS();Io();Ct={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",INSPECT:"INSPECT",DURATION:"DURATION",SIZE:"SIZE",SIZE_DIFF:"SIZE_DIFF",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING",MARKDOWN:"MARKDOWN",MARKDOWN_INLINE:"MARKDOWN_INLINE"},MP=(e=>(e[e.BOLD=2]="BOLD",e))(MP||{}),aO=p1.default.GITHUB_ACTIONS?{level:2}:h1.default.supportsColor?{level:h1.default.supportsColor.level}:{level:0},UP=aO.level!==0,lO=UP&&!p1.default.GITHUB_ACTIONS&&!p1.default.CIRCLE&&!p1.default.GITLAB,oO=new h1.default.Instance(aO),IZe=new Map([[Ct.NO_HINT,null],[Ct.NULL,["#a853b5",129]],[Ct.SCOPE,["#d75f00",166]],[Ct.NAME,["#d7875f",173]],[Ct.RANGE,["#00afaf",37]],[Ct.REFERENCE,["#87afff",111]],[Ct.NUMBER,["#ffd700",220]],[Ct.PATH,["#d75fd7",170]],[Ct.URL,["#d75fd7",170]],[Ct.ADDED,["#5faf00",70]],[Ct.REMOVED,["#ff3131",160]],[Ct.CODE,["#87afff",111]],[Ct.SIZE,["#ffd700",220]]]),Co=t=>t;OP={[Ct.ID]:Co({pretty:(t,e)=>typeof e=="number"?Gs(t,`${e}`,Ct.NUMBER):Gs(t,e,Ct.CODE),json:t=>t}),[Ct.INSPECT]:Co({pretty:(t,e)=>(0,aie.inspect)(e,{depth:1/0,colors:t.get("enableColors"),compact:!0,breakLength:1/0}),json:t=>t}),[Ct.NUMBER]:Co({pretty:(t,e)=>Gs(t,`${e}`,Ct.NUMBER),json:t=>t}),[Ct.IDENT]:Co({pretty:(t,e)=>Ui(t,e),json:t=>rn(t)}),[Ct.LOCATOR]:Co({pretty:(t,e)=>jr(t,e),json:t=>Qa(t)}),[Ct.DESCRIPTOR]:Co({pretty:(t,e)=>Jn(t,e),json:t=>ka(t)}),[Ct.RESOLUTION]:Co({pretty:(t,{descriptor:e,locator:r})=>d1(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:ka(t),locator:e!==null?Qa(e):null})}),[Ct.DEPENDENT]:Co({pretty:(t,{locator:e,descriptor:r})=>fO(t,e,r),json:({locator:t,descriptor:e})=>({locator:Qa(t),descriptor:ka(e)})}),[Ct.PACKAGE_EXTENSION]:Co({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${Ui(t,e.parentDescriptor)} \u27A4 ${Gs(t,"dependencies",Ct.CODE)} \u27A4 ${Ui(t,e.descriptor)}`;case"PeerDependency":return`${Ui(t,e.parentDescriptor)} \u27A4 ${Gs(t,"peerDependencies",Ct.CODE)} \u27A4 ${Ui(t,e.descriptor)}`;case"PeerDependencyMeta":return`${Ui(t,e.parentDescriptor)} \u27A4 ${Gs(t,"peerDependenciesMeta",Ct.CODE)} \u27A4 ${Ui(t,Zo(e.selector))} \u27A4 ${Gs(t,e.key,Ct.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${rn(t.parentDescriptor)} > ${rn(t.descriptor)}`;case"PeerDependency":return`${rn(t.parentDescriptor)} >> ${rn(t.descriptor)}`;case"PeerDependencyMeta":return`${rn(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[Ct.SETTING]:Co({pretty:(t,e)=>(t.get(e),ty(t,Gs(t,e,Ct.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[Ct.DURATION]:Co({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),o=Math.ceil((e-r*60*1e3)/1e3);return o===0?`${r}m`:`${r}m ${o}s`}else{let r=Math.floor(e/1e3),o=e-r*1e3;return o===0?`${r}s`:`${r}s ${o}ms`}},json:t=>t}),[Ct.SIZE]:Co({pretty:(t,e)=>Gs(t,sie(e),Ct.NUMBER),json:t=>t}),[Ct.SIZE_DIFF]:Co({pretty:(t,e)=>{let r=e>=0?"+":"-",o=r==="+"?Ct.REMOVED:Ct.ADDED;return Gs(t,`${r} ${sie(Math.max(Math.abs(e),1))}`,o)},json:t=>t}),[Ct.PATH]:Co({pretty:(t,e)=>Gs(t,Ae.fromPortablePath(e),Ct.PATH),json:t=>Ae.fromPortablePath(t)}),[Ct.MARKDOWN]:Co({pretty:(t,{text:e,format:r,paragraphs:o})=>yo(e,{format:r,paragraphs:o}),json:({text:t})=>t}),[Ct.MARKDOWN_INLINE]:Co({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,o,a)=>Ut(t,o+a+o,Ct.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,o,a)=>Cg(t,a,2)),e),json:t=>t})};wZe=!!process.env.KONSOLE_VERSION;HP=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))(HP||{})});var lie=_(ry=>{"use strict";Object.defineProperty(ry,"__esModule",{value:!0});ry.splitWhen=ry.flatten=void 0;function vZe(t){return t.reduce((e,r)=>[].concat(e,r),[])}ry.flatten=vZe;function DZe(t,e){let r=[[]],o=0;for(let a of t)e(a)?(o++,r[o]=[]):r[o].push(a);return r}ry.splitWhen=DZe});var cie=_(qP=>{"use strict";Object.defineProperty(qP,"__esModule",{value:!0});qP.isEnoentCodeError=void 0;function SZe(t){return t.code==="ENOENT"}qP.isEnoentCodeError=SZe});var uie=_(jP=>{"use strict";Object.defineProperty(jP,"__esModule",{value:!0});jP.createDirentFromStats=void 0;var pO=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 PZe(t,e){return new pO(t,e)}jP.createDirentFromStats=PZe});var hie=_(Ki=>{"use strict";Object.defineProperty(Ki,"__esModule",{value:!0});Ki.convertPosixPathToPattern=Ki.convertWindowsPathToPattern=Ki.convertPathToPattern=Ki.escapePosixPath=Ki.escapeWindowsPath=Ki.escape=Ki.removeLeadingDotSegment=Ki.makeAbsolute=Ki.unixify=void 0;var xZe=ve("os"),bZe=ve("path"),Aie=xZe.platform()==="win32",kZe=2,QZe=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,FZe=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,RZe=/^\\\\([.?])/,TZe=/\\(?![!()+@[\]{}])/g;function LZe(t){return t.replace(/\\/g,"/")}Ki.unixify=LZe;function NZe(t,e){return bZe.resolve(t,e)}Ki.makeAbsolute=NZe;function OZe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(kZe)}return t}Ki.removeLeadingDotSegment=OZe;Ki.escape=Aie?hO:gO;function hO(t){return t.replace(FZe,"\\$2")}Ki.escapeWindowsPath=hO;function gO(t){return t.replace(QZe,"\\$2")}Ki.escapePosixPath=gO;Ki.convertPathToPattern=Aie?fie:pie;function fie(t){return hO(t).replace(RZe,"//$1").replace(TZe,"/")}Ki.convertWindowsPathToPattern=fie;function pie(t){return gO(t)}Ki.convertPosixPathToPattern=pie});var die=_((cTt,gie)=>{gie.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 Eie=_((uTt,yie)=>{var MZe=die(),mie={"{":"}","(":")","[":"]"},UZe=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,o=-2,a=-2,n=-2,u=-2;ee&&(u===-1||u>o||(u=t.indexOf("\\",e),u===-1||u>o)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(u=t.indexOf("\\",e),u===-1||u>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(u=t.indexOf("\\",e),u===-1||u>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(u=t.indexOf("\\",r),u===-1||u>n))))return!0;if(t[e]==="\\"){var A=t[e+1];e+=2;var p=mie[A];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},_Ze=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var HZe=Eie(),qZe=ve("path").posix.dirname,jZe=ve("os").platform()==="win32",dO="/",GZe=/\\/g,WZe=/[\{\[].*[\}\]]$/,YZe=/(^|[^\\])([\{\[]|\([^\)]+$)/,VZe=/\\([\!\*\?\|\[\]\(\)\{\}])/g;Cie.exports=function(e,r){var o=Object.assign({flipBackslashes:!0},r);o.flipBackslashes&&jZe&&e.indexOf(dO)<0&&(e=e.replace(GZe,dO)),WZe.test(e)&&(e+=dO),e+="a";do e=qZe(e);while(HZe(e)||YZe.test(e));return e.replace(VZe,"$1")}});var bie=_(Mr=>{"use strict";Object.defineProperty(Mr,"__esModule",{value:!0});Mr.removeDuplicateSlashes=Mr.matchAny=Mr.convertPatternsToRe=Mr.makeRe=Mr.getPatternParts=Mr.expandBraceExpansion=Mr.expandPatternsWithBraceExpansion=Mr.isAffectDepthOfReadingPattern=Mr.endsWithSlashGlobStar=Mr.hasGlobStar=Mr.getBaseDirectory=Mr.isPatternRelatedToParentDirectory=Mr.getPatternsOutsideCurrentDirectory=Mr.getPatternsInsideCurrentDirectory=Mr.getPositivePatterns=Mr.getNegativePatterns=Mr.isPositivePattern=Mr.isNegativePattern=Mr.convertToNegativePattern=Mr.convertToPositivePattern=Mr.isDynamicPattern=Mr.isStaticPattern=void 0;var KZe=ve("path"),JZe=Iie(),mO=Xo(),wie="**",zZe="\\",XZe=/[*?]|^!/,ZZe=/\[[^[]*]/,$Ze=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,e$e=/[!*+?@]\([^(]*\)/,t$e=/,|\.\./,r$e=/(?!^)\/{2,}/g;function Bie(t,e={}){return!vie(t,e)}Mr.isStaticPattern=Bie;function vie(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(zZe)||XZe.test(t)||ZZe.test(t)||$Ze.test(t)||e.extglob!==!1&&e$e.test(t)||e.braceExpansion!==!1&&n$e(t))}Mr.isDynamicPattern=vie;function n$e(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let o=t.slice(e,r);return t$e.test(o)}function i$e(t){return GP(t)?t.slice(1):t}Mr.convertToPositivePattern=i$e;function s$e(t){return"!"+t}Mr.convertToNegativePattern=s$e;function GP(t){return t.startsWith("!")&&t[1]!=="("}Mr.isNegativePattern=GP;function Die(t){return!GP(t)}Mr.isPositivePattern=Die;function o$e(t){return t.filter(GP)}Mr.getNegativePatterns=o$e;function a$e(t){return t.filter(Die)}Mr.getPositivePatterns=a$e;function l$e(t){return t.filter(e=>!yO(e))}Mr.getPatternsInsideCurrentDirectory=l$e;function c$e(t){return t.filter(yO)}Mr.getPatternsOutsideCurrentDirectory=c$e;function yO(t){return t.startsWith("..")||t.startsWith("./..")}Mr.isPatternRelatedToParentDirectory=yO;function u$e(t){return JZe(t,{flipBackslashes:!1})}Mr.getBaseDirectory=u$e;function A$e(t){return t.includes(wie)}Mr.hasGlobStar=A$e;function Sie(t){return t.endsWith("/"+wie)}Mr.endsWithSlashGlobStar=Sie;function f$e(t){let e=KZe.basename(t);return Sie(t)||Bie(e)}Mr.isAffectDepthOfReadingPattern=f$e;function p$e(t){return t.reduce((e,r)=>e.concat(Pie(r)),[])}Mr.expandPatternsWithBraceExpansion=p$e;function Pie(t){let e=mO.braces(t,{expand:!0,nodupes:!0,keepEscaping:!0});return e.sort((r,o)=>r.length-o.length),e.filter(r=>r!=="")}Mr.expandBraceExpansion=Pie;function h$e(t,e){let{parts:r}=mO.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.length===0&&(r=[t]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}Mr.getPatternParts=h$e;function xie(t,e){return mO.makeRe(t,e)}Mr.makeRe=xie;function g$e(t,e){return t.map(r=>xie(r,e))}Mr.convertPatternsToRe=g$e;function d$e(t,e){return e.some(r=>r.test(t))}Mr.matchAny=d$e;function m$e(t){return t.replace(r$e,"/")}Mr.removeDuplicateSlashes=m$e});var Rie=_((pTt,Fie)=>{"use strict";var y$e=ve("stream"),kie=y$e.PassThrough,E$e=Array.prototype.slice;Fie.exports=C$e;function C$e(){let t=[],e=E$e.call(arguments),r=!1,o=e[e.length-1];o&&!Array.isArray(o)&&o.pipe==null?e.pop():o={};let a=o.end!==!1,n=o.pipeError===!0;o.objectMode==null&&(o.objectMode=!0),o.highWaterMark==null&&(o.highWaterMark=64*1024);let u=kie(o);function A(){for(let E=0,w=arguments.length;E0||(r=!1,p())}function b(C){function T(){C.removeListener("merge2UnpipeEnd",T),C.removeListener("end",T),n&&C.removeListener("error",N),D()}function N(U){u.emit("error",U)}if(C._readableState.endEmitted)return D();C.on("merge2UnpipeEnd",T),C.on("end",T),n&&C.on("error",N),C.pipe(u,{end:!1}),C.resume()}for(let C=0;C{"use strict";Object.defineProperty(WP,"__esModule",{value:!0});WP.merge=void 0;var I$e=Rie();function w$e(t){let e=I$e(t);return t.forEach(r=>{r.once("error",o=>e.emit("error",o))}),e.once("close",()=>Tie(t)),e.once("end",()=>Tie(t)),e}WP.merge=w$e;function Tie(t){t.forEach(e=>e.emit("close"))}});var Nie=_(ny=>{"use strict";Object.defineProperty(ny,"__esModule",{value:!0});ny.isEmpty=ny.isString=void 0;function B$e(t){return typeof t=="string"}ny.isString=B$e;function v$e(t){return t===""}ny.isEmpty=v$e});var Df=_(wo=>{"use strict";Object.defineProperty(wo,"__esModule",{value:!0});wo.string=wo.stream=wo.pattern=wo.path=wo.fs=wo.errno=wo.array=void 0;var D$e=lie();wo.array=D$e;var S$e=cie();wo.errno=S$e;var P$e=uie();wo.fs=P$e;var x$e=hie();wo.path=x$e;var b$e=bie();wo.pattern=b$e;var k$e=Lie();wo.stream=k$e;var Q$e=Nie();wo.string=Q$e});var _ie=_(Bo=>{"use strict";Object.defineProperty(Bo,"__esModule",{value:!0});Bo.convertPatternGroupToTask=Bo.convertPatternGroupsToTasks=Bo.groupPatternsByBaseDirectory=Bo.getNegativePatternsAsPositive=Bo.getPositivePatterns=Bo.convertPatternsToTasks=Bo.generate=void 0;var Vc=Df();function F$e(t,e){let r=Oie(t,e),o=Oie(e.ignore,e),a=Mie(r),n=Uie(r,o),u=a.filter(E=>Vc.pattern.isStaticPattern(E,e)),A=a.filter(E=>Vc.pattern.isDynamicPattern(E,e)),p=EO(u,n,!1),h=EO(A,n,!0);return p.concat(h)}Bo.generate=F$e;function Oie(t,e){let r=t;return e.braceExpansion&&(r=Vc.pattern.expandPatternsWithBraceExpansion(r)),e.baseNameMatch&&(r=r.map(o=>o.includes("/")?o:`**/${o}`)),r.map(o=>Vc.pattern.removeDuplicateSlashes(o))}function EO(t,e,r){let o=[],a=Vc.pattern.getPatternsOutsideCurrentDirectory(t),n=Vc.pattern.getPatternsInsideCurrentDirectory(t),u=CO(a),A=CO(n);return o.push(...IO(u,e,r)),"."in A?o.push(wO(".",n,e,r)):o.push(...IO(A,e,r)),o}Bo.convertPatternsToTasks=EO;function Mie(t){return Vc.pattern.getPositivePatterns(t)}Bo.getPositivePatterns=Mie;function Uie(t,e){return Vc.pattern.getNegativePatterns(t).concat(e).map(Vc.pattern.convertToPositivePattern)}Bo.getNegativePatternsAsPositive=Uie;function CO(t){let e={};return t.reduce((r,o)=>{let a=Vc.pattern.getBaseDirectory(o);return a in r?r[a].push(o):r[a]=[o],r},e)}Bo.groupPatternsByBaseDirectory=CO;function IO(t,e,r){return Object.keys(t).map(o=>wO(o,t[o],e,r))}Bo.convertPatternGroupsToTasks=IO;function wO(t,e,r,o){return{dynamic:o,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Vc.pattern.convertToNegativePattern))}}Bo.convertPatternGroupToTask=wO});var qie=_(YP=>{"use strict";Object.defineProperty(YP,"__esModule",{value:!0});YP.read=void 0;function R$e(t,e,r){e.fs.lstat(t,(o,a)=>{if(o!==null){Hie(r,o);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){BO(r,a);return}e.fs.stat(t,(n,u)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){Hie(r,n);return}BO(r,a);return}e.markSymbolicLink&&(u.isSymbolicLink=()=>!0),BO(r,u)})})}YP.read=R$e;function Hie(t,e){t(e)}function BO(t,e){t(null,e)}});var jie=_(VP=>{"use strict";Object.defineProperty(VP,"__esModule",{value:!0});VP.read=void 0;function T$e(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let o=e.fs.statSync(t);return e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),o}catch(o){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw o}}VP.read=T$e});var Gie=_(th=>{"use strict";Object.defineProperty(th,"__esModule",{value:!0});th.createFileSystemAdapter=th.FILE_SYSTEM_ADAPTER=void 0;var KP=ve("fs");th.FILE_SYSTEM_ADAPTER={lstat:KP.lstat,stat:KP.stat,lstatSync:KP.lstatSync,statSync:KP.statSync};function L$e(t){return t===void 0?th.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},th.FILE_SYSTEM_ADAPTER),t)}th.createFileSystemAdapter=L$e});var Wie=_(DO=>{"use strict";Object.defineProperty(DO,"__esModule",{value:!0});var N$e=Gie(),vO=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=N$e.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??r}};DO.default=vO});var wg=_(rh=>{"use strict";Object.defineProperty(rh,"__esModule",{value:!0});rh.statSync=rh.stat=rh.Settings=void 0;var Yie=qie(),O$e=jie(),SO=Wie();rh.Settings=SO.default;function M$e(t,e,r){if(typeof e=="function"){Yie.read(t,PO(),e);return}Yie.read(t,PO(e),r)}rh.stat=M$e;function U$e(t,e){let r=PO(e);return O$e.read(t,r)}rh.statSync=U$e;function PO(t={}){return t instanceof SO.default?t:new SO.default(t)}});var Jie=_((BTt,Kie)=>{var Vie;Kie.exports=typeof queueMicrotask=="function"?queueMicrotask.bind(typeof window<"u"?window:global):t=>(Vie||(Vie=Promise.resolve())).then(t).catch(e=>setTimeout(()=>{throw e},0))});var Xie=_((vTt,zie)=>{zie.exports=H$e;var _$e=Jie();function H$e(t,e){let r,o,a,n=!0;Array.isArray(t)?(r=[],o=t.length):(a=Object.keys(t),r={},o=a.length);function u(p){function h(){e&&e(p,r),e=null}n?_$e(h):h()}function A(p,h,E){r[p]=E,(--o===0||h)&&u(h)}o?a?a.forEach(function(p){t[p](function(h,E){A(p,h,E)})}):t.forEach(function(p,h){p(function(E,w){A(h,E,w)})}):u(null),n=!1}});var xO=_(zP=>{"use strict";Object.defineProperty(zP,"__esModule",{value:!0});zP.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var JP=process.versions.node.split(".");if(JP[0]===void 0||JP[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var Zie=Number.parseInt(JP[0],10),q$e=Number.parseInt(JP[1],10),$ie=10,j$e=10,G$e=Zie>$ie,W$e=Zie===$ie&&q$e>=j$e;zP.IS_SUPPORT_READDIR_WITH_FILE_TYPES=G$e||W$e});var ese=_(XP=>{"use strict";Object.defineProperty(XP,"__esModule",{value:!0});XP.createDirentFromStats=void 0;var bO=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 Y$e(t,e){return new bO(t,e)}XP.createDirentFromStats=Y$e});var kO=_(ZP=>{"use strict";Object.defineProperty(ZP,"__esModule",{value:!0});ZP.fs=void 0;var V$e=ese();ZP.fs=V$e});var QO=_($P=>{"use strict";Object.defineProperty($P,"__esModule",{value:!0});$P.joinPathSegments=void 0;function K$e(t,e,r){return t.endsWith(r)?t+e:t+r+e}$P.joinPathSegments=K$e});var ose=_(nh=>{"use strict";Object.defineProperty(nh,"__esModule",{value:!0});nh.readdir=nh.readdirWithFileTypes=nh.read=void 0;var J$e=wg(),tse=Xie(),z$e=xO(),rse=kO(),nse=QO();function X$e(t,e,r){if(!e.stats&&z$e.IS_SUPPORT_READDIR_WITH_FILE_TYPES){ise(t,e,r);return}sse(t,e,r)}nh.read=X$e;function ise(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(o,a)=>{if(o!==null){ex(r,o);return}let n=a.map(A=>({dirent:A,name:A.name,path:nse.joinPathSegments(t,A.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){FO(r,n);return}let u=n.map(A=>Z$e(A,e));tse(u,(A,p)=>{if(A!==null){ex(r,A);return}FO(r,p)})})}nh.readdirWithFileTypes=ise;function Z$e(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(o,a)=>{if(o!==null){if(e.throwErrorOnBrokenSymbolicLink){r(o);return}r(null,t);return}t.dirent=rse.fs.createDirentFromStats(t.name,a),r(null,t)})}}function sse(t,e,r){e.fs.readdir(t,(o,a)=>{if(o!==null){ex(r,o);return}let n=a.map(u=>{let A=nse.joinPathSegments(t,u,e.pathSegmentSeparator);return p=>{J$e.stat(A,e.fsStatSettings,(h,E)=>{if(h!==null){p(h);return}let w={name:u,path:A,dirent:rse.fs.createDirentFromStats(u,E)};e.stats&&(w.stats=E),p(null,w)})}});tse(n,(u,A)=>{if(u!==null){ex(r,u);return}FO(r,A)})})}nh.readdir=sse;function ex(t,e){t(e)}function FO(t,e){t(null,e)}});var Ase=_(ih=>{"use strict";Object.defineProperty(ih,"__esModule",{value:!0});ih.readdir=ih.readdirWithFileTypes=ih.read=void 0;var $$e=wg(),eet=xO(),ase=kO(),lse=QO();function tet(t,e){return!e.stats&&eet.IS_SUPPORT_READDIR_WITH_FILE_TYPES?cse(t,e):use(t,e)}ih.read=tet;function cse(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(o=>{let a={dirent:o,name:o.name,path:lse.joinPathSegments(t,o.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=ase.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}ih.readdirWithFileTypes=cse;function use(t,e){return e.fs.readdirSync(t).map(o=>{let a=lse.joinPathSegments(t,o,e.pathSegmentSeparator),n=$$e.statSync(a,e.fsStatSettings),u={name:o,path:a,dirent:ase.fs.createDirentFromStats(o,n)};return e.stats&&(u.stats=n),u})}ih.readdir=use});var fse=_(sh=>{"use strict";Object.defineProperty(sh,"__esModule",{value:!0});sh.createFileSystemAdapter=sh.FILE_SYSTEM_ADAPTER=void 0;var iy=ve("fs");sh.FILE_SYSTEM_ADAPTER={lstat:iy.lstat,stat:iy.stat,lstatSync:iy.lstatSync,statSync:iy.statSync,readdir:iy.readdir,readdirSync:iy.readdirSync};function ret(t){return t===void 0?sh.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},sh.FILE_SYSTEM_ADAPTER),t)}sh.createFileSystemAdapter=ret});var pse=_(TO=>{"use strict";Object.defineProperty(TO,"__esModule",{value:!0});var net=ve("path"),iet=wg(),set=fse(),RO=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=set.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,net.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new iet.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};TO.default=RO});var tx=_(oh=>{"use strict";Object.defineProperty(oh,"__esModule",{value:!0});oh.Settings=oh.scandirSync=oh.scandir=void 0;var hse=ose(),oet=Ase(),LO=pse();oh.Settings=LO.default;function aet(t,e,r){if(typeof e=="function"){hse.read(t,NO(),e);return}hse.read(t,NO(e),r)}oh.scandir=aet;function cet(t,e){let r=NO(e);return oet.read(t,r)}oh.scandirSync=cet;function NO(t={}){return t instanceof LO.default?t:new LO.default(t)}});var dse=_((TTt,gse)=>{"use strict";function uet(t){var e=new t,r=e;function o(){var n=e;return n.next?e=n.next:(e=new t,r=e),n.next=null,n}function a(n){r.next=n,r=n}return{get:o,release:a}}gse.exports=uet});var yse=_((LTt,OO)=>{"use strict";var Aet=dse();function mse(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),!(r>=1))throw new Error("fastqueue concurrency must be equal to or greater than 1");var o=Aet(fet),a=null,n=null,u=0,A=null,p={push:T,drain:Yl,saturated:Yl,pause:E,paused:!1,get concurrency(){return r},set concurrency(ce){if(!(ce>=1))throw new Error("fastqueue concurrency must be equal to or greater than 1");if(r=ce,!p.paused)for(;a&&u=r||p.paused?n?(n.next=Ie,n=Ie):(a=Ie,n=Ie,p.saturated()):(u++,e.call(t,Ie.value,Ie.worked))}function N(ce,ue){var Ie=o.get();Ie.context=t,Ie.release=U,Ie.value=ce,Ie.callback=ue||Yl,Ie.errorHandler=A,u>=r||p.paused?a?(Ie.next=a,a=Ie):(a=Ie,n=Ie,p.saturated()):(u++,e.call(t,Ie.value,Ie.worked))}function U(ce){ce&&o.release(ce);var ue=a;ue&&u<=r?p.paused?u--:(n===a&&(n=null),a=ue.next,ue.next=null,e.call(t,ue.value,ue.worked),n===null&&p.empty()):--u===0&&p.drain()}function J(){a=null,n=null,p.drain=Yl}function te(){a=null,n=null,p.drain(),p.drain=Yl}function le(ce){A=ce}}function Yl(){}function fet(){this.value=null,this.callback=Yl,this.next=null,this.release=Yl,this.context=null,this.errorHandler=null;var t=this;this.worked=function(r,o){var a=t.callback,n=t.errorHandler,u=t.value;t.value=null,t.callback=Yl,t.errorHandler&&n(r,u),a.call(t.context,r,o),t.release(t)}}function pet(t,e,r){typeof t=="function"&&(r=e,e=t,t=null);function o(E,w){e.call(this,E).then(function(D){w(null,D)},w)}var a=mse(t,o,r),n=a.push,u=a.unshift;return a.push=A,a.unshift=p,a.drained=h,a;function A(E){var w=new Promise(function(D,b){n(E,function(C,T){if(C){b(C);return}D(T)})});return w.catch(Yl),w}function p(E){var w=new Promise(function(D,b){u(E,function(C,T){if(C){b(C);return}D(T)})});return w.catch(Yl),w}function h(){if(a.idle())return new Promise(function(D){D()});var E=a.drain,w=new Promise(function(D){a.drain=function(){E(),D()}});return w}}OO.exports=mse;OO.exports.promise=pet});var rx=_(eA=>{"use strict";Object.defineProperty(eA,"__esModule",{value:!0});eA.joinPathSegments=eA.replacePathSegmentSeparator=eA.isAppliedFilter=eA.isFatalError=void 0;function het(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}eA.isFatalError=het;function get(t,e){return t===null||t(e)}eA.isAppliedFilter=get;function det(t,e){return t.split(/[/\\]/).join(e)}eA.replacePathSegmentSeparator=det;function met(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}eA.joinPathSegments=met});var _O=_(UO=>{"use strict";Object.defineProperty(UO,"__esModule",{value:!0});var yet=rx(),MO=class{constructor(e,r){this._root=e,this._settings=r,this._root=yet.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};UO.default=MO});var jO=_(qO=>{"use strict";Object.defineProperty(qO,"__esModule",{value:!0});var Eet=ve("events"),Cet=tx(),Iet=yse(),nx=rx(),wet=_O(),HO=class extends wet.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=Cet.scandir,this._emitter=new Eet.EventEmitter,this._queue=Iet(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 o={directory:e,base:r};this._queue.push(o,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(o,a)=>{if(o!==null){r(o,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!nx.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 o=e.path;r!==void 0&&(e.path=nx.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),nx.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&nx.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};qO.default=HO});var Ese=_(WO=>{"use strict";Object.defineProperty(WO,"__esModule",{value:!0});var Bet=jO(),GO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Bet.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{vet(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{Det(e,this._storage)}),this._reader.read()}};WO.default=GO;function vet(t,e){t(e)}function Det(t,e){t(null,e)}});var Cse=_(VO=>{"use strict";Object.defineProperty(VO,"__esModule",{value:!0});var Pet=ve("stream"),xet=jO(),YO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new xet.default(this._root,this._settings),this._stream=new Pet.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}};VO.default=YO});var Ise=_(JO=>{"use strict";Object.defineProperty(JO,"__esModule",{value:!0});var bet=tx(),ix=rx(),ket=_O(),KO=class extends ket.default{constructor(){super(...arguments),this._scandir=bet.scandirSync,this._storage=[],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 o=this._scandir(e,this._settings.fsScandirSettings);for(let a of o)this._handleEntry(a,r)}catch(o){this._handleError(o)}}_handleError(e){if(ix.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let o=e.path;r!==void 0&&(e.path=ix.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),ix.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&ix.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};JO.default=KO});var wse=_(XO=>{"use strict";Object.defineProperty(XO,"__esModule",{value:!0});var Qet=Ise(),zO=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Qet.default(this._root,this._settings)}read(){return this._reader.read()}};XO.default=zO});var Bse=_($O=>{"use strict";Object.defineProperty($O,"__esModule",{value:!0});var Fet=ve("path"),Ret=tx(),ZO=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,Fet.sep),this.fsScandirSettings=new Ret.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??r}};$O.default=ZO});var ox=_(tA=>{"use strict";Object.defineProperty(tA,"__esModule",{value:!0});tA.Settings=tA.walkStream=tA.walkSync=tA.walk=void 0;var vse=Ese(),Tet=Cse(),Let=wse(),eM=Bse();tA.Settings=eM.default;function Net(t,e,r){if(typeof e=="function"){new vse.default(t,sx()).read(e);return}new vse.default(t,sx(e)).read(r)}tA.walk=Net;function Oet(t,e){let r=sx(e);return new Let.default(t,r).read()}tA.walkSync=Oet;function Met(t,e){let r=sx(e);return new Tet.default(t,r).read()}tA.walkStream=Met;function sx(t={}){return t instanceof eM.default?t:new eM.default(t)}});var ax=_(rM=>{"use strict";Object.defineProperty(rM,"__esModule",{value:!0});var Uet=ve("path"),_et=wg(),Dse=Df(),tM=class{constructor(e){this._settings=e,this._fsStatSettings=new _et.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return Uet.resolve(this._settings.cwd,e)}_makeEntry(e,r){let o={name:r,path:r,dirent:Dse.fs.createDirentFromStats(r,e)};return this._settings.stats&&(o.stats=e),o}_isFatalError(e){return!Dse.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};rM.default=tM});var sM=_(iM=>{"use strict";Object.defineProperty(iM,"__esModule",{value:!0});var Het=ve("stream"),qet=wg(),jet=ox(),Get=ax(),nM=class extends Get.default{constructor(){super(...arguments),this._walkStream=jet.walkStream,this._stat=qet.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let o=e.map(this._getFullEntryPath,this),a=new Het.PassThrough({objectMode:!0});a._write=(n,u,A)=>this._getEntry(o[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===o.length-1&&a.end(),A()}).catch(A);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(o.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,o)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):o(a))})}};iM.default=nM});var Sse=_(aM=>{"use strict";Object.defineProperty(aM,"__esModule",{value:!0});var Wet=ox(),Yet=ax(),Vet=sM(),oM=class extends Yet.default{constructor(){super(...arguments),this._walkAsync=Wet.walk,this._readerStream=new Vet.default(this._settings)}dynamic(e,r){return new Promise((o,a)=>{this._walkAsync(e,r,(n,u)=>{n===null?o(u):a(n)})})}async static(e,r){let o=[],a=this._readerStream.static(e,r);return new Promise((n,u)=>{a.once("error",u),a.on("data",A=>o.push(A)),a.once("end",()=>n(o))})}};aM.default=oM});var Pse=_(cM=>{"use strict";Object.defineProperty(cM,"__esModule",{value:!0});var m1=Df(),lM=class{constructor(e,r,o){this._patterns=e,this._settings=r,this._micromatchOptions=o,this._storage=[],this._fillStorage()}_fillStorage(){for(let e of this._patterns){let r=this._getPatternSegments(e),o=this._splitSegmentsIntoSections(r);this._storage.push({complete:o.length<=1,pattern:e,segments:r,sections:o})}}_getPatternSegments(e){return m1.pattern.getPatternParts(e,this._micromatchOptions).map(o=>m1.pattern.isDynamicPattern(o,this._settings)?{dynamic:!0,pattern:o,patternRe:m1.pattern.makeRe(o,this._micromatchOptions)}:{dynamic:!1,pattern:o})}_splitSegmentsIntoSections(e){return m1.array.splitWhen(e,r=>r.dynamic&&m1.pattern.hasGlobStar(r.pattern))}};cM.default=lM});var xse=_(AM=>{"use strict";Object.defineProperty(AM,"__esModule",{value:!0});var Ket=Pse(),uM=class extends Ket.default{match(e){let r=e.split("/"),o=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>o);for(let n of a){let u=n.sections[0];if(!n.complete&&o>u.length||r.every((p,h)=>{let E=n.segments[h];return!!(E.dynamic&&E.patternRe.test(p)||!E.dynamic&&E.pattern===p)}))return!0}return!1}};AM.default=uM});var bse=_(pM=>{"use strict";Object.defineProperty(pM,"__esModule",{value:!0});var lx=Df(),Jet=xse(),fM=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,o){let a=this._getMatcher(r),n=this._getNegativePatternsRe(o);return u=>this._filter(e,u,a,n)}_getMatcher(e){return new Jet.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(lx.pattern.isAffectDepthOfReadingPattern);return lx.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,o,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=lx.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,o)?!1:this._isSkippedByNegativePatterns(n,a)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let o=r.split("/").length;if(e==="")return o;let a=e.split("/").length;return o-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!lx.pattern.matchAny(e,r)}};pM.default=fM});var kse=_(gM=>{"use strict";Object.defineProperty(gM,"__esModule",{value:!0});var Bg=Df(),hM=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let o=Bg.pattern.convertPatternsToRe(e,this._micromatchOptions),a=Bg.pattern.convertPatternsToRe(r,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0}));return n=>this._filter(n,o,a)}_filter(e,r,o){let a=Bg.path.removeLeadingDotSegment(e.path);if(this._settings.unique&&this._isDuplicateEntry(a)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(a,o))return!1;let n=e.dirent.isDirectory(),u=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(a,o,n);return this._settings.unique&&u&&this._createIndexRecord(a),u}_isDuplicateEntry(e){return this.index.has(e)}_createIndexRecord(e){this.index.set(e,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 o=Bg.path.makeAbsolute(this._settings.cwd,e);return Bg.pattern.matchAny(o,r)}_isMatchToPatterns(e,r,o){let a=Bg.pattern.matchAny(e,r);return!a&&o?Bg.pattern.matchAny(e+"/",r):a}};gM.default=hM});var Qse=_(mM=>{"use strict";Object.defineProperty(mM,"__esModule",{value:!0});var zet=Df(),dM=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return zet.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};mM.default=dM});var Rse=_(EM=>{"use strict";Object.defineProperty(EM,"__esModule",{value:!0});var Fse=Df(),yM=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Fse.path.makeAbsolute(this._settings.cwd,r),r=Fse.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};EM.default=yM});var cx=_(IM=>{"use strict";Object.defineProperty(IM,"__esModule",{value:!0});var Xet=ve("path"),Zet=bse(),$et=kse(),ett=Qse(),ttt=Rse(),CM=class{constructor(e){this._settings=e,this.errorFilter=new ett.default(this._settings),this.entryFilter=new $et.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new Zet.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new ttt.default(this._settings)}_getRootDirectory(e){return Xet.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}}};IM.default=CM});var Tse=_(BM=>{"use strict";Object.defineProperty(BM,"__esModule",{value:!0});var rtt=Sse(),ntt=cx(),wM=class extends ntt.default{constructor(){super(...arguments),this._reader=new rtt.default(this._settings)}async read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return(await this.api(r,e,o)).map(n=>o.transform(n))}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};BM.default=wM});var Lse=_(DM=>{"use strict";Object.defineProperty(DM,"__esModule",{value:!0});var itt=ve("stream"),stt=sM(),ott=cx(),vM=class extends ott.default{constructor(){super(...arguments),this._reader=new stt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e),a=this.api(r,e,o),n=new itt.Readable({objectMode:!0,read:()=>{}});return a.once("error",u=>n.emit("error",u)).on("data",u=>n.emit("data",o.transform(u))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};DM.default=vM});var Nse=_(PM=>{"use strict";Object.defineProperty(PM,"__esModule",{value:!0});var att=wg(),ltt=ox(),ctt=ax(),SM=class extends ctt.default{constructor(){super(...arguments),this._walkSync=ltt.walkSync,this._statSync=att.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let o=[];for(let a of e){let n=this._getFullEntryPath(a),u=this._getEntry(n,a,r);u===null||!r.entryFilter(u)||o.push(u)}return o}_getEntry(e,r,o){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(o.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};PM.default=SM});var Ose=_(bM=>{"use strict";Object.defineProperty(bM,"__esModule",{value:!0});var utt=Nse(),Att=cx(),xM=class extends Att.default{constructor(){super(...arguments),this._reader=new utt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return this.api(r,e,o).map(o.transform)}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};bM.default=xM});var Mse=_(oy=>{"use strict";Object.defineProperty(oy,"__esModule",{value:!0});oy.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var sy=ve("fs"),ftt=ve("os"),ptt=Math.max(ftt.cpus().length,1);oy.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:sy.lstat,lstatSync:sy.lstatSync,stat:sy.stat,statSync:sy.statSync,readdir:sy.readdir,readdirSync:sy.readdirSync};var kM=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,ptt),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),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),this.ignore=[].concat(this.ignore)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},oy.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};oy.default=kM});var ux=_((oLt,_se)=>{"use strict";var Use=_ie(),htt=Tse(),gtt=Lse(),dtt=Ose(),QM=Mse(),Vl=Df();async function FM(t,e){Kc(t);let r=RM(t,htt.default,e),o=await Promise.all(r);return Vl.array.flatten(o)}(function(t){t.glob=t,t.globSync=e,t.globStream=r,t.async=t;function e(h,E){Kc(h);let w=RM(h,dtt.default,E);return Vl.array.flatten(w)}t.sync=e;function r(h,E){Kc(h);let w=RM(h,gtt.default,E);return Vl.stream.merge(w)}t.stream=r;function o(h,E){Kc(h);let w=[].concat(h),D=new QM.default(E);return Use.generate(w,D)}t.generateTasks=o;function a(h,E){Kc(h);let w=new QM.default(E);return Vl.pattern.isDynamicPattern(h,w)}t.isDynamicPattern=a;function n(h){return Kc(h),Vl.path.escape(h)}t.escapePath=n;function u(h){return Kc(h),Vl.path.convertPathToPattern(h)}t.convertPathToPattern=u;let A;(function(h){function E(D){return Kc(D),Vl.path.escapePosixPath(D)}h.escapePath=E;function w(D){return Kc(D),Vl.path.convertPosixPathToPattern(D)}h.convertPathToPattern=w})(A=t.posix||(t.posix={}));let p;(function(h){function E(D){return Kc(D),Vl.path.escapeWindowsPath(D)}h.escapePath=E;function w(D){return Kc(D),Vl.path.convertWindowsPathToPattern(D)}h.convertPathToPattern=w})(p=t.win32||(t.win32={}))})(FM||(FM={}));function RM(t,e,r){let o=[].concat(t),a=new QM.default(r),n=Use.generate(o,a),u=new e(a);return n.map(u.read,u)}function Kc(t){if(![].concat(t).every(o=>Vl.string.isString(o)&&!Vl.string.isEmpty(o)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}_se.exports=FM});var bn={};Vt(bn,{checksumFile:()=>fx,checksumPattern:()=>px,makeHash:()=>Ji});function Ji(...t){let e=(0,Ax.createHash)("sha512"),r="";for(let o of t)typeof o=="string"?r+=o:o&&(r&&(e.update(r),r=""),e.update(o));return r&&e.update(r),e.digest("hex")}async function fx(t,{baseFs:e,algorithm:r}={baseFs:ae,algorithm:"sha512"}){let o=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,Ax.createHash)(r),A=0;for(;(A=await e.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await e.closePromise(o)}}async function px(t,{cwd:e}){let o=(await(0,TM.default)(t,{cwd:Ae.fromPortablePath(e),onlyDirectories:!0})).map(A=>`${A}/**/*`),a=await(0,TM.default)([t,...o],{cwd:Ae.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async A=>{let p=[Buffer.from(A)],h=V.join(e,Ae.toPortablePath(A)),E=await ae.lstatPromise(h);return E.isSymbolicLink()?p.push(Buffer.from(await ae.readlinkPromise(h))):E.isFile()&&p.push(await ae.readFilePromise(h)),p.join("\0")})),u=(0,Ax.createHash)("sha512");for(let A of n)u.update(A);return u.digest("hex")}var Ax,TM,ah=It(()=>{St();Ax=ve("crypto"),TM=et(ux())});var G={};Vt(G,{allPeerRequests:()=>P1,areDescriptorsEqual:()=>Wse,areIdentsEqual:()=>w1,areLocatorsEqual:()=>B1,areVirtualPackagesEquivalent:()=>Dtt,bindDescriptor:()=>Btt,bindLocator:()=>vtt,convertDescriptorToLocator:()=>hx,convertLocatorToDescriptor:()=>NM,convertPackageToLocator:()=>Ctt,convertToIdent:()=>Ett,convertToManifestRange:()=>Ltt,copyPackage:()=>E1,devirtualizeDescriptor:()=>C1,devirtualizeLocator:()=>I1,ensureDevirtualizedDescriptor:()=>Itt,ensureDevirtualizedLocator:()=>wtt,getIdentVendorPath:()=>_M,isPackageCompatible:()=>Ex,isVirtualDescriptor:()=>Sf,isVirtualLocator:()=>Jc,makeDescriptor:()=>kn,makeIdent:()=>rA,makeLocator:()=>Ps,makeRange:()=>mx,parseDescriptor:()=>lh,parseFileStyleRange:()=>Rtt,parseIdent:()=>Zo,parseLocator:()=>Pf,parseRange:()=>vg,prettyDependent:()=>fO,prettyDescriptor:()=>Jn,prettyIdent:()=>Ui,prettyLocator:()=>jr,prettyLocatorNoColors:()=>AO,prettyRange:()=>cy,prettyReference:()=>D1,prettyResolution:()=>d1,prettyWorkspace:()=>S1,renamePackage:()=>OM,slugifyIdent:()=>LM,slugifyLocator:()=>ly,sortDescriptors:()=>uy,stringifyDescriptor:()=>ka,stringifyIdent:()=>rn,stringifyLocator:()=>Qa,tryParseDescriptor:()=>v1,tryParseIdent:()=>Yse,tryParseLocator:()=>dx,tryParseRange:()=>Ftt,virtualizeDescriptor:()=>MM,virtualizePackage:()=>UM});function rA(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:Ji(t,e),scope:t,name:e}}function kn(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:Ji(t.identHash,e),range:e}}function Ps(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:Ji(t.identHash,e),reference:e}}function Ett(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function hx(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function NM(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function Ctt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function OM(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 E1(t){return OM(t,t)}function MM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return kn(t,`virtual:${e}#${t.range}`)}function UM(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return OM(t,Ps(t,`virtual:${e}#${t.reference}`))}function Sf(t){return t.range.startsWith(y1)}function Jc(t){return t.reference.startsWith(y1)}function C1(t){if(!Sf(t))throw new Error("Not a virtual descriptor");return kn(t,t.range.replace(gx,""))}function I1(t){if(!Jc(t))throw new Error("Not a virtual descriptor");return Ps(t,t.reference.replace(gx,""))}function Itt(t){return Sf(t)?kn(t,t.range.replace(gx,"")):t}function wtt(t){return Jc(t)?Ps(t,t.reference.replace(gx,"")):t}function Btt(t,e){return t.range.includes("::")?t:kn(t,`${t.range}::${ay.default.stringify(e)}`)}function vtt(t,e){return t.reference.includes("::")?t:Ps(t,`${t.reference}::${ay.default.stringify(e)}`)}function w1(t,e){return t.identHash===e.identHash}function Wse(t,e){return t.descriptorHash===e.descriptorHash}function B1(t,e){return t.locatorHash===e.locatorHash}function Dtt(t,e){if(!Jc(t))throw new Error("Invalid package type");if(!Jc(e))throw new Error("Invalid package type");if(!w1(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let o=e.dependencies.get(r.identHash);if(!o||!Wse(r,o))return!1}return!0}function Zo(t){let e=Yse(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function Yse(t){let e=t.match(Stt);if(!e)return null;let[,r,o]=e;return rA(typeof r<"u"?r:null,o)}function lh(t,e=!1){let r=v1(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function v1(t,e=!1){let r=e?t.match(Ptt):t.match(xtt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return kn(rA(u,a),A)}function Pf(t,e=!1){let r=dx(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function dx(t,e=!1){let r=e?t.match(btt):t.match(ktt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return Ps(rA(u,a),A)}function vg(t,e){let r=t.match(Qtt);if(r===null)throw new Error(`Invalid range (${t})`);let o=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&o!==e.requireProtocol)throw new Error(`Invalid protocol (${o})`);if(e?.requireProtocol&&o===null)throw new Error(`Missing protocol (${o})`);let a=typeof r[3]<"u"?decodeURIComponent(r[2]):null;if(e?.requireSource&&a===null)throw new Error(`Missing source (${t})`);let n=typeof r[3]<"u"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),u=e?.parseSelector?ay.default.parse(n):n,A=typeof r[4]<"u"?ay.default.parse(r[4]):null;return{protocol:o,source:a,selector:u,params:A}}function Ftt(t,e){try{return vg(t,e)}catch{return null}}function Rtt(t,{protocol:e}){let{selector:r,params:o}=vg(t,{requireProtocol:e,requireBindings:!0});if(typeof o.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:Pf(o.locator,!0),path:r}}function Hse(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function Ttt(t){return t===null?!1:Object.entries(t).length>0}function mx({protocol:t,source:e,selector:r,params:o}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${Hse(e)}#`),a+=Hse(r),Ttt(o)&&(a+=`::${ay.default.stringify(o)}`),a}function Ltt(t){let{params:e,protocol:r,source:o,selector:a}=vg(t);for(let n in e)n.startsWith("__")&&delete e[n];return mx({protocol:r,source:o,params:e,selector:a})}function rn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function ka(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function Qa(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function LM(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function ly(t){let{protocol:e,selector:r}=vg(t.reference),o=e!==null?e.replace(Ntt,""):"exotic",a=qse.default.valid(r),n=a!==null?`${o}-${a}`:`${o}`,u=10;return t.scope?`${LM(t)}-${n}-${t.locatorHash.slice(0,u)}`:`${LM(t)}-${n}-${t.locatorHash.slice(0,u)}`}function Ui(t,e){return e.scope?`${Ut(t,`@${e.scope}/`,Ct.SCOPE)}${Ut(t,e.name,Ct.NAME)}`:`${Ut(t,e.name,Ct.NAME)}`}function yx(t){if(t.startsWith(y1)){let e=yx(t.substring(t.indexOf("#")+1)),r=t.substring(y1.length,y1.length+mtt);return`${e} [${r}]`}else return t.replace(Ott,"?[...]")}function cy(t,e){return`${Ut(t,yx(e),Ct.RANGE)}`}function Jn(t,e){return`${Ui(t,e)}${Ut(t,"@",Ct.RANGE)}${cy(t,e.range)}`}function D1(t,e){return`${Ut(t,yx(e),Ct.REFERENCE)}`}function jr(t,e){return`${Ui(t,e)}${Ut(t,"@",Ct.REFERENCE)}${D1(t,e.reference)}`}function AO(t){return`${rn(t)}@${yx(t.reference)}`}function uy(t){return Ss(t,[e=>rn(e),e=>e.range])}function S1(t,e){return Ui(t,e.anchoredLocator)}function d1(t,e,r){let o=Sf(e)?C1(e):e;return r===null?`${Jn(t,o)} \u2192 ${uO(t).Cross}`:o.identHash===r.identHash?`${Jn(t,o)} \u2192 ${D1(t,r.reference)}`:`${Jn(t,o)} \u2192 ${jr(t,r)}`}function fO(t,e,r){return r===null?`${jr(t,e)}`:`${jr(t,e)} (via ${cy(t,r.range)})`}function _M(t){return`node_modules/${rn(t)}`}function Ex(t,e){return t.conditions?ytt(t.conditions,r=>{let[,o,a]=r.match(Gse),n=e[o];return n?n.includes(a):!0}):!0}function P1(t){let e=new Set;if("children"in t)e.add(t);else for(let r of t.requests.values())e.add(r);for(let r of e)for(let o of r.children.values())e.add(o);return e}var ay,qse,jse,y1,mtt,Gse,ytt,gx,Stt,Ptt,xtt,btt,ktt,Qtt,Ntt,Ott,Io=It(()=>{ay=et(ve("querystring")),qse=et(ni()),jse=et(MX());Wl();ah();Gl();Io();y1="virtual:",mtt=5,Gse=/(os|cpu|libc)=([a-z0-9_-]+)/,ytt=(0,jse.makeParser)(Gse);gx=/^[^#]*#/;Stt=/^(?:@([^/]+?)\/)?([^@/]+)$/;Ptt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,xtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;btt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,ktt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Qtt=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;Ntt=/:$/;Ott=/\?.*/});var Vse,Kse=It(()=>{Io();Vse={hooks:{reduceDependency:(t,e,r,o,{resolver:a,resolveOptions:n})=>{for(let{pattern:u,reference:A}of e.topLevelWorkspace.manifest.resolutions){if(u.from&&(u.from.fullName!==rn(r)||e.configuration.normalizeLocator(Ps(Zo(u.from.fullName),u.from.description??r.reference)).locatorHash!==r.locatorHash)||u.descriptor.fullName!==rn(t)||e.configuration.normalizeDependency(kn(Pf(u.descriptor.fullName),u.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(kn(t,A)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let o=S1(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${o}: ${n}`),reportError:(a,n)=>e.reportError(a,`${o}: ${n}`)})}},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 o of r.errors)e.reportWarning(57,o.message)}}}});var ci,Dg=It(()=>{ci=class t{static{this.protocol="workspace:"}supportsDescriptor(e,r){return!!(e.range.startsWith(t.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(t.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[o.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.getWorkspaceByCwd(e.reference.slice(t.protocol.length));return{...e,version:o.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...o.manifest.dependencies,...o.manifest.devDependencies])),peerDependencies:new Map([...o.manifest.peerDependencies]),dependenciesMeta:o.manifest.dependenciesMeta,peerDependenciesMeta:o.manifest.peerDependenciesMeta,bin:o.manifest.bin}}}});var Ur={};Vt(Ur,{SemVer:()=>$se.SemVer,clean:()=>Utt,getComparator:()=>Xse,mergeComparators:()=>HM,satisfiesWithPrereleases:()=>nA,simplifyRanges:()=>qM,stringifyComparator:()=>Zse,validRange:()=>Fa});function nA(t,e,r=!1){if(!t)return!1;let o=`${e}${r}`,a=Jse.get(o);if(typeof a>"u")try{a=new xf.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{Jse.set(o,a||null)}else if(a===null)return!1;let n;try{n=new xf.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(u=>{for(let A of u)A.semver.prerelease&&(A.semver.prerelease=[]);return u.every(A=>A.test(n))}))}function Fa(t){if(t.indexOf(":")!==-1)return null;let e=zse.get(t);if(typeof e<"u")return e;try{e=new xf.default.Range(t)}catch{e=null}return zse.set(t,e),e}function Utt(t){let e=Mtt.exec(t);return e?e[1]:null}function Xse(t){if(t.semver===xf.default.Comparator.ANY)return{gt:null,lt:null};switch(t.operator){case"":return{gt:[">=",t.semver],lt:["<=",t.semver]};case">":case">=":return{gt:[t.operator,t.semver],lt:null};case"<":case"<=":return{gt:null,lt:[t.operator,t.semver]};default:throw new Error(`Assertion failed: Unexpected comparator operator (${t.operator})`)}}function HM(t){if(t.length===0)return null;let e=null,r=null;for(let o of t){if(o.gt){let a=e!==null?xf.default.compare(o.gt[1],e[1]):null;(a===null||a>0||a===0&&o.gt[0]===">")&&(e=o.gt)}if(o.lt){let a=r!==null?xf.default.compare(o.lt[1],r[1]):null;(a===null||a<0||a===0&&o.lt[0]==="<")&&(r=o.lt)}}if(e&&r){let o=xf.default.compare(e[1],r[1]);if(o===0&&(e[0]===">"||r[0]==="<")||o>0)return null}return{gt:e,lt:r}}function Zse(t){if(t.gt&&t.lt){if(t.gt[0]===">="&&t.lt[0]==="<="&&t.gt[1].version===t.lt[1].version)return t.gt[1].version;if(t.gt[0]===">="&&t.lt[0]==="<"){if(t.lt[1].version===`${t.gt[1].major+1}.0.0-0`)return`^${t.gt[1].version}`;if(t.lt[1].version===`${t.gt[1].major}.${t.gt[1].minor+1}.0-0`)return`~${t.gt[1].version}`}}let e=[];return t.gt&&e.push(t.gt[0]+t.gt[1].version),t.lt&&e.push(t.lt[0]+t.lt[1].version),e.length?e.join(" "):"*"}function qM(t){let e=t.map(_tt).map(o=>Fa(o).set.map(a=>a.map(n=>Xse(n)))),r=e.shift().map(o=>HM(o)).filter(o=>o!==null);for(let o of e){let a=[];for(let n of r)for(let u of o){let A=HM([n,...u]);A!==null&&a.push(A)}r=a}return r.length===0?null:r.map(o=>Zse(o)).join(" || ")}function _tt(t){let e=t.split("||");if(e.length>1){let r=new Set;for(let o of e)e.some(a=>a!==o&&xf.default.subset(o,a))||r.add(o);if(r.size{xf=et(ni()),$se=et(ni()),Jse=new Map;zse=new Map;Mtt=/^(?:[\sv=]*?)((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\s*)$/});function eoe(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function toe(t){return t.charCodeAt(0)===65279?t.slice(1):t}function $o(t){return t.replace(/\\/g,"/")}function Cx(t,{yamlCompatibilityMode:e}){return e?nO(t):typeof t>"u"||typeof t=="boolean"?t:null}function roe(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let o=r%2===0?"":"!",a=e.slice(r);return`${o}${t}=${a}`}function jM(t,e){return e.length===1?roe(t,e[0]):`(${e.map(r=>roe(t,r)).join(" | ")})`}var noe,_t,Ay=It(()=>{St();Ol();noe=et(ni());Dg();Gl();bf();Io();_t=class t{constructor(){this.indent=" ";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=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{this.fileName="package.json"}static{this.allDependencies=["dependencies","devDependencies","peerDependencies"]}static{this.hardDependencies=["dependencies","devDependencies"]}static async tryFind(e,{baseFs:r=new _n}={}){let o=V.join(e,"package.json");try{return await t.fromFile(o,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let o=await t.tryFind(e,{baseFs:r});if(o===null)throw new Error("Manifest not found");return o}static async fromFile(e,{baseFs:r=new _n}={}){let o=new t;return await o.loadFile(e,{baseFs:r}),o}static fromText(e){let r=new t;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(toe(e)||"{}")}catch(o){throw o.message+=` (when parsing ${e})`,o}this.load(r),this.indent=eoe(e)}async loadFile(e,{baseFs:r=new _n}){let o=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(toe(o)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=eoe(o)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let o=[];if(this.name=null,typeof e.name=="string")try{this.name=Zo(e.name)}catch{o.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 n=[];this.os=n;for(let u of e.os)typeof u!="string"?o.push(new Error("Parsing failed for the 'os' field")):n.push(u)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let u of e.cpu)typeof u!="string"?o.push(new Error("Parsing failed for the 'cpu' field")):n.push(u)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let u of e.libc)typeof u!="string"?o.push(new Error("Parsing failed for the 'libc' field")):n.push(u)}else this.libc=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=$o(e.main):this.main=null,typeof e.module=="string"?this.module=$o(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=$o(e.browser);else{this.browser=new Map;for(let[n,u]of Object.entries(e.browser))this.browser.set($o(n),typeof u=="string"?$o(u):u)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?o.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,$o(e.bin)):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,u]of Object.entries(e.bin)){if(typeof u!="string"||u.trim()===""){o.push(new Error(`Invalid bin definition for '${n}'`));continue}let A=Zo(n);this.bin.set(A.name,$o(u))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,u]of Object.entries(e.scripts)){if(typeof u!="string"){o.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,u)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,u]of Object.entries(e.dependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Zo(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=kn(A,u);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,u]of Object.entries(e.devDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Zo(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=kn(A,u);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,u]of Object.entries(e.peerDependencies)){let A;try{A=Zo(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof u!="string"||!u.startsWith(ci.protocol)&&!Fa(u))&&(o.push(new Error(`Invalid dependency range for '${n}'`)),u="*");let p=kn(A,u);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&o.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let a=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 n of a){if(typeof n!="string"){o.push(new Error(`Invalid workspace definition for '${n}'`));continue}this.workspaceDefinitions.push({pattern:n})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[n,u]of Object.entries(e.dependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}`));continue}let A=lh(n),p=this.ensureDependencyMeta(A),h=Cx(u.built,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid built meta field for '${n}'`));continue}let E=Cx(u.optional,{yamlCompatibilityMode:r});if(E===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}let w=Cx(u.unplugged,{yamlCompatibilityMode:r});if(w===null){o.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:E,unplugged:w})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,u]of Object.entries(e.peerDependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}'`));continue}let A=lh(n),p=this.ensurePeerDependencyMeta(A),h=Cx(u.optional,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}Object.assign(p,{optional:h})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[n,u]of Object.entries(e.resolutions)){if(typeof u!="string"){o.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:pS(n),reference:u})}catch(A){o.push(A);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){o.push(new Error(`Invalid files entry for '${n}'`));continue}this.files.add(n)}}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=$o(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=$o(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=$o(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,u]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set($o(n),typeof u=="string"?$o(u):u)}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,$o(e.publishConfig.bin)]]):o.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[n,u]of Object.entries(e.publishConfig.bin)){if(typeof u!="string"){o.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,$o(u))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){o.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add($o(n))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let n of Object.keys(e.installConfig))n==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:o.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:o.push(new Error("Invalid selfReferences definition, must be a boolean value")):o.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,u]of Object.entries(e.optionalDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Zo(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=kn(A,u);this.dependencies.set(p.identHash,p);let h=kn(A,"unknown"),E=this.ensureDependencyMeta(h);Object.assign(E,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=o}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(jM("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(jM("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(jM("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!noe.default.valid(e.range))throw new Error(`Invalid meta field range for '${ka(e)}'`);let r=rn(e),o=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(o);return n||a.set(o,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${ka(e)}'`);let r=rn(e),o=this.peerDependenciesMeta.get(r);return o||this.peerDependenciesMeta.set(r,o={}),o}setRawField(e,r,{after:o=[]}={}){let a=new Set(o.filter(n=>Object.hasOwn(this.raw,n)));if(a.size===0||Object.hasOwn(this.raw,e))this.raw[e]=r;else{let n=this.raw,u=this.raw={},A=!1;for(let p of Object.keys(n))u[p]=n[p],A||(a.delete(p),a.size===0&&(u[e]=r,A=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=rn(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 n=this.browser;typeof n=="string"?e.browser=n:n instanceof Map&&(e.browser=Object.assign({},...Array.from(n.keys()).sort().map(u=>({[u]:n.get(u)}))))}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(n=>({[n]:this.bin.get(n)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:n})=>n)}:e.workspaces=this.workspaceDefinitions.map(({pattern:n})=>n):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let o=[],a=[];for(let n of this.dependencies.values()){let u=this.dependenciesMeta.get(rn(n)),A=!1;if(r&&u){let p=u.get(null);p&&p.optional&&(A=!0)}A?a.push(n):o.push(n)}o.length>0?e.dependencies=Object.assign({},...uy(o).map(n=>({[rn(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...uy(a).map(n=>({[rn(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...uy(this.devDependencies.values()).map(n=>({[rn(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...uy(this.peerDependencies.values()).map(n=>({[rn(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,u]of Ss(this.dependenciesMeta.entries(),([A,p])=>A))for(let[A,p]of Ss(u.entries(),([h,E])=>h!==null?`0${h}`:"1")){let h=A!==null?ka(kn(Zo(n),A)):n,E={...p};r&&A===null&&delete E.optional,Object.keys(E).length!==0&&(e.dependenciesMeta[h]=E)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...Ss(this.peerDependenciesMeta.entries(),([n,u])=>n).map(([n,u])=>({[n]:u}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:u})=>({[hS(n)]:u}))):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){e.scripts??={};for(let n of Object.keys(e.scripts))this.scripts.has(n)||delete e.scripts[n];for(let[n,u]of this.scripts.entries())e.scripts[n]=u}else delete e.scripts;return e}}});var soe=_((ILt,ioe)=>{var Htt=ql(),qtt=function(){return Htt.Date.now()};ioe.exports=qtt});var aoe=_((wLt,ooe)=>{var jtt=/\s/;function Gtt(t){for(var e=t.length;e--&&jtt.test(t.charAt(e)););return e}ooe.exports=Gtt});var coe=_((BLt,loe)=>{var Wtt=aoe(),Ytt=/^\s+/;function Vtt(t){return t&&t.slice(0,Wtt(t)+1).replace(Ytt,"")}loe.exports=Vtt});var fy=_((vLt,uoe)=>{var Ktt=mg(),Jtt=Zu(),ztt="[object Symbol]";function Xtt(t){return typeof t=="symbol"||Jtt(t)&&Ktt(t)==ztt}uoe.exports=Xtt});var hoe=_((DLt,poe)=>{var Ztt=coe(),Aoe=cl(),$tt=fy(),foe=NaN,ert=/^[-+]0x[0-9a-f]+$/i,trt=/^0b[01]+$/i,rrt=/^0o[0-7]+$/i,nrt=parseInt;function irt(t){if(typeof t=="number")return t;if($tt(t))return foe;if(Aoe(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Aoe(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=Ztt(t);var r=trt.test(t);return r||rrt.test(t)?nrt(t.slice(2),r?2:8):ert.test(t)?foe:+t}poe.exports=irt});var moe=_((SLt,doe)=>{var srt=cl(),GM=soe(),goe=hoe(),ort="Expected a function",art=Math.max,lrt=Math.min;function crt(t,e,r){var o,a,n,u,A,p,h=0,E=!1,w=!1,D=!0;if(typeof t!="function")throw new TypeError(ort);e=goe(e)||0,srt(r)&&(E=!!r.leading,w="maxWait"in r,n=w?art(goe(r.maxWait)||0,e):n,D="trailing"in r?!!r.trailing:D);function b(ue){var Ie=o,he=a;return o=a=void 0,h=ue,u=t.apply(he,Ie),u}function C(ue){return h=ue,A=setTimeout(U,e),E?b(ue):u}function T(ue){var Ie=ue-p,he=ue-h,De=e-Ie;return w?lrt(De,n-he):De}function N(ue){var Ie=ue-p,he=ue-h;return p===void 0||Ie>=e||Ie<0||w&&he>=n}function U(){var ue=GM();if(N(ue))return J(ue);A=setTimeout(U,T(ue))}function J(ue){return A=void 0,D&&o?b(ue):(o=a=void 0,u)}function te(){A!==void 0&&clearTimeout(A),h=0,o=p=a=A=void 0}function le(){return A===void 0?u:J(GM())}function ce(){var ue=GM(),Ie=N(ue);if(o=arguments,a=this,p=ue,Ie){if(A===void 0)return C(p);if(w)return clearTimeout(A),A=setTimeout(U,e),b(p)}return A===void 0&&(A=setTimeout(U,e)),u}return ce.cancel=te,ce.flush=le,ce}doe.exports=crt});var WM=_((PLt,yoe)=>{var urt=moe(),Art=cl(),frt="Expected a function";function prt(t,e,r){var o=!0,a=!0;if(typeof t!="function")throw new TypeError(frt);return Art(r)&&(o="leading"in r?!!r.leading:o,a="trailing"in r?!!r.trailing:a),urt(t,e,{leading:o,maxWait:e,trailing:a})}yoe.exports=prt});function grt(t){return typeof t.reportCode<"u"}var Eoe,Coe,Ioe,hrt,Jt,Ws,Kl=It(()=>{Eoe=et(WM()),Coe=ve("stream"),Ioe=ve("string_decoder"),hrt=15,Jt=class extends Error{constructor(r,o,a){super(o);this.reportExtra=a;this.reportCode=r}};Ws=class{constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}getRecommendedLength(){return 180}reportCacheHit(e){this.cacheHits.add(e.locatorHash)}reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}static progressViaCounter(e){let r=0,o,a=new Promise(p=>{o=p}),n=p=>{let h=o;a=new Promise(E=>{o=E}),r=p,h()},u=(p=0)=>{n(r+1)},A=async function*(){for(;r{r=u}),a=(0,Eoe.default)(u=>{let A=r;o=new Promise(p=>{r=p}),e=u,A()},1e3/hrt),n=async function*(){for(;;)await o,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let o=this.reportProgress(e);try{return await r(e)}finally{o.stop()}}startProgressSync(e,r){let o=this.reportProgress(e);try{return r(e)}finally{o.stop()}}reportInfoOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),o?.reportExtra?.(this))}reportWarningOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),o?.reportExtra?.(this))}reportErrorOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),o?.reportExtra?.(this))}reportExceptionOnce(e){grt(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let r=new Coe.PassThrough,o=new Ioe.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var py,YM=It(()=>{Kl();Io();py=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 o=this.fetchers.find(a=>a.supports(e,r));return o||null}getFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));if(!o)throw new Jt(11,`${jr(r.project.configuration,e)} isn't supported by any available fetcher`);return o}}});var Sg,VM=It(()=>{Io();Sg=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,o){return this.getResolverByDescriptor(e,o).bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,o){return await this.getResolverByDescriptor(e,o).getCandidates(e,r,o)}async getSatisfying(e,r,o,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,o,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));return o||null}getResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!o)throw new Error(`${Jn(r.project.configuration,e)} isn't supported by any available resolver`);return o}tryResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));return o||null}getResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));if(!o)throw new Error(`${jr(r.project.configuration,e)} isn't supported by any available resolver`);return o}}});var hy,KM=It(()=>{St();Io();hy=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Ps(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Ps(e,a),u=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,u,r)}getLocatorFilename(e){return ly(e)}async ensureVirtualLink(e,r,o){let a=r.packageFs.getRealPath(),n=o.project.configuration.get("virtualFolder"),u=this.getLocatorFilename(e),A=qs.makeVirtualPath(n,u,a),p=new ju(A,{baseFs:r.packageFs,pathUtils:V});return{...r,packageFs:p}}}});var Ix,woe=It(()=>{Ix=class t{static{this.protocol="virtual:"}static isVirtualDescriptor(e){return!!e.range.startsWith(t.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(t.protocol)}supportsDescriptor(e,r){return t.isVirtualDescriptor(e)}supportsLocator(e,r){return t.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){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,o){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,o,a){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')}}});var gy,JM=It(()=>{St();Dg();gy=class{supports(e){return!!e.reference.startsWith(ci.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let o=this.getWorkspace(e,r).cwd;return{packageFs:new En(o),prefixPath:Bt.dot,localPath:o}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(ci.protocol.length))}}});function x1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Boe(t){return typeof t>"u"?3:x1(t)?0:Array.isArray(t)?1:2}function ZM(t,e){return Object.hasOwn(t,e)}function mrt(t){return x1(t)&&ZM(t,"onConflict")&&typeof t.onConflict=="string"}function yrt(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!mrt(t))return{onConflict:"default",value:t};if(ZM(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function voe(t,e){let r=x1(t)&&ZM(t,e)?t[e]:void 0;return yrt(r)}function dy(t,e){return[t,e,Doe]}function $M(t){return Array.isArray(t)?t[2]===Doe:!1}function zM(t,e){if(x1(t)){let r={};for(let o of Object.keys(t))r[o]=zM(t[o],e);return dy(e,r)}return Array.isArray(t)?dy(e,t.map(r=>zM(r,e))):dy(e,t)}function XM(t,e,r,o,a){let n,u=[],A=a,p=0;for(let E=a-1;E>=o;--E){let[w,D]=t[E],{onConflict:b,value:C}=voe(D,r),T=Boe(C);if(T!==3){if(n??=T,T!==n||b==="hardReset"){p=A;break}if(T===2)return dy(w,C);if(u.unshift([w,C]),b==="reset"){p=E;break}b==="extend"&&E===o&&(o=0),A=E}}if(typeof n>"u")return null;let h=u.map(([E])=>E).join(", ");switch(n){case 1:return dy(h,new Array().concat(...u.map(([E,w])=>w.map(D=>zM(D,E)))));case 0:{let E=Object.assign({},...u.map(([,T])=>T)),w=Object.keys(E),D={},b=t.map(([T,N])=>[T,voe(N,r).value]),C=drt(b,([T,N])=>{let U=Boe(N);return U!==0&&U!==3});if(C!==-1){let T=b.slice(C+1);for(let N of w)D[N]=XM(T,e,N,0,T.length)}else for(let T of w)D[T]=XM(b,e,T,p,b.length);return dy(h,D)}default:throw new Error("Assertion failed: Non-extendable value type")}}function Soe(t){return XM(t.map(([e,r])=>[e,{".":r}]),[],".",0,t.length)}function b1(t){return $M(t)?t[1]:t}function wx(t){let e=$M(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>wx(r));if(x1(e)){let r={};for(let[o,a]of Object.entries(e))r[o]=wx(a);return r}return e}function e4(t){return $M(t)?t[0]:null}var drt,Doe,Poe=It(()=>{drt=(t,e,r)=>{let o=[...t];return o.reverse(),o.findIndex(e,r)};Doe=Symbol()});var Bx={};Vt(Bx,{getDefaultGlobalFolder:()=>r4,getHomeFolder:()=>my,isFolderInside:()=>n4});function r4(){if(process.platform==="win32"){let t=Ae.toPortablePath(process.env.LOCALAPPDATA||Ae.join((0,t4.homedir)(),"AppData","Local"));return V.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=Ae.toPortablePath(process.env.XDG_DATA_HOME);return V.resolve(t,"yarn/berry")}return V.resolve(my(),".yarn/berry")}function my(){return Ae.toPortablePath((0,t4.homedir)()||"/usr/local/share")}function n4(t,e){let r=V.relative(e,t);return r&&!r.startsWith("..")&&!V.isAbsolute(r)}var t4,vx=It(()=>{St();t4=ve("os")});var Qoe=_(yy=>{"use strict";var _Lt=ve("net"),Crt=ve("tls"),i4=ve("http"),xoe=ve("https"),Irt=ve("events"),HLt=ve("assert"),wrt=ve("util");yy.httpOverHttp=Brt;yy.httpsOverHttp=vrt;yy.httpOverHttps=Drt;yy.httpsOverHttps=Srt;function Brt(t){var e=new kf(t);return e.request=i4.request,e}function vrt(t){var e=new kf(t);return e.request=i4.request,e.createSocket=boe,e.defaultPort=443,e}function Drt(t){var e=new kf(t);return e.request=xoe.request,e}function Srt(t){var e=new kf(t);return e.request=xoe.request,e.createSocket=boe,e.defaultPort=443,e}function kf(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||i4.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(o,a,n,u){for(var A=koe(a,n,u),p=0,h=e.requests.length;p=this.maxSockets){n.requests.push(u);return}n.createSocket(u,function(A){A.on("free",p),A.on("close",h),A.on("agentRemove",h),e.onSocket(A);function p(){n.emit("free",A,u)}function h(E){n.removeSocket(A),A.removeListener("free",p),A.removeListener("close",h),A.removeListener("agentRemove",h)}})};kf.prototype.createSocket=function(e,r){var o=this,a={};o.sockets.push(a);var n=s4({},o.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(n.localAddress=e.localAddress),n.proxyAuth&&(n.headers=n.headers||{},n.headers["Proxy-Authorization"]="Basic "+new Buffer(n.proxyAuth).toString("base64")),ch("making CONNECT request");var u=o.request(n);u.useChunkedEncodingByDefault=!1,u.once("response",A),u.once("upgrade",p),u.once("connect",h),u.once("error",E),u.end();function A(w){w.upgrade=!0}function p(w,D,b){process.nextTick(function(){h(w,D,b)})}function h(w,D,b){if(u.removeAllListeners(),D.removeAllListeners(),w.statusCode!==200){ch("tunneling socket could not be established, statusCode=%d",w.statusCode),D.destroy();var C=new Error("tunneling socket could not be established, statusCode="+w.statusCode);C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}if(b.length>0){ch("got illegal response body from proxy"),D.destroy();var C=new Error("got illegal response body from proxy");C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}return ch("tunneling connection has established"),o.sockets[o.sockets.indexOf(a)]=D,r(D)}function E(w){u.removeAllListeners(),ch(`tunneling socket could not be established, cause=%s +`,w.message,w.stack);var D=new Error("tunneling socket could not be established, cause="+w.message);D.code="ECONNRESET",e.request.emit("error",D),o.removeSocket(a)}};kf.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var o=this.requests.shift();o&&this.createSocket(o,function(a){o.request.onSocket(a)})}};function boe(t,e){var r=this;kf.prototype.createSocket.call(r,t,function(o){var a=t.request.getHeader("host"),n=s4({},r.options,{socket:o,servername:a?a.replace(/:.*$/,""):t.host}),u=Crt.connect(0,n);r.sockets[r.sockets.indexOf(o)]=u,e(u)})}function koe(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function s4(t){for(var e=1,r=arguments.length;e{Foe.exports=Qoe()});var Ff=_((Qf,Dx)=>{"use strict";Object.defineProperty(Qf,"__esModule",{value:!0});var Toe=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Prt(t){return Toe.includes(t)}var xrt=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Blob","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","FormData","URLSearchParams","HTMLElement",...Toe];function brt(t){return xrt.includes(t)}var krt=["null","undefined","string","number","bigint","boolean","symbol"];function Qrt(t){return krt.includes(t)}function Ey(t){return e=>typeof e===t}var{toString:Loe}=Object.prototype,k1=t=>{let e=Loe.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&Pe.domElement(t))return"HTMLElement";if(brt(e))return e},ii=t=>e=>k1(e)===t;function Pe(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(Pe.observable(t))return"Observable";if(Pe.array(t))return"Array";if(Pe.buffer(t))return"Buffer";let e=k1(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"}Pe.undefined=Ey("undefined");Pe.string=Ey("string");var Frt=Ey("number");Pe.number=t=>Frt(t)&&!Pe.nan(t);Pe.bigint=Ey("bigint");Pe.function_=Ey("function");Pe.null_=t=>t===null;Pe.class_=t=>Pe.function_(t)&&t.toString().startsWith("class ");Pe.boolean=t=>t===!0||t===!1;Pe.symbol=Ey("symbol");Pe.numericString=t=>Pe.string(t)&&!Pe.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));Pe.array=(t,e)=>Array.isArray(t)?Pe.function_(e)?t.every(e):!0:!1;Pe.buffer=t=>{var e,r,o,a;return(a=(o=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||o===void 0?void 0:o.call(r,t))!==null&&a!==void 0?a:!1};Pe.blob=t=>ii("Blob")(t);Pe.nullOrUndefined=t=>Pe.null_(t)||Pe.undefined(t);Pe.object=t=>!Pe.null_(t)&&(typeof t=="object"||Pe.function_(t));Pe.iterable=t=>{var e;return Pe.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};Pe.asyncIterable=t=>{var e;return Pe.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};Pe.generator=t=>{var e,r;return Pe.iterable(t)&&Pe.function_((e=t)===null||e===void 0?void 0:e.next)&&Pe.function_((r=t)===null||r===void 0?void 0:r.throw)};Pe.asyncGenerator=t=>Pe.asyncIterable(t)&&Pe.function_(t.next)&&Pe.function_(t.throw);Pe.nativePromise=t=>ii("Promise")(t);var Rrt=t=>{var e,r;return Pe.function_((e=t)===null||e===void 0?void 0:e.then)&&Pe.function_((r=t)===null||r===void 0?void 0:r.catch)};Pe.promise=t=>Pe.nativePromise(t)||Rrt(t);Pe.generatorFunction=ii("GeneratorFunction");Pe.asyncGeneratorFunction=t=>k1(t)==="AsyncGeneratorFunction";Pe.asyncFunction=t=>k1(t)==="AsyncFunction";Pe.boundFunction=t=>Pe.function_(t)&&!t.hasOwnProperty("prototype");Pe.regExp=ii("RegExp");Pe.date=ii("Date");Pe.error=ii("Error");Pe.map=t=>ii("Map")(t);Pe.set=t=>ii("Set")(t);Pe.weakMap=t=>ii("WeakMap")(t);Pe.weakSet=t=>ii("WeakSet")(t);Pe.int8Array=ii("Int8Array");Pe.uint8Array=ii("Uint8Array");Pe.uint8ClampedArray=ii("Uint8ClampedArray");Pe.int16Array=ii("Int16Array");Pe.uint16Array=ii("Uint16Array");Pe.int32Array=ii("Int32Array");Pe.uint32Array=ii("Uint32Array");Pe.float32Array=ii("Float32Array");Pe.float64Array=ii("Float64Array");Pe.bigInt64Array=ii("BigInt64Array");Pe.bigUint64Array=ii("BigUint64Array");Pe.arrayBuffer=ii("ArrayBuffer");Pe.sharedArrayBuffer=ii("SharedArrayBuffer");Pe.dataView=ii("DataView");Pe.enumCase=(t,e)=>Object.values(e).includes(t);Pe.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;Pe.urlInstance=t=>ii("URL")(t);Pe.urlString=t=>{if(!Pe.string(t))return!1;try{return new URL(t),!0}catch{return!1}};Pe.truthy=t=>!!t;Pe.falsy=t=>!t;Pe.nan=t=>Number.isNaN(t);Pe.primitive=t=>Pe.null_(t)||Qrt(typeof t);Pe.integer=t=>Number.isInteger(t);Pe.safeInteger=t=>Number.isSafeInteger(t);Pe.plainObject=t=>{if(Loe.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};Pe.typedArray=t=>Prt(k1(t));var Trt=t=>Pe.safeInteger(t)&&t>=0;Pe.arrayLike=t=>!Pe.nullOrUndefined(t)&&!Pe.function_(t)&&Trt(t.length);Pe.inRange=(t,e)=>{if(Pe.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(Pe.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var Lrt=1,Nrt=["innerHTML","ownerDocument","style","attributes","nodeValue"];Pe.domElement=t=>Pe.object(t)&&t.nodeType===Lrt&&Pe.string(t.nodeName)&&!Pe.plainObject(t)&&Nrt.every(e=>e in t);Pe.observable=t=>{var e,r,o,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(o=t)["@@observable"])===null||a===void 0?void 0:a.call(o)):!1};Pe.nodeStream=t=>Pe.object(t)&&Pe.function_(t.pipe)&&!Pe.observable(t);Pe.infinite=t=>t===1/0||t===-1/0;var Noe=t=>e=>Pe.integer(e)&&Math.abs(e%2)===t;Pe.evenInteger=Noe(0);Pe.oddInteger=Noe(1);Pe.emptyArray=t=>Pe.array(t)&&t.length===0;Pe.nonEmptyArray=t=>Pe.array(t)&&t.length>0;Pe.emptyString=t=>Pe.string(t)&&t.length===0;var Ort=t=>Pe.string(t)&&!/\S/.test(t);Pe.emptyStringOrWhitespace=t=>Pe.emptyString(t)||Ort(t);Pe.nonEmptyString=t=>Pe.string(t)&&t.length>0;Pe.nonEmptyStringAndNotWhitespace=t=>Pe.string(t)&&!Pe.emptyStringOrWhitespace(t);Pe.emptyObject=t=>Pe.object(t)&&!Pe.map(t)&&!Pe.set(t)&&Object.keys(t).length===0;Pe.nonEmptyObject=t=>Pe.object(t)&&!Pe.map(t)&&!Pe.set(t)&&Object.keys(t).length>0;Pe.emptySet=t=>Pe.set(t)&&t.size===0;Pe.nonEmptySet=t=>Pe.set(t)&&t.size>0;Pe.emptyMap=t=>Pe.map(t)&&t.size===0;Pe.nonEmptyMap=t=>Pe.map(t)&&t.size>0;Pe.propertyKey=t=>Pe.any([Pe.string,Pe.number,Pe.symbol],t);Pe.formData=t=>ii("FormData")(t);Pe.urlSearchParams=t=>ii("URLSearchParams")(t);var Ooe=(t,e,r)=>{if(!Pe.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)};Pe.any=(t,...e)=>(Pe.array(t)?t:[t]).some(o=>Ooe(Array.prototype.some,o,e));Pe.all=(t,...e)=>Ooe(Array.prototype.every,t,e);var Mt=(t,e,r,o={})=>{if(!t){let{multipleValues:a}=o,n=a?`received values of types ${[...new Set(r.map(u=>`\`${Pe(u)}\``))].join(", ")}`:`received value of type \`${Pe(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Qf.assert={undefined:t=>Mt(Pe.undefined(t),"undefined",t),string:t=>Mt(Pe.string(t),"string",t),number:t=>Mt(Pe.number(t),"number",t),bigint:t=>Mt(Pe.bigint(t),"bigint",t),function_:t=>Mt(Pe.function_(t),"Function",t),null_:t=>Mt(Pe.null_(t),"null",t),class_:t=>Mt(Pe.class_(t),"Class",t),boolean:t=>Mt(Pe.boolean(t),"boolean",t),symbol:t=>Mt(Pe.symbol(t),"symbol",t),numericString:t=>Mt(Pe.numericString(t),"string with a number",t),array:(t,e)=>{Mt(Pe.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Mt(Pe.buffer(t),"Buffer",t),blob:t=>Mt(Pe.blob(t),"Blob",t),nullOrUndefined:t=>Mt(Pe.nullOrUndefined(t),"null or undefined",t),object:t=>Mt(Pe.object(t),"Object",t),iterable:t=>Mt(Pe.iterable(t),"Iterable",t),asyncIterable:t=>Mt(Pe.asyncIterable(t),"AsyncIterable",t),generator:t=>Mt(Pe.generator(t),"Generator",t),asyncGenerator:t=>Mt(Pe.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Mt(Pe.nativePromise(t),"native Promise",t),promise:t=>Mt(Pe.promise(t),"Promise",t),generatorFunction:t=>Mt(Pe.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Mt(Pe.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Mt(Pe.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Mt(Pe.boundFunction(t),"Function",t),regExp:t=>Mt(Pe.regExp(t),"RegExp",t),date:t=>Mt(Pe.date(t),"Date",t),error:t=>Mt(Pe.error(t),"Error",t),map:t=>Mt(Pe.map(t),"Map",t),set:t=>Mt(Pe.set(t),"Set",t),weakMap:t=>Mt(Pe.weakMap(t),"WeakMap",t),weakSet:t=>Mt(Pe.weakSet(t),"WeakSet",t),int8Array:t=>Mt(Pe.int8Array(t),"Int8Array",t),uint8Array:t=>Mt(Pe.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Mt(Pe.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Mt(Pe.int16Array(t),"Int16Array",t),uint16Array:t=>Mt(Pe.uint16Array(t),"Uint16Array",t),int32Array:t=>Mt(Pe.int32Array(t),"Int32Array",t),uint32Array:t=>Mt(Pe.uint32Array(t),"Uint32Array",t),float32Array:t=>Mt(Pe.float32Array(t),"Float32Array",t),float64Array:t=>Mt(Pe.float64Array(t),"Float64Array",t),bigInt64Array:t=>Mt(Pe.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Mt(Pe.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Mt(Pe.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Mt(Pe.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Mt(Pe.dataView(t),"DataView",t),enumCase:(t,e)=>Mt(Pe.enumCase(t,e),"EnumCase",t),urlInstance:t=>Mt(Pe.urlInstance(t),"URL",t),urlString:t=>Mt(Pe.urlString(t),"string with a URL",t),truthy:t=>Mt(Pe.truthy(t),"truthy",t),falsy:t=>Mt(Pe.falsy(t),"falsy",t),nan:t=>Mt(Pe.nan(t),"NaN",t),primitive:t=>Mt(Pe.primitive(t),"primitive",t),integer:t=>Mt(Pe.integer(t),"integer",t),safeInteger:t=>Mt(Pe.safeInteger(t),"integer",t),plainObject:t=>Mt(Pe.plainObject(t),"plain object",t),typedArray:t=>Mt(Pe.typedArray(t),"TypedArray",t),arrayLike:t=>Mt(Pe.arrayLike(t),"array-like",t),domElement:t=>Mt(Pe.domElement(t),"HTMLElement",t),observable:t=>Mt(Pe.observable(t),"Observable",t),nodeStream:t=>Mt(Pe.nodeStream(t),"Node.js Stream",t),infinite:t=>Mt(Pe.infinite(t),"infinite number",t),emptyArray:t=>Mt(Pe.emptyArray(t),"empty array",t),nonEmptyArray:t=>Mt(Pe.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Mt(Pe.emptyString(t),"empty string",t),emptyStringOrWhitespace:t=>Mt(Pe.emptyStringOrWhitespace(t),"empty string or whitespace",t),nonEmptyString:t=>Mt(Pe.nonEmptyString(t),"non-empty string",t),nonEmptyStringAndNotWhitespace:t=>Mt(Pe.nonEmptyStringAndNotWhitespace(t),"non-empty string and not whitespace",t),emptyObject:t=>Mt(Pe.emptyObject(t),"empty object",t),nonEmptyObject:t=>Mt(Pe.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Mt(Pe.emptySet(t),"empty set",t),nonEmptySet:t=>Mt(Pe.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Mt(Pe.emptyMap(t),"empty map",t),nonEmptyMap:t=>Mt(Pe.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>Mt(Pe.propertyKey(t),"PropertyKey",t),formData:t=>Mt(Pe.formData(t),"FormData",t),urlSearchParams:t=>Mt(Pe.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>Mt(Pe.evenInteger(t),"even integer",t),oddInteger:t=>Mt(Pe.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Mt(Pe.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Mt(Pe.inRange(t,e),"in range",t),any:(t,...e)=>Mt(Pe.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>Mt(Pe.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(Pe,{class:{value:Pe.class_},function:{value:Pe.function_},null:{value:Pe.null_}});Object.defineProperties(Qf.assert,{class:{value:Qf.assert.class_},function:{value:Qf.assert.function_},null:{value:Qf.assert.null_}});Qf.default=Pe;Dx.exports=Pe;Dx.exports.default=Pe;Dx.exports.assert=Qf.assert});var Moe=_((GLt,o4)=>{"use strict";var Sx=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},Px=class t{static fn(e){return(...r)=>new t((o,a,n)=>{r.push(n),e(...r).then(o,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,o)=>{this._reject=o;let a=A=>{this._isPending=!1,r(A)},n=A=>{this._isPending=!1,o(A)},u=A=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(A)};return Object.defineProperties(u,{shouldReject:{get:()=>this._rejectOnCancel,set:A=>{this._rejectOnCancel=A}}}),e(a,n,u)})}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 Sx(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(Px.prototype,Promise.prototype);o4.exports=Px;o4.exports.CancelError=Sx});var Uoe=_((l4,c4)=>{"use strict";Object.defineProperty(l4,"__esModule",{value:!0});function Mrt(t){return t.encrypted}var a4=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let o=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",u=()=>{o&&r.connect(),Mrt(t)&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?u():t.connecting?t.once("connect",u):t.destroyed&&n&&r.close(t._hadError)};l4.default=a4;c4.exports=a4;c4.exports.default=a4});var _oe=_((A4,f4)=>{"use strict";Object.defineProperty(A4,"__esModule",{value:!0});var Urt=Uoe(),_rt=Number(process.versions.node.split(".")[0]),u4=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=u=>{let A=u.emit.bind(u);u.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,u.emit=A),A(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||_rt>=13)&&(e.phases.total=Date.now()-e.start)});let o=u=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let A=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};u.prependOnceListener("lookup",A),Urt.default(u,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(u.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?o(t.socket):t.prependOnceListener("socket",o);let a=()=>{var u;e.upload=Date.now(),e.phases.request=e.upload-(u=e.secureConnect,u??e.connect)};return(typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))?a():t.prependOnceListener("finish",a),t.prependOnceListener("response",u=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,u.timings=e,r(u),u.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};A4.default=u4;f4.exports=u4;f4.exports.default=u4});var Voe=_((WLt,g4)=>{"use strict";var{V4MAPPED:Hrt,ADDRCONFIG:qrt,ALL:Yoe,promises:{Resolver:Hoe},lookup:jrt}=ve("dns"),{promisify:p4}=ve("util"),Grt=ve("os"),Cy=Symbol("cacheableLookupCreateConnection"),h4=Symbol("cacheableLookupInstance"),qoe=Symbol("expires"),Wrt=typeof Yoe=="number",joe=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},Yrt=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},Goe=()=>{let t=!1,e=!1;for(let r of Object.values(Grt.networkInterfaces()))for(let o of r)if(!o.internal&&(o.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},Vrt=t=>Symbol.iterator in t,Woe={ttl:!0},Krt={all:!0},xx=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:o=3600,errorTtl:a=.15,resolver:n=new Hoe,lookup:u=jrt}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=p4(u),this._resolver instanceof Hoe?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=p4(this._resolver.resolve4.bind(this._resolver)),this._resolve6=p4(this._resolver.resolve6.bind(this._resolver))),this._iface=Goe(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,o<1)this._fallback=!1;else{this._fallback=!0;let A=setInterval(()=>{this._hostnamesToFallback.clear()},o*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,o){if(typeof r=="function"?(o=r,r={}):typeof r=="number"&&(r={family:r}),!o)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?o(null,a):o(null,a.address,a.family,a.expires,a.ttl)},o)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let o=await this.query(e);if(r.family===6){let a=o.filter(n=>n.family===6);r.hints&Hrt&&(Wrt&&r.hints&Yoe||a.length===0)?Yrt(o):o=a}else r.family===4&&(o=o.filter(a=>a.family===4));if(r.hints&qrt){let{_iface:a}=this;o=o.filter(n=>n.family===6?a.has6:a.has4)}if(o.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?o:o[0]}async query(e){let r=await this._cache.get(e);if(!r){let o=this._pending[e];if(o)r=await o;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(o=>({...o})),r}async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code==="ENODATA"||E.code==="ENOTFOUND")return[];throw E}},[o,a]=await Promise.all([this._resolve4(e,Woe),this._resolve6(e,Woe)].map(h=>r(h))),n=0,u=0,A=0,p=Date.now();for(let h of o)h.family=4,h.expires=p+h.ttl*1e3,n=Math.max(n,h.ttl);for(let h of a)h.family=6,h.expires=p+h.ttl*1e3,u=Math.max(u,h.ttl);return o.length>0?a.length>0?A=Math.min(n,u):A=n:A=u,{entries:[...o,...a],cacheTtl:A}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,o){if(this.maxTtl>0&&o>0){o=Math.min(o,this.maxTtl)*1e3,r[qoe]=Date.now()+o;try{await this._cache.set(e,r,o)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}Vrt(this._cache)&&this._tick(o)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,Krt);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 o=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,o),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 o=1/0,a=Date.now();for(let[n,u]of this._cache){let A=u[qoe];a>=A?this._cache.delete(n):A("lookup"in r||(r.lookup=this.lookup),e[Cy](r,o))}uninstall(e){if(joe(e),e[Cy]){if(e[h4]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[Cy],delete e[Cy],delete e[h4]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=Goe(),(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()}};g4.exports=xx;g4.exports.default=xx});var zoe=_((YLt,d4)=>{"use strict";var Jrt=typeof URL>"u"?ve("url").URL:URL,zrt="text/plain",Xrt="us-ascii",Koe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),Zrt=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let o=r[1].split(";"),a=r[2],n=e?"":r[3],u=!1;o[o.length-1]==="base64"&&(o.pop(),u=!0);let A=(o.shift()||"").toLowerCase(),h=[...o.map(E=>{let[w,D=""]=E.split("=").map(b=>b.trim());return w==="charset"&&(D=D.toLowerCase(),D===Xrt)?"":`${w}${D?`=${D}`:""}`}).filter(Boolean)];return u&&h.push("base64"),(h.length!==0||A&&A!==zrt)&&h.unshift(A),`data:${h.join(";")},${u?a.trim():a}${n?`#${n}`:""}`},Joe=(t,e)=>{if(e={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 Zrt(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new Jrt(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(n,u)=>/^(?!\/)/g.test(u)?`${u}/`:"/")),a.pathname&&(a.pathname=decodeURI(a.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let n=a.pathname.split("/"),u=n[n.length-1];Koe(u,e.removeDirectoryIndex)&&(n=n.slice(0,n.length-1),a.pathname=n.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let n of[...a.searchParams.keys()])Koe(n,e.removeQueryParameters)&&a.searchParams.delete(n);return e.sortQueryParameters&&a.searchParams.sort(),e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,"")),t=a.toString(),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};d4.exports=Joe;d4.exports.default=Joe});var $oe=_((VLt,Zoe)=>{Zoe.exports=Xoe;function Xoe(t,e){if(t&&e)return Xoe(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(o){r[o]=t[o]}),r;function r(){for(var o=new Array(arguments.length),a=0;a{var eae=$oe();m4.exports=eae(bx);m4.exports.strict=eae(tae);bx.proto=bx(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return bx(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return tae(this)},configurable:!0})});function bx(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function tae(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 E4=_((JLt,nae)=>{var $rt=y4(),ent=function(){},tnt=function(t){return t.setHeader&&typeof t.abort=="function"},rnt=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},rae=function(t,e,r){if(typeof e=="function")return rae(t,null,e);e||(e={}),r=$rt(r||ent);var o=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,u=e.writable||e.writable!==!1&&t.writable,A=function(){t.writable||p()},p=function(){u=!1,n||r.call(t)},h=function(){n=!1,u||r.call(t)},E=function(C){r.call(t,C?new Error("exited with error code: "+C):null)},w=function(C){r.call(t,C)},D=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(u&&!(o&&o.ended))return r.call(t,new Error("premature close"))},b=function(){t.req.on("finish",p)};return tnt(t)?(t.on("complete",p),t.on("abort",D),t.req?b():t.on("request",b)):u&&!o&&(t.on("end",A),t.on("close",A)),rnt(t)&&t.on("exit",E),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",w),t.on("close",D),function(){t.removeListener("complete",p),t.removeListener("abort",D),t.removeListener("request",b),t.req&&t.req.removeListener("finish",p),t.removeListener("end",A),t.removeListener("close",A),t.removeListener("finish",p),t.removeListener("exit",E),t.removeListener("end",h),t.removeListener("error",w),t.removeListener("close",D)}};nae.exports=rae});var oae=_((zLt,sae)=>{var nnt=y4(),int=E4(),C4=ve("fs"),Q1=function(){},snt=/^v?\.0/.test(process.version),kx=function(t){return typeof t=="function"},ont=function(t){return!snt||!C4?!1:(t instanceof(C4.ReadStream||Q1)||t instanceof(C4.WriteStream||Q1))&&kx(t.close)},ant=function(t){return t.setHeader&&kx(t.abort)},lnt=function(t,e,r,o){o=nnt(o);var a=!1;t.on("close",function(){a=!0}),int(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,ont(t))return t.close(Q1);if(ant(t))return t.abort();if(kx(t.destroy))return t.destroy();o(u||new Error("stream was destroyed"))}}},iae=function(t){t()},cnt=function(t,e){return t.pipe(e)},unt=function(){var t=Array.prototype.slice.call(arguments),e=kx(t[t.length-1]||Q1)&&t.pop()||Q1;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,o=t.map(function(a,n){var u=n0;return lnt(a,u,A,function(p){r||(r=p),p&&o.forEach(iae),!u&&(o.forEach(iae),e(r))})});return t.reduce(cnt)};sae.exports=unt});var lae=_((XLt,aae)=>{"use strict";var{PassThrough:Ant}=ve("stream");aae.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,o=r==="buffer",a=!1;e?a=!(r||o):r=r||"utf8",o&&(r=null);let n=new Ant({objectMode:a});r&&n.setEncoding(r);let u=0,A=[];return n.on("data",p=>{A.push(p),a?u=A.length:u+=p.length}),n.getBufferedValue=()=>e?A:o?Buffer.concat(A,u):A.join(""),n.getBufferedLength=()=>u,n}});var cae=_((ZLt,Iy)=>{"use strict";var fnt=oae(),pnt=lae(),Qx=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function Fx(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,o;return await new Promise((a,n)=>{let u=A=>{A&&(A.bufferedData=o.getBufferedValue()),n(A)};o=fnt(t,pnt(e),A=>{if(A){u(A);return}a()}),o.on("data",()=>{o.getBufferedLength()>r&&u(new Qx)})}),o.getBufferedValue()}Iy.exports=Fx;Iy.exports.default=Fx;Iy.exports.buffer=(t,e)=>Fx(t,{...e,encoding:"buffer"});Iy.exports.array=(t,e)=>Fx(t,{...e,array:!0});Iy.exports.MaxBufferError=Qx});var Aae=_((eNt,uae)=>{"use strict";var hnt=new Set([200,203,204,206,300,301,308,404,405,410,414,501]),gnt=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),dnt=new Set([500,502,503,504]),mnt={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},ynt={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function Pg(t){let e=parseInt(t,10);return isFinite(e)?e:0}function Ent(t){return t?dnt.has(t.status):!0}function I4(t){let e={};if(!t)return e;let r=t.trim().split(/,/);for(let o of r){let[a,n]=o.split(/=/,2);e[a.trim()]=n===void 0?!0:n.trim().replace(/^"|"$/g,"")}return e}function Cnt(t){let e=[];for(let r in t){let o=t[r];e.push(o===!0?r:r+"="+o)}if(e.length)return e.join(", ")}uae.exports=class{constructor(e,r,{shared:o,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:u,_fromObject:A}={}){if(A){this._fromObject(A);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=o!==!1,this._cacheHeuristic=a!==void 0?a:.1,this._immutableMinTtl=n!==void 0?n:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=I4(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=I4(e.headers["cache-control"]),u&&"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":Cnt(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),r.headers["cache-control"]==null&&/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())&&gnt.has(this._status)&&!this._rescc["no-store"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc["max-age"]||this._isShared&&this._rescc["s-maxage"]||this._rescc.public||hnt.has(this._status)))}_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=I4(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 o of r)if(e.headers[o]!==this._reqHeaders[o])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let o in e)mnt[o]||(r[o]=e[o]);if(e.connection){let o=e.connection.trim().split(/\s*,\s*/);for(let a of o)delete r[a]}if(r.warning){let o=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));o.length?r.warning=o.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(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){return Pg(this._resHeaders.age)}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 Pg(this._rescc["s-maxage"])}if(this._rescc["max-age"])return Pg(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let o=Date.parse(this._resHeaders.expires);return Number.isNaN(o)||oo)return Math.max(e,(r-o)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+Pg(this._rescc["stale-if-error"]),o=e+Pg(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,o)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Pg(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Pg(this._rescc["stale-while-revalidate"])>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 a=r["if-none-match"].split(/,/).filter(n=>!/^\s*W\//.test(n));a.length?r["if-none-match"]=a.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),this._useStaleIfError()&&Ent(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let o=!1;if(r.status!==void 0&&r.status!=304?o=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?o=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?o=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?o=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(o=!0),!o)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let u in this._resHeaders)a[u]=u in r.headers&&!ynt[u]?r.headers[u]:this._resHeaders[u];let n=Object.assign({},r,{status:this._status,method:this._method,headers:a});return{policy:new this.constructor(e,n,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var Rx=_((tNt,fae)=>{"use strict";fae.exports=t=>{let e={};for(let[r,o]of Object.entries(t))e[r.toLowerCase()]=o;return e}});var hae=_((rNt,pae)=>{"use strict";var Int=ve("stream").Readable,wnt=Rx(),w4=class extends Int{constructor(e,r,o,a){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(!(o instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof a!="string")throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=wnt(r),this.body=o,this.url=a}_read(){this.push(this.body),this.push(null)}};pae.exports=w4});var dae=_((nNt,gae)=>{"use strict";var Bnt=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];gae.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(Bnt));for(let o of r)o in e||(e[o]=typeof t[o]=="function"?t[o].bind(t):t[o])}});var yae=_((iNt,mae)=>{"use strict";var vnt=ve("stream").PassThrough,Dnt=dae(),Snt=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new vnt;return Dnt(t,e),t.pipe(e)};mae.exports=Snt});var Eae=_(B4=>{B4.stringify=function t(e){if(typeof e>"u")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="",o=Array.isArray(e);r=o?"[":"{";var a=!0;for(var n in e){var u=typeof e[n]=="function"||!o&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!u&&(a||(r+=","),a=!1,o?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=o?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};B4.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 Bae=_((oNt,wae)=>{"use strict";var Pnt=ve("events"),Cae=Eae(),xnt=t=>{let e={redis:"@keyv/redis",rediss:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql",etcd:"@keyv/etcd",offline:"@keyv/offline",tiered:"@keyv/tiered"};if(t.adapter||t.uri){let r=t.adapter||/^[^:+]*/.exec(t.uri)[0];return new(ve(e[r]))(t)}return new Map},Iae=["sqlite","postgres","mysql","mongo","redis","tiered"],v4=class extends Pnt{constructor(e,{emitErrors:r=!0,...o}={}){if(super(),this.opts={namespace:"keyv",serialize:Cae.stringify,deserialize:Cae.parse,...typeof e=="string"?{uri:e}:e,...o},!this.opts.store){let n={...this.opts};this.opts.store=xnt(n)}if(this.opts.compression){let n=this.opts.compression;this.opts.serialize=n.serialize.bind(n),this.opts.deserialize=n.deserialize.bind(n)}typeof this.opts.store.on=="function"&&r&&this.opts.store.on("error",n=>this.emit("error",n)),this.opts.store.namespace=this.opts.namespace;let a=n=>async function*(){for await(let[u,A]of typeof n=="function"?n(this.opts.store.namespace):n){let p=await this.opts.deserialize(A);if(!(this.opts.store.namespace&&!u.includes(this.opts.store.namespace))){if(typeof p.expires=="number"&&Date.now()>p.expires){this.delete(u);continue}yield[this._getKeyUnprefix(u),p.value]}}};typeof this.opts.store[Symbol.iterator]=="function"&&this.opts.store instanceof Map?this.iterator=a(this.opts.store):typeof this.opts.store.iterator=="function"&&this.opts.store.opts&&this._checkIterableAdaptar()&&(this.iterator=a(this.opts.store.iterator.bind(this.opts.store)))}_checkIterableAdaptar(){return Iae.includes(this.opts.store.opts.dialect)||Iae.findIndex(e=>this.opts.store.opts.url.includes(e))>=0}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}_getKeyPrefixArray(e){return e.map(r=>`${this.opts.namespace}:${r}`)}_getKeyUnprefix(e){return e.split(":").splice(1).join(":")}get(e,r){let{store:o}=this.opts,a=Array.isArray(e),n=a?this._getKeyPrefixArray(e):this._getKeyPrefix(e);if(a&&o.getMany===void 0){let u=[];for(let A of n)u.push(Promise.resolve().then(()=>o.get(A)).then(p=>typeof p=="string"?this.opts.deserialize(p):this.opts.compression?this.opts.deserialize(p):p).then(p=>{if(p!=null)return typeof p.expires=="number"&&Date.now()>p.expires?this.delete(A).then(()=>{}):r&&r.raw?p:p.value}));return Promise.allSettled(u).then(A=>{let p=[];for(let h of A)p.push(h.value);return p})}return Promise.resolve().then(()=>a?o.getMany(n):o.get(n)).then(u=>typeof u=="string"?this.opts.deserialize(u):this.opts.compression?this.opts.deserialize(u):u).then(u=>{if(u!=null)return a?u.map((A,p)=>{if(typeof A=="string"&&(A=this.opts.deserialize(A)),A!=null){if(typeof A.expires=="number"&&Date.now()>A.expires){this.delete(e[p]).then(()=>{});return}return r&&r.raw?A:A.value}}):typeof u.expires=="number"&&Date.now()>u.expires?this.delete(e).then(()=>{}):r&&r.raw?u:u.value})}set(e,r,o){let a=this._getKeyPrefix(e);typeof o>"u"&&(o=this.opts.ttl),o===0&&(o=void 0);let{store:n}=this.opts;return Promise.resolve().then(()=>{let u=typeof o=="number"?Date.now()+o:null;return typeof r=="symbol"&&this.emit("error","symbol cannot be serialized"),r={value:r,expires:u},this.opts.serialize(r)}).then(u=>n.set(a,u,o)).then(()=>!0)}delete(e){let{store:r}=this.opts;if(Array.isArray(e)){let a=this._getKeyPrefixArray(e);if(r.deleteMany===void 0){let n=[];for(let u of a)n.push(r.delete(u));return Promise.allSettled(n).then(u=>u.every(A=>A.value===!0))}return Promise.resolve().then(()=>r.deleteMany(a))}let o=this._getKeyPrefix(e);return Promise.resolve().then(()=>r.delete(o))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}has(e){let r=this._getKeyPrefix(e),{store:o}=this.opts;return Promise.resolve().then(async()=>typeof o.has=="function"?o.has(r):await o.get(r)!==void 0)}disconnect(){let{store:e}=this.opts;if(typeof e.disconnect=="function")return e.disconnect()}};wae.exports=v4});var Sae=_((lNt,Dae)=>{"use strict";var bnt=ve("events"),Tx=ve("url"),knt=zoe(),Qnt=cae(),D4=Aae(),vae=hae(),Fnt=Rx(),Rnt=yae(),Tnt=Bae(),F1=class t{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new Tnt({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,o)=>{let a;if(typeof r=="string")a=S4(Tx.parse(r)),r={};else if(r instanceof Tx.URL)a=S4(Tx.parse(r.toString())),r={};else{let[w,...D]=(r.path||"").split("?"),b=D.length>0?`?${D.join("?")}`:"";a=S4({...r,pathname:w,search:b})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...Lnt(a)},r.headers=Fnt(r.headers);let n=new bnt,u=knt(Tx.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),A=`${r.method}:${u}`,p=!1,h=!1,E=w=>{h=!0;let D=!1,b,C=new Promise(N=>{b=()=>{D||(D=!0,N())}}),T=N=>{if(p&&!w.forceRefresh){N.status=N.statusCode;let J=D4.fromObject(p.cachePolicy).revalidatedPolicy(w,N);if(!J.modified){let te=J.policy.responseHeaders();N=new vae(p.statusCode,te,p.body,p.url),N.cachePolicy=J.policy,N.fromCache=!0}}N.fromCache||(N.cachePolicy=new D4(w,N,w),N.fromCache=!1);let U;w.cache&&N.cachePolicy.storable()?(U=Rnt(N),(async()=>{try{let J=Qnt.buffer(N);if(await Promise.race([C,new Promise(ue=>N.once("end",ue))]),D)return;let te=await J,le={cachePolicy:N.cachePolicy.toObject(),url:N.url,statusCode:N.fromCache?p.statusCode:N.statusCode,body:te},ce=w.strictTtl?N.cachePolicy.timeToLive():void 0;w.maxTtl&&(ce=ce?Math.min(ce,w.maxTtl):w.maxTtl),await this.cache.set(A,le,ce)}catch(J){n.emit("error",new t.CacheError(J))}})()):w.cache&&p&&(async()=>{try{await this.cache.delete(A)}catch(J){n.emit("error",new t.CacheError(J))}})(),n.emit("response",U||N),typeof o=="function"&&o(U||N)};try{let N=e(w,T);N.once("error",b),N.once("abort",b),n.emit("request",N)}catch(N){n.emit("error",new t.RequestError(N))}};return(async()=>{let w=async b=>{await Promise.resolve();let C=b.cache?await this.cache.get(A):void 0;if(typeof C>"u")return E(b);let T=D4.fromObject(C.cachePolicy);if(T.satisfiesWithoutRevalidation(b)&&!b.forceRefresh){let N=T.responseHeaders(),U=new vae(C.statusCode,N,C.body,C.url);U.cachePolicy=T,U.fromCache=!0,n.emit("response",U),typeof o=="function"&&o(U)}else p=C,b.headers=T.revalidationHeaders(b),E(b)},D=b=>n.emit("error",new t.CacheError(b));this.cache.once("error",D),n.on("response",()=>this.cache.removeListener("error",D));try{await w(r)}catch(b){r.automaticFailover&&!h&&E(r),n.emit("error",new t.CacheError(b))}})(),n}}};function Lnt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function S4(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}F1.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};F1.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};Dae.exports=F1});var xae=_((ANt,Pae)=>{"use strict";var Nnt=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];Pae.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(Nnt)),o={};for(let a of r)a in e||(o[a]={get(){let n=t[a];return typeof n=="function"?n.bind(t):n},set(n){t[a]=n},enumerable:!0,configurable:!1});return Object.defineProperties(e,o),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 kae=_((fNt,bae)=>{"use strict";var{Transform:Ont,PassThrough:Mnt}=ve("stream"),P4=ve("zlib"),Unt=xae();bae.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof P4.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let o=!0,a=new Ont({transform(A,p,h){o=!1,h(null,A)},flush(A){A()}}),n=new Mnt({autoDestroy:!1,destroy(A,p){t.destroy(),p(A)}}),u=r?P4.createBrotliDecompress():P4.createUnzip();return u.once("error",A=>{if(o&&!t.readable){n.end();return}n.destroy(A)}),Unt(t,n),t.pipe(a).pipe(u).pipe(n),n}});var b4=_((pNt,Qae)=>{"use strict";var x4=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[o,a]of this.oldCache.entries())this.onEviction(o,a);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)}};Qae.exports=x4});var Q4=_((hNt,Lae)=>{"use strict";var _nt=ve("events"),Hnt=ve("tls"),qnt=ve("http2"),jnt=b4(),ea=Symbol("currentStreamsCount"),Fae=Symbol("request"),Jl=Symbol("cachedOriginSet"),wy=Symbol("gracefullyClosing"),Gnt=["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"],Wnt=(t,e,r)=>{let o=0,a=t.length;for(;o>>1;r(t[n],e)?o=n+1:a=n}return o},Ynt=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,k4=(t,e)=>{for(let r of t)r[Jl].lengthe[Jl].includes(o))&&r[ea]+e[ea]<=e.remoteSettings.maxConcurrentStreams&&Tae(r)},Vnt=(t,e)=>{for(let r of t)e[Jl].lengthr[Jl].includes(o))&&e[ea]+r[ea]<=r.remoteSettings.maxConcurrentStreams&&Tae(e)},Rae=({agent:t,isFree:e})=>{let r={};for(let o in t.sessions){let n=t.sessions[o].filter(u=>{let A=u[xg.kCurrentStreamsCount]{t[wy]=!0,t[ea]===0&&t.close()},xg=class t extends _nt{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:o=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=o,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new jnt({maxSize:a})}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 o of Gnt)e[o]&&(r+=`:${e[o]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let o=this.queue[e][r];this._sessionsCount{Array.isArray(o)?(o=[...o],a()):o=[{resolve:a,reject:n}];let u=this.normalizeOptions(r),A=t.normalizeOrigin(e,r&&r.servername);if(A===void 0){for(let{reject:E}of o)E(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(u in this.sessions){let E=this.sessions[u],w=-1,D=-1,b;for(let C of E){let T=C.remoteSettings.maxConcurrentStreams;if(T=T||C[wy]||C.destroyed)continue;b||(w=T),N>D&&(b=C,D=N)}}if(b){if(o.length!==1){for(let{reject:C}of o){let T=new Error(`Expected the length of listeners to be 1, got ${o.length}. +Please report this to https://github.com/szmarczak/http2-wrapper/`);C(T)}return}o[0].resolve(b);return}}if(u in this.queue){if(A in this.queue[u]){this.queue[u][A].listeners.push(...o),this._tryToCreateNewSession(u,A);return}}else this.queue[u]={};let p=()=>{u in this.queue&&this.queue[u][A]===h&&(delete this.queue[u][A],Object.keys(this.queue[u]).length===0&&delete this.queue[u])},h=()=>{let E=`${A}:${u}`,w=!1;try{let D=qnt.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(E),...r});D[ea]=0,D[wy]=!1;let b=()=>D[ea]{this.tlsSessionCache.set(E,N)}),D.once("error",N=>{for(let{reject:U}of o)U(N);this.tlsSessionCache.delete(E)}),D.setTimeout(this.timeout,()=>{D.destroy()}),D.once("close",()=>{if(w){C&&this._freeSessionsCount--,this._sessionsCount--;let N=this.sessions[u];N.splice(N.indexOf(D),1),N.length===0&&delete this.sessions[u]}else{let N=new Error("Session closed without receiving a SETTINGS frame");N.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of o)U(N);p()}this._tryToCreateNewSession(u,A)});let T=()=>{if(!(!(u in this.queue)||!b())){for(let N of D[Jl])if(N in this.queue[u]){let{listeners:U}=this.queue[u][N];for(;U.length!==0&&b();)U.shift().resolve(D);let J=this.queue[u];if(J[N].listeners.length===0&&(delete J[N],Object.keys(J).length===0)){delete this.queue[u];break}if(!b())break}}};D.on("origin",()=>{D[Jl]=D.originSet,b()&&(T(),k4(this.sessions[u],D))}),D.once("remoteSettings",()=>{if(D.ref(),D.unref(),this._sessionsCount++,h.destroyed){let N=new Error("Agent has been destroyed");for(let U of o)U.reject(N);D.destroy();return}D[Jl]=D.originSet;{let N=this.sessions;if(u in N){let U=N[u];U.splice(Wnt(U,D,Ynt),0,D)}else N[u]=[D]}this._freeSessionsCount+=1,w=!0,this.emit("session",D),T(),p(),D[ea]===0&&this._freeSessionsCount>this.maxFreeSessions&&D.close(),o.length!==0&&(this.getSession(A,r,o),o.length=0),D.on("remoteSettings",()=>{T(),k4(this.sessions[u],D)})}),D[Fae]=D.request,D.request=(N,U)=>{if(D[wy])throw new Error("The session is gracefully closing. No new streams are allowed.");let J=D[Fae](N,U);return D.ref(),++D[ea],D[ea]===D.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,J.once("close",()=>{if(C=b(),--D[ea],!D.destroyed&&!D.closed&&(Vnt(this.sessions[u],D),b()&&!D.closed)){C||(this._freeSessionsCount++,C=!0);let te=D[ea]===0;te&&D.unref(),te&&(this._freeSessionsCount>this.maxFreeSessions||D[wy])?D.close():(k4(this.sessions[u],D),T())}}),J}}catch(D){for(let b of o)b.reject(D);p()}};h.listeners=o,h.completed=!1,h.destroyed=!1,this.queue[u][A]=h,this._tryToCreateNewSession(u,A)})}request(e,r,o,a){return new Promise((n,u)=>{this.getSession(e,r,[{reject:u,resolve:A=>{try{n(A.request(o,a))}catch(p){u(p)}}}])})}createConnection(e,r){return t.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let o=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),Hnt.connect(o,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[ea]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let o of r)o.destroy(e);for(let r of Object.values(this.queue))for(let o of Object.values(r))o.destroyed=!0;this.queue={}}get freeSessions(){return Rae({agent:this,isFree:!0})}get busySessions(){return Rae({agent:this,isFree:!1})}};xg.kCurrentStreamsCount=ea;xg.kGracefullyClosing=wy;Lae.exports={Agent:xg,globalAgent:new xg}});var R4=_((gNt,Nae)=>{"use strict";var{Readable:Knt}=ve("stream"),F4=class extends Knt{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()}};Nae.exports=F4});var T4=_((dNt,Oae)=>{"use strict";Oae.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 Uae=_((mNt,Mae)=>{"use strict";Mae.exports=(t,e,r)=>{for(let o of r)t.on(o,(...a)=>e.emit(o,...a))}});var Hae=_((yNt,_ae)=>{"use strict";_ae.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var jae=_((CNt,qae)=>{"use strict";var By=(t,e,r)=>{qae.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};By(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],o=Array.isArray(r);return o&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${o?"one of":"of"} type ${r}. Received ${typeof t[2]}`});By(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);By(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);By(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);By(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);By(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var U4=_((INt,zae)=>{"use strict";var Jnt=ve("http2"),{Writable:znt}=ve("stream"),{Agent:Gae,globalAgent:Xnt}=Q4(),Znt=R4(),$nt=T4(),eit=Uae(),tit=Hae(),{ERR_INVALID_ARG_TYPE:L4,ERR_INVALID_PROTOCOL:rit,ERR_HTTP_HEADERS_SENT:Wae,ERR_INVALID_HTTP_TOKEN:nit,ERR_HTTP_INVALID_HEADER_VALUE:iit,ERR_INVALID_CHAR:sit}=jae(),{HTTP2_HEADER_STATUS:Yae,HTTP2_HEADER_METHOD:Vae,HTTP2_HEADER_PATH:Kae,HTTP2_METHOD_CONNECT:oit}=Jnt.constants,vo=Symbol("headers"),N4=Symbol("origin"),O4=Symbol("session"),Jae=Symbol("options"),Lx=Symbol("flushedHeaders"),R1=Symbol("jobs"),ait=/^[\^`\-\w!#$%&*+.|~]+$/,lit=/[^\t\u0020-\u007E\u0080-\u00FF]/,M4=class extends znt{constructor(e,r,o){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=$nt(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(o=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[O4]=r.h2session;else if(r.agent===!1)this.agent=new Gae({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new Gae({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=Xnt;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new L4("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new rit(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,u=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:A}=r;if(r.timeout=void 0,this[vo]=Object.create(null),this[R1]=[],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[p,h]of Object.entries(r.headers))this.setHeader(p,h);r.auth&&!("authorization"in this[vo])&&(this[vo].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[Jae]=r,n===443?(this[N4]=`https://${u}`,":authority"in this[vo]||(this[vo][":authority"]=u)):(this[N4]=`https://${u}:${n}`,":authority"in this[vo]||(this[vo][":authority"]=`${u}:${n}`)),A&&this.setTimeout(A),o&&this.once("response",o),this[Lx]=!1}get method(){return this[vo][Vae]}set method(e){e&&(this[vo][Vae]=e.toUpperCase())}get path(){return this[vo][Kae]}set path(e){e&&(this[vo][Kae]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,o){if(this._mustNotHaveABody){o(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,o);this._request?a():this[R1].push(a)}_final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?r():this[R1].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[Lx]||this.destroyed)return;this[Lx]=!0;let e=this.method===oit,r=o=>{if(this._request=o,this.destroyed){o.destroy();return}e||eit(o,this,["timeout","continue","close","error"]);let a=u=>(...A)=>{!this.writable&&!this.destroyed?u(...A):this.once("finish",()=>{u(...A)})};o.once("response",a((u,A,p)=>{let h=new Znt(this.socket,o.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=u[Yae],h.headers=u,h.rawHeaders=p,h.once("end",()=>{this.aborted?(h.aborted=!0,h.emit("aborted")):(h.complete=!0,h.socket=null,h.connection=null)}),e?(h.upgrade=!0,this.emit("connect",h,o,Buffer.alloc(0))?this.emit("close"):o.destroy()):(o.on("data",E=>{!h._dumped&&!h.push(E)&&o.pause()}),o.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),o.once("headers",a(u=>this.emit("information",{statusCode:u[Yae]}))),o.once("trailers",a((u,A,p)=>{let{res:h}=this;h.trailers=u,h.rawTrailers=p}));let{socket:n}=o.session;this.socket=n,this.connection=n;for(let u of this[R1])u();this.emit("socket",this.socket)};if(this[O4])try{r(this[O4].request(this[vo]))}catch(o){this.emit("error",o)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[N4],this[Jae],this[vo]))}catch(o){this.emit("error",o)}}}getHeader(e){if(typeof e!="string")throw new L4("name","string",e);return this[vo][e.toLowerCase()]}get headersSent(){return this[Lx]}removeHeader(e){if(typeof e!="string")throw new L4("name","string",e);if(this.headersSent)throw new Wae("remove");delete this[vo][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new Wae("set");if(typeof e!="string"||!ait.test(e)&&!tit(e))throw new nit("Header name",e);if(typeof r>"u")throw new iit(r,e);if(lit.test(r))throw new sit("header content",e);this[vo][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let o=()=>this._request.setTimeout(e,r);return this._request?o():this[R1].push(o),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};zae.exports=M4});var Zae=_((wNt,Xae)=>{"use strict";var cit=ve("tls");Xae.exports=(t={},e=cit.connect)=>new Promise((r,o)=>{let a=!1,n,u=async()=>{await p,n.off("timeout",A),n.off("error",o),t.resolveSocket?(r({alpnProtocol:n.alpnProtocol,socket:n,timeout:a}),a&&(await Promise.resolve(),n.emit("timeout"))):(n.destroy(),r({alpnProtocol:n.alpnProtocol,timeout:a}))},A=async()=>{a=!0,u()},p=(async()=>{try{n=await e(t,u),n.on("error",o),n.once("timeout",A)}catch(h){o(h)}})()})});var ele=_((BNt,$ae)=>{"use strict";var uit=ve("net");$ae.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]),uit.isIP(e)?"":e}});var nle=_((vNt,H4)=>{"use strict";var tle=ve("http"),_4=ve("https"),Ait=Zae(),fit=b4(),pit=U4(),hit=ele(),git=T4(),Nx=new fit({maxSize:100}),T1=new Map,rle=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let o=()=>{t.emit("free",e,r)};e.on("free",o);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",o),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},dit=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!Nx.has(e)){if(T1.has(e))return(await T1.get(e)).alpnProtocol;let{path:r,agent:o}=t;t.path=t.socketPath;let a=Ait(t);T1.set(e,a);try{let{socket:n,alpnProtocol:u}=await a;if(Nx.set(e,u),t.path=r,u==="h2")n.destroy();else{let{globalAgent:A}=_4,p=_4.Agent.prototype.createConnection;o?o.createConnection===p?rle(o,n,t):n.destroy():A.createConnection===p?rle(A,n,t):n.destroy()}return T1.delete(e),u}catch(n){throw T1.delete(e),n}}return Nx.get(e)};H4.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=git(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e={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 o=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||hit(e),e.port=e.port||(o?443:80),e._defaultAgent=o?_4.globalAgent:tle.globalAgent;let a=e.agent;if(a){if(a.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=a[o?"https":"http"]}return o&&await dit(e)==="h2"?(a&&(e.agent=a.http2),new pit(e,r)):tle.request(e,r)};H4.exports.protocolCache=Nx});var sle=_((DNt,ile)=>{"use strict";var mit=ve("http2"),yit=Q4(),q4=U4(),Eit=R4(),Cit=nle(),Iit=(t,e,r)=>new q4(t,e,r),wit=(t,e,r)=>{let o=new q4(t,e,r);return o.end(),o};ile.exports={...mit,ClientRequest:q4,IncomingMessage:Eit,...yit,request:Iit,get:wit,auto:Cit}});var G4=_(j4=>{"use strict";Object.defineProperty(j4,"__esModule",{value:!0});var ole=Ff();j4.default=t=>ole.default.nodeStream(t)&&ole.default.function_(t.getBoundary)});var ule=_(W4=>{"use strict";Object.defineProperty(W4,"__esModule",{value:!0});var lle=ve("fs"),cle=ve("util"),ale=Ff(),Bit=G4(),vit=cle.promisify(lle.stat);W4.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(ale.default.string(t))return Buffer.byteLength(t);if(ale.default.buffer(t))return t.length;if(Bit.default(t))return cle.promisify(t.getLength.bind(t))();if(t instanceof lle.ReadStream){let{size:r}=await vit(t.path);return r===0?void 0:r}}});var V4=_(Y4=>{"use strict";Object.defineProperty(Y4,"__esModule",{value:!0});function Dit(t,e,r){let o={};for(let a of r)o[a]=(...n)=>{e.emit(a,...n)},t.on(a,o[a]);return()=>{for(let a of r)t.off(a,o[a])}}Y4.default=Dit});var Ale=_(K4=>{"use strict";Object.defineProperty(K4,"__esModule",{value:!0});K4.default=()=>{let t=[];return{once(e,r,o){e.once(r,o),t.push({origin:e,event:r,fn:o})},unhandleAll(){for(let e of t){let{origin:r,event:o,fn:a}=e;r.removeListener(o,a)}t.length=0}}}});var ple=_(L1=>{"use strict";Object.defineProperty(L1,"__esModule",{value:!0});L1.TimeoutError=void 0;var Sit=ve("net"),Pit=Ale(),fle=Symbol("reentry"),xit=()=>{},Ox=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};L1.TimeoutError=Ox;L1.default=(t,e,r)=>{if(fle in t)return xit;t[fle]=!0;let o=[],{once:a,unhandleAll:n}=Pit.default(),u=(w,D,b)=>{var C;let T=setTimeout(D,w,w,b);(C=T.unref)===null||C===void 0||C.call(T);let N=()=>{clearTimeout(T)};return o.push(N),N},{host:A,hostname:p}=r,h=(w,D)=>{t.destroy(new Ox(w,D))},E=()=>{for(let w of o)w();n()};if(t.once("error",w=>{if(E(),t.listenerCount("error")===0)throw w}),t.once("close",E),a(t,"response",w=>{a(w,"end",E)}),typeof e.request<"u"&&u(e.request,h,"request"),typeof e.socket<"u"){let w=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,w),o.push(()=>{t.removeListener("timeout",w)})}return a(t,"socket",w=>{var D;let{socketPath:b}=t;if(w.connecting){let C=!!(b??Sit.isIP((D=p??A)!==null&&D!==void 0?D:"")!==0);if(typeof e.lookup<"u"&&!C&&typeof w.address().address>"u"){let T=u(e.lookup,h,"lookup");a(w,"lookup",T)}if(typeof e.connect<"u"){let T=()=>u(e.connect,h,"connect");C?a(w,"connect",T()):a(w,"lookup",N=>{N===null&&a(w,"connect",T())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(w,"connect",()=>{let T=u(e.secureConnect,h,"secureConnect");a(w,"secureConnect",T)})}if(typeof e.send<"u"){let C=()=>u(e.send,h,"send");w.connecting?a(w,"connect",()=>{a(t,"upload-complete",C())}):a(t,"upload-complete",C())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let w=u(e.response,h,"response");a(t,"response",w)}),E}});var gle=_(J4=>{"use strict";Object.defineProperty(J4,"__esModule",{value:!0});var hle=Ff();J4.default=t=>{t=t;let e={protocol:t.protocol,hostname:hle.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 hle.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 dle=_(z4=>{"use strict";Object.defineProperty(z4,"__esModule",{value:!0});var bit=ve("url"),kit=["protocol","host","hostname","port","pathname","search"];z4.default=(t,e)=>{var r,o;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}//${(o=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&o!==void 0?o:""}`}let a=new bit.URL(t);if(e.path){let n=e.path.indexOf("?");n===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,n),e.search=e.path.slice(n+1)),delete e.path}for(let n of kit)e[n]&&(a[n]=e[n].toString());return a}});var mle=_(Z4=>{"use strict";Object.defineProperty(Z4,"__esModule",{value:!0});var X4=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)}};Z4.default=X4});var eU=_($4=>{"use strict";Object.defineProperty($4,"__esModule",{value:!0});var Qit=async t=>{let e=[],r=0;for await(let o of t)e.push(o),r+=Buffer.byteLength(o);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};$4.default=Qit});var Ele=_(bg=>{"use strict";Object.defineProperty(bg,"__esModule",{value:!0});bg.dnsLookupIpVersionToFamily=bg.isDnsLookupIpVersion=void 0;var yle={auto:0,ipv4:4,ipv6:6};bg.isDnsLookupIpVersion=t=>t in yle;bg.dnsLookupIpVersionToFamily=t=>{if(bg.isDnsLookupIpVersion(t))return yle[t];throw new Error("Invalid DNS lookup IP version")}});var tU=_(Mx=>{"use strict";Object.defineProperty(Mx,"__esModule",{value:!0});Mx.isResponseOk=void 0;Mx.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var Ile=_(rU=>{"use strict";Object.defineProperty(rU,"__esModule",{value:!0});var Cle=new Set;rU.default=t=>{Cle.has(t)||(Cle.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var wle=_(nU=>{"use strict";Object.defineProperty(nU,"__esModule",{value:!0});var mi=Ff(),Fit=(t,e)=>{if(mi.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");mi.assert.any([mi.default.string,mi.default.undefined],t.encoding),mi.assert.any([mi.default.boolean,mi.default.undefined],t.resolveBodyOnly),mi.assert.any([mi.default.boolean,mi.default.undefined],t.methodRewriting),mi.assert.any([mi.default.boolean,mi.default.undefined],t.isStream),mi.assert.any([mi.default.string,mi.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:o=>o.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},mi.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(o=>o.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):mi.default.number(r)&&(t.retry.limit=r),mi.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(mi.default.number))),mi.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:o}=t;if(!mi.default.function_(o.transform))throw new Error("`options.pagination.transform` must be implemented");if(!mi.default.function_(o.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!mi.default.function_(o.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!mi.default.function_(o.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};nU.default=Fit});var Ble=_(N1=>{"use strict";Object.defineProperty(N1,"__esModule",{value:!0});N1.retryAfterStatusCodes=void 0;N1.retryAfterStatusCodes=new Set([413,429,503]);var Rit=({attemptCount:t,retryOptions:e,error:r,retryAfter:o})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),u=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!u)return 0;if(r.response){if(o)return e.maxRetryAfter===void 0||o>e.maxRetryAfter?0:o;if(r.response.statusCode===413)return 0}let A=Math.random()*100;return 2**(t-1)*1e3+A};N1.default=Rit});var U1=_(Qn=>{"use strict";Object.defineProperty(Qn,"__esModule",{value:!0});Qn.UnsupportedProtocolError=Qn.ReadError=Qn.TimeoutError=Qn.UploadError=Qn.CacheError=Qn.HTTPError=Qn.MaxRedirectsError=Qn.RequestError=Qn.setNonEnumerableProperties=Qn.knownHookEvents=Qn.withoutBody=Qn.kIsNormalizedAlready=void 0;var vle=ve("util"),Dle=ve("stream"),Tit=ve("fs"),uh=ve("url"),Sle=ve("http"),iU=ve("http"),Lit=ve("https"),Nit=_oe(),Oit=Voe(),Ple=Sae(),Mit=kae(),Uit=sle(),_it=Rx(),at=Ff(),Hit=ule(),xle=G4(),qit=V4(),ble=ple(),jit=gle(),kle=dle(),Git=mle(),Wit=eU(),Qle=Ele(),Yit=tU(),Ah=Ile(),Vit=wle(),Kit=Ble(),sU,Ys=Symbol("request"),Hx=Symbol("response"),vy=Symbol("responseSize"),Dy=Symbol("downloadedSize"),Sy=Symbol("bodySize"),Py=Symbol("uploadedSize"),Ux=Symbol("serverResponsesPiped"),Fle=Symbol("unproxyEvents"),Rle=Symbol("isFromCache"),oU=Symbol("cancelTimeouts"),Tle=Symbol("startedReading"),xy=Symbol("stopReading"),_x=Symbol("triggerRead"),fh=Symbol("body"),O1=Symbol("jobs"),Lle=Symbol("originalResponse"),Nle=Symbol("retryTimeout");Qn.kIsNormalizedAlready=Symbol("isNormalizedAlready");var Jit=at.default.string(process.versions.brotli);Qn.withoutBody=new Set(["GET","HEAD"]);Qn.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function zit(t){for(let e in t){let r=t[e];if(!at.default.string(r)&&!at.default.number(r)&&!at.default.boolean(r)&&!at.default.null_(r)&&!at.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function Xit(t){return at.default.object(t)&&!("statusCode"in t)}var aU=new Git.default,Zit=async t=>new Promise((e,r)=>{let o=a=>{r(a)};t.pending||e(),t.once("error",o),t.once("ready",()=>{t.off("error",o),e()})}),$it=new Set([300,301,302,303,304,307,308]),est=["context","body","json","form"];Qn.setNonEnumerableProperties=(t,e)=>{let r={};for(let o of t)if(o)for(let a of est)a in o&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:o[a]});Object.defineProperties(e,r)};var zi=class extends Error{constructor(e,r,o){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,o instanceof Kx?(Object.defineProperty(this,"request",{enumerable:!1,value:o}),Object.defineProperty(this,"response",{enumerable:!1,value:o[Hx]}),Object.defineProperty(this,"options",{enumerable:!1,value:o.options})):Object.defineProperty(this,"options",{enumerable:!1,value:o}),this.timings=(a=this.request)===null||a===void 0?void 0:a.timings,at.default.string(r.stack)&&at.default.string(this.stack)){let n=this.stack.indexOf(this.message)+this.message.length,u=this.stack.slice(n).split(` +`).reverse(),A=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` +`).reverse();for(;A.length!==0&&A[0]===u[0];)u.shift();this.stack=`${this.stack.slice(0,n)}${u.reverse().join(` +`)}${A.reverse().join(` +`)}`}}};Qn.RequestError=zi;var qx=class extends zi{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Qn.MaxRedirectsError=qx;var jx=class extends zi{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Qn.HTTPError=jx;var Gx=class extends zi{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Qn.CacheError=Gx;var Wx=class extends zi{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Qn.UploadError=Wx;var Yx=class extends zi{constructor(e,r,o){super(e.message,e,o),this.name="TimeoutError",this.event=e.event,this.timings=r}};Qn.TimeoutError=Yx;var M1=class extends zi{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Qn.ReadError=M1;var Vx=class extends zi{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Qn.UnsupportedProtocolError=Vx;var tst=["socket","connect","continue","information","upgrade","timeout"],Kx=class extends Dle.Duplex{constructor(e,r={},o){super({autoDestroy:!1,highWaterMark:0}),this[Dy]=0,this[Py]=0,this.requestInitialized=!1,this[Ux]=new Set,this.redirects=[],this[xy]=!1,this[_x]=!1,this[O1]=[],this.retryCount=0,this._progressCallbacks=[];let a=()=>this._unlockWrite(),n=()=>this._lockWrite();this.on("pipe",h=>{h.prependListener("data",a),h.on("data",n),h.prependListener("end",a),h.on("end",n)}),this.on("unpipe",h=>{h.off("data",a),h.off("data",n),h.off("end",a),h.off("end",n)}),this.on("pipe",h=>{h instanceof iU.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:u,body:A,form:p}=r;if((u||A||p)&&this._lockWrite(),Qn.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,o)}catch(h){at.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof Tit.ReadStream&&await Zit(this.options.body);let{url:E}=this.options;if(!E)throw new TypeError("Missing `url` property");if(this.requestUrl=E.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(h=this[Ys])===null||h===void 0||h.destroy();return}for(let w of this[O1])w();this[O1].length=0,this.requestInitialized=!0}catch(E){if(E instanceof zi){this._beforeError(E);return}this.destroyed||this.destroy(E)}})()}static normalizeArguments(e,r,o){var a,n,u,A,p;let h=r;if(at.default.object(e)&&!at.default.urlInstance(e))r={...o,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...o,...r},e!==void 0&&(r.url=e),at.default.urlInstance(r.url)&&(r.url=new uh.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),at.assert.any([at.default.string,at.default.undefined],r.method),at.assert.any([at.default.object,at.default.undefined],r.headers),at.assert.any([at.default.string,at.default.urlInstance,at.default.undefined],r.prefixUrl),at.assert.any([at.default.object,at.default.undefined],r.cookieJar),at.assert.any([at.default.object,at.default.string,at.default.undefined],r.searchParams),at.assert.any([at.default.object,at.default.string,at.default.undefined],r.cache),at.assert.any([at.default.object,at.default.number,at.default.undefined],r.timeout),at.assert.any([at.default.object,at.default.undefined],r.context),at.assert.any([at.default.object,at.default.undefined],r.hooks),at.assert.any([at.default.boolean,at.default.undefined],r.decompress),at.assert.any([at.default.boolean,at.default.undefined],r.ignoreInvalidCookies),at.assert.any([at.default.boolean,at.default.undefined],r.followRedirect),at.assert.any([at.default.number,at.default.undefined],r.maxRedirects),at.assert.any([at.default.boolean,at.default.undefined],r.throwHttpErrors),at.assert.any([at.default.boolean,at.default.undefined],r.http2),at.assert.any([at.default.boolean,at.default.undefined],r.allowGetBody),at.assert.any([at.default.string,at.default.undefined],r.localAddress),at.assert.any([Qle.isDnsLookupIpVersion,at.default.undefined],r.dnsLookupIpVersion),at.assert.any([at.default.object,at.default.undefined],r.https),at.assert.any([at.default.boolean,at.default.undefined],r.rejectUnauthorized),r.https&&(at.assert.any([at.default.boolean,at.default.undefined],r.https.rejectUnauthorized),at.assert.any([at.default.function_,at.default.undefined],r.https.checkServerIdentity),at.assert.any([at.default.string,at.default.object,at.default.array,at.default.undefined],r.https.certificateAuthority),at.assert.any([at.default.string,at.default.object,at.default.array,at.default.undefined],r.https.key),at.assert.any([at.default.string,at.default.object,at.default.array,at.default.undefined],r.https.certificate),at.assert.any([at.default.string,at.default.undefined],r.https.passphrase),at.assert.any([at.default.string,at.default.buffer,at.default.array,at.default.undefined],r.https.pfx)),at.assert.any([at.default.object,at.default.undefined],r.cacheOptions),at.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===o?.headers?r.headers={...r.headers}:r.headers=_it({...o?.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!==o?.searchParams){let b;if(at.default.string(r.searchParams)||r.searchParams instanceof uh.URLSearchParams)b=new uh.URLSearchParams(r.searchParams);else{zit(r.searchParams),b=new uh.URLSearchParams;for(let C in r.searchParams){let T=r.searchParams[C];T===null?b.append(C,""):T!==void 0&&b.append(C,T)}}(a=o?.searchParams)===null||a===void 0||a.forEach((C,T)=>{b.has(T)||b.append(T,C)}),r.searchParams=b}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(u=r.password)!==null&&u!==void 0?u:"",at.default.undefined(r.prefixUrl)?r.prefixUrl=(A=o?.prefixUrl)!==null&&A!==void 0?A:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),at.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=kle.default(r.prefixUrl+r.url,r)}else(at.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=kle.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:b}=r;Object.defineProperty(r,"prefixUrl",{set:T=>{let N=r.url;if(!N.href.startsWith(T))throw new Error(`Cannot change \`prefixUrl\` from ${b} to ${T}: ${N.href}`);r.url=new uh.URL(T+N.href.slice(b.length)),b=T},get:()=>b});let{protocol:C}=r.url;if(C==="unix:"&&(C="http:",r.url=new uh.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),C!=="http:"&&C!=="https:")throw new Vx(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:E}=r;if(E){let{setCookie:b,getCookieString:C}=E;at.assert.function_(b),at.assert.function_(C),b.length===4&&C.length===0&&(b=vle.promisify(b.bind(r.cookieJar)),C=vle.promisify(C.bind(r.cookieJar)),r.cookieJar={setCookie:b,getCookieString:C})}let{cache:w}=r;if(w&&(aU.has(w)||aU.set(w,new Ple((b,C)=>{let T=b[Ys](b,C);return at.default.promise(T)&&(T.once=(N,U)=>{if(N==="error")T.catch(U);else if(N==="abort")(async()=>{try{(await T).once("abort",U)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${N}`);return T}),T},w))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)sU||(sU=new Oit.default),r.dnsCache=sU;else if(!at.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${at.default(r.dnsCache)}`);at.default.number(r.timeout)?r.timeout={request:r.timeout}:o&&r.timeout!==o.timeout?r.timeout={...o.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let D=r.hooks===o?.hooks;r.hooks={...r.hooks};for(let b of Qn.knownHookEvents)if(b in r.hooks)if(at.default.array(r.hooks[b]))r.hooks[b]=[...r.hooks[b]];else throw new TypeError(`Parameter \`${b}\` must be an Array, got ${at.default(r.hooks[b])}`);else r.hooks[b]=[];if(o&&!D)for(let b of Qn.knownHookEvents)o.hooks[b].length>0&&(r.hooks[b]=[...o.hooks[b],...r.hooks[b]]);if("family"in r&&Ah.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),o?.https&&(r.https={...o.https,...r.https}),"rejectUnauthorized"in r&&Ah.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&Ah.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&Ah.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&Ah.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&Ah.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&Ah.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&Ah.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 b in r.agent)if(b!=="http"&&b!=="https"&&b!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${b}\``)}return r.maxRedirects=(p=r.maxRedirects)!==null&&p!==void 0?p:0,Qn.setNonEnumerableProperties([o,h],r),Vit.default(r,o)}_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,o=!at.default.undefined(e.form),a=!at.default.undefined(e.json),n=!at.default.undefined(e.body),u=o||a||n,A=Qn.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=A,u){if(A)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,o,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof Dle.Readable)&&!at.default.string(e.body)&&!at.default.buffer(e.body)&&!xle.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(o&&!at.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!at.default.string(r["content-type"]);n?(xle.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[fh]=e.body):o?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[fh]=new uh.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[fh]=e.stringifyJson(e.json));let h=await Hit.default(this[fh],e.headers);at.default.undefined(r["content-length"])&&at.default.undefined(r["transfer-encoding"])&&!A&&!at.default.undefined(h)&&(r["content-length"]=String(h))}}else A?this._lockWrite():this._unlockWrite();this[Sy]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:o}=r;this[Lle]=e,r.decompress&&(e=Mit(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:Sle.STATUS_CODES[a],n.url=r.url.toString(),n.requestUrl=this.requestUrl,n.redirectUrls=this.redirects,n.request=this,n.isFromCache=e.fromCache||!1,n.ip=this.ip,n.retryCount=this.retryCount,this[Rle]=n.isFromCache,this[vy]=Number(e.headers["content-length"])||void 0,this[Hx]=e,e.once("end",()=>{this[vy]=this[Dy],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",A=>{e.destroy(),this._beforeError(new M1(A,this))}),e.once("aborted",()=>{this._beforeError(new M1({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let u=e.headers["set-cookie"];if(at.default.object(r.cookieJar)&&u){let A=u.map(async p=>r.cookieJar.setCookie(p,o.toString()));r.ignoreInvalidCookies&&(A=A.map(async p=>p.catch(()=>{})));try{await Promise.all(A)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&$it.has(a)){if(e.resume(),this[Ys]&&(this[oU](),delete this[Ys],this[Fle]()),(a===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[fh]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new qx(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new uh.URL(p,o),E=h.toString();decodeURI(E),h.hostname!==o.hostname||h.port!==o.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="")):(h.username=r.username,h.password=r.password),this.redirects.push(E),r.url=h;for(let w of r.hooks.beforeRedirect)await w(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!Yit.isResponseOk(n)){this._beforeError(new jx(n));return}e.on("readable",()=>{this[_x]&&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[Ux])if(!A.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,E=e.headers[p];h&&A.setHeader(p,E)}A.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:o,url:a}=r;Nit.default(e),this[oU]=ble.default(e,o,a);let n=r.cache?"cacheableResponse":"response";e.once(n,p=>{this._onResponse(p)}),e.once("error",p=>{var h;e.destroy(),(h=e.res)===null||h===void 0||h.removeAllListeners("end"),p=p instanceof ble.TimeoutError?new Yx(p,this.timings,this):new zi(p.message,p,this),this._beforeError(p)}),this[Fle]=qit.default(e,this,tst),this[Ys]=e,this.emit("uploadProgress",this.uploadProgress);let u=this[fh],A=this.redirects.length===0?this:e;at.default.nodeStream(u)?(u.pipe(A),u.once("error",p=>{this._beforeError(new Wx(p,this))})):(this._unlockWrite(),at.default.undefined(u)?(this._cannotHaveBody||this._noPipe)&&(A.end(),this._lockWrite()):(this._writeRequest(u,void 0,()=>{}),A.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((o,a)=>{Object.assign(r,jit.default(e)),delete r.url;let n,u=aU.get(r.cache)(r,async A=>{A._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",A),o(A)});r.url=e,u.once("error",a),u.once("request",async A=>{n=A,o(n)})})}async _makeRequest(){var e,r,o,a,n;let{options:u}=this,{headers:A}=u;for(let U in A)if(at.default.undefined(A[U]))delete A[U];else if(at.default.null_(A[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(u.decompress&&at.default.undefined(A["accept-encoding"])&&(A["accept-encoding"]=Jit?"gzip, deflate, br":"gzip, deflate"),u.cookieJar){let U=await u.cookieJar.getCookieString(u.url.toString());at.default.nonEmptyString(U)&&(u.headers.cookie=U)}for(let U of u.hooks.beforeRequest){let J=await U(u);if(!at.default.undefined(J)){u.request=()=>J;break}}u.body&&this[fh]!==u.body&&(this[fh]=u.body);let{agent:p,request:h,timeout:E,url:w}=u;if(u.dnsCache&&!("lookup"in u)&&(u.lookup=u.dnsCache.lookup),w.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${w.pathname}${w.search}`);if(U?.groups){let{socketPath:J,path:te}=U.groups;Object.assign(u,{socketPath:J,path:te,host:""})}}let D=w.protocol==="https:",b;u.http2?b=Uit.auto:b=D?Lit.request:Sle.request;let C=(e=u.request)!==null&&e!==void 0?e:b,T=u.cache?this._createCacheableRequest:C;p&&!u.http2&&(u.agent=p[D?"https":"http"]),u[Ys]=C,delete u.request,delete u.timeout;let N=u;if(N.shared=(r=u.cacheOptions)===null||r===void 0?void 0:r.shared,N.cacheHeuristic=(o=u.cacheOptions)===null||o===void 0?void 0:o.cacheHeuristic,N.immutableMinTimeToLive=(a=u.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,N.ignoreCargoCult=(n=u.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,u.dnsLookupIpVersion!==void 0)try{N.family=Qle.dnsLookupIpVersionToFamily(u.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}u.https&&("rejectUnauthorized"in u.https&&(N.rejectUnauthorized=u.https.rejectUnauthorized),u.https.checkServerIdentity&&(N.checkServerIdentity=u.https.checkServerIdentity),u.https.certificateAuthority&&(N.ca=u.https.certificateAuthority),u.https.certificate&&(N.cert=u.https.certificate),u.https.key&&(N.key=u.https.key),u.https.passphrase&&(N.passphrase=u.https.passphrase),u.https.pfx&&(N.pfx=u.https.pfx));try{let U=await T(w,N);at.default.undefined(U)&&(U=b(w,N)),u.request=h,u.timeout=E,u.agent=p,u.https&&("rejectUnauthorized"in u.https&&delete N.rejectUnauthorized,u.https.checkServerIdentity&&delete N.checkServerIdentity,u.https.certificateAuthority&&delete N.ca,u.https.certificate&&delete N.cert,u.https.key&&delete N.key,u.https.passphrase&&delete N.passphrase,u.https.pfx&&delete N.pfx),Xit(U)?this._onRequest(U):this.writable?(this.once("finish",()=>{this._onResponse(U)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(U)}catch(U){throw U instanceof Ple.CacheError?new Gx(U,this):new zi(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new zi(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[xy])return;let{options:r}=this,o=this.retryCount+1;this[xy]=!0,e instanceof zi||(e=new zi(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await Wit.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let u;try{let A;n&&"retry-after"in n.headers&&(A=Number(n.headers["retry-after"]),Number.isNaN(A)?(A=Date.parse(n.headers["retry-after"])-Date.now(),A<=0&&(A=1)):A*=1e3),u=await r.retry.calculateDelay({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:Kit.default({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:0})})}catch(A){this._error(new zi(A.message,A,this));return}if(u){let A=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,o)}catch(p){this._error(new zi(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",o,e))};this[Nle]=setTimeout(A,u);return}}this._error(a)})()}_read(){this[_x]=!0;let e=this[Hx];if(e&&!this[xy]){e.readableLength&&(this[_x]=!1);let r;for(;(r=e.read())!==null;){this[Dy]+=r.length,this[Tle]=!0;let o=this.downloadProgress;o.percent<1&&this.emit("downloadProgress",o),this.push(r)}}}_write(e,r,o){let a=()=>{this._writeRequest(e,r,o)};this.requestInitialized?a():this[O1].push(a)}_writeRequest(e,r,o){this[Ys].destroyed||(this._progressCallbacks.push(()=>{this[Py]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[Ys].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),o(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Ys in this)){e();return}if(this[Ys].destroyed){e();return}this[Ys].end(o=>{o||(this[Sy]=this[Py],this.emit("uploadProgress",this.uploadProgress),this[Ys].emit("upload-complete")),e(o)})};this.requestInitialized?r():this[O1].push(r)}_destroy(e,r){var o;this[xy]=!0,clearTimeout(this[Nle]),Ys in this&&(this[oU](),!((o=this[Hx])===null||o===void 0)&&o.complete||this[Ys].destroy()),e!==null&&!at.default.undefined(e)&&!(e instanceof zi)&&(e=new zi(e.message,e,this)),r(e)}get _isAboutToError(){return this[xy]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,o;return((r=(e=this[Ys])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((o=this[Lle])===null||o===void 0)&&o.complete)}get socket(){var e,r;return(r=(e=this[Ys])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[vy]?e=this[Dy]/this[vy]:this[vy]===this[Dy]?e=1:e=0,{percent:e,transferred:this[Dy],total:this[vy]}}get uploadProgress(){let e;return this[Sy]?e=this[Py]/this[Sy]:this[Sy]===this[Py]?e=1:e=0,{percent:e,transferred:this[Py],total:this[Sy]}}get timings(){var e;return(e=this[Ys])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[Rle]}pipe(e,r){if(this[Tle])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof iU.ServerResponse&&this[Ux].add(e),super.pipe(e,r)}unpipe(e){return e instanceof iU.ServerResponse&&this[Ux].delete(e),super.unpipe(e),this}};Qn.default=Kx});var _1=_(zc=>{"use strict";var rst=zc&&zc.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),nst=zc&&zc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&rst(e,t,r)};Object.defineProperty(zc,"__esModule",{value:!0});zc.CancelError=zc.ParseError=void 0;var Ole=U1(),lU=class extends Ole.RequestError{constructor(e,r){let{options:o}=r.request;super(`${e.message} in "${o.url.toString()}"`,e,r.request),this.name="ParseError"}};zc.ParseError=lU;var cU=class extends Ole.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};zc.CancelError=cU;nst(U1(),zc)});var Ule=_(uU=>{"use strict";Object.defineProperty(uU,"__esModule",{value:!0});var Mle=_1(),ist=(t,e,r,o)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(o);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new Mle.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new Mle.ParseError(n,t)}};uU.default=ist});var AU=_(ph=>{"use strict";var sst=ph&&ph.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),ost=ph&&ph.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&sst(e,t,r)};Object.defineProperty(ph,"__esModule",{value:!0});var ast=ve("events"),lst=Ff(),cst=Moe(),Jx=_1(),_le=Ule(),Hle=U1(),ust=V4(),Ast=eU(),qle=tU(),fst=["request","response","redirect","uploadProgress","downloadProgress"];function jle(t){let e,r,o=new ast.EventEmitter,a=new cst((u,A,p)=>{let h=E=>{let w=new Hle.default(void 0,t);w.retryCount=E,w._noPipe=!0,p(()=>w.destroy()),p.shouldReject=!1,p(()=>A(new Jx.CancelError(w))),e=w,w.once("response",async C=>{var T;if(C.retryCount=E,C.request.aborted)return;let N;try{N=await Ast.default(w),C.rawBody=N}catch{return}if(w._isAboutToError)return;let U=((T=C.headers["content-encoding"])!==null&&T!==void 0?T:"").toLowerCase(),J=["gzip","deflate","br"].includes(U),{options:te}=w;if(J&&!te.decompress)C.body=N;else try{C.body=_le.default(C,te.responseType,te.parseJson,te.encoding)}catch(le){if(C.body=N.toString(),qle.isResponseOk(C)){w._beforeError(le);return}}try{for(let[le,ce]of te.hooks.afterResponse.entries())C=await ce(C,async ue=>{let Ie=Hle.default.normalizeArguments(void 0,{...ue,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},te);Ie.hooks.afterResponse=Ie.hooks.afterResponse.slice(0,le);for(let De of Ie.hooks.beforeRetry)await De(Ie);let he=jle(Ie);return p(()=>{he.catch(()=>{}),he.cancel()}),he})}catch(le){w._beforeError(new Jx.RequestError(le.message,le,w));return}if(!qle.isResponseOk(C)){w._beforeError(new Jx.HTTPError(C));return}r=C,u(w.options.resolveBodyOnly?C.body:C)});let D=C=>{if(a.isCanceled)return;let{options:T}=w;if(C instanceof Jx.HTTPError&&!T.throwHttpErrors){let{response:N}=C;u(w.options.resolveBodyOnly?N.body:N);return}A(C)};w.once("error",D);let b=w.options.body;w.once("retry",(C,T)=>{var N,U;if(b===((N=T.request)===null||N===void 0?void 0:N.options.body)&&lst.default.nodeStream((U=T.request)===null||U===void 0?void 0:U.options.body)){D(T);return}h(C)}),ust.default(w,o,fst)};h(0)});a.on=(u,A)=>(o.on(u,A),a);let n=u=>{let A=(async()=>{await a;let{options:p}=r.request;return _le.default(r,u,p.parseJson,p.encoding)})();return Object.defineProperties(A,Object.getOwnPropertyDescriptors(a)),A};return a.json=()=>{let{headers:u}=e.options;return!e.writableFinished&&u.accept===void 0&&(u.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}ph.default=jle;ost(_1(),ph)});var Gle=_(fU=>{"use strict";Object.defineProperty(fU,"__esModule",{value:!0});var pst=_1();function hst(t,...e){let r=(async()=>{if(t instanceof pst.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),o=()=>r;return r.json=o,r.text=o,r.buffer=o,r.on=o,r}fU.default=hst});var Vle=_(pU=>{"use strict";Object.defineProperty(pU,"__esModule",{value:!0});var Wle=Ff();function Yle(t){for(let e of Object.values(t))(Wle.default.plainObject(e)||Wle.default.array(e))&&Yle(e);return Object.freeze(t)}pU.default=Yle});var Jle=_(Kle=>{"use strict";Object.defineProperty(Kle,"__esModule",{value:!0})});var hU=_(Xl=>{"use strict";var gst=Xl&&Xl.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),dst=Xl&&Xl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&gst(e,t,r)};Object.defineProperty(Xl,"__esModule",{value:!0});Xl.defaultHandler=void 0;var zle=Ff(),zl=AU(),mst=Gle(),Xx=U1(),yst=Vle(),Est={RequestError:zl.RequestError,CacheError:zl.CacheError,ReadError:zl.ReadError,HTTPError:zl.HTTPError,MaxRedirectsError:zl.MaxRedirectsError,TimeoutError:zl.TimeoutError,ParseError:zl.ParseError,CancelError:zl.CancelError,UnsupportedProtocolError:zl.UnsupportedProtocolError,UploadError:zl.UploadError},Cst=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:zx}=Xx.default,Xle=(...t)=>{let e;for(let r of t)e=zx(void 0,r,e);return e},Ist=t=>t.isStream?new Xx.default(void 0,t):zl.default(t),wst=t=>"defaults"in t&&"options"in t.defaults,Bst=["get","post","put","patch","head","delete"];Xl.defaultHandler=(t,e)=>e(t);var Zle=(t,e)=>{if(t)for(let r of t)r(e)},$le=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(o=>(a,n)=>{let u,A=o(a,p=>(u=n(p),u));if(A!==u&&!a.isStream&&u){let p=A,{then:h,catch:E,finally:w}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(u)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(u)),p.then=h,p.catch=E,p.finally=w}return A});let e=(o,a={},n)=>{var u,A;let p=0,h=E=>t.handlers[p++](E,p===t.handlers.length?Ist:h);if(zle.default.plainObject(o)){let E={...o,...a};Xx.setNonEnumerableProperties([o,a],E),a=E,o=void 0}try{let E;try{Zle(t.options.hooks.init,a),Zle((u=a.hooks)===null||u===void 0?void 0:u.init,a)}catch(D){E=D}let w=zx(o,a,n??t.options);if(w[Xx.kIsNormalizedAlready]=!0,E)throw new zl.RequestError(E.message,E,w);return h(w)}catch(E){if(a.isStream)throw E;return mst.default(E,t.options.hooks.beforeError,(A=a.hooks)===null||A===void 0?void 0:A.beforeError)}};e.extend=(...o)=>{let a=[t.options],n=[...t._rawHandlers],u;for(let A of o)wst(A)?(a.push(A.defaults.options),n.push(...A.defaults._rawHandlers),u=A.defaults.mutableDefaults):(a.push(A),"handlers"in A&&n.push(...A.handlers),u=A.mutableDefaults);return n=n.filter(A=>A!==Xl.defaultHandler),n.length===0&&n.push(Xl.defaultHandler),$le({options:Xle(...a),handlers:n,mutableDefaults:!!u})};let r=async function*(o,a){let n=zx(o,a,t.options);n.resolveBodyOnly=!1;let u=n.pagination;if(!zle.default.object(u))throw new TypeError("`options.pagination` must be implemented");let A=[],{countLimit:p}=u,h=0;for(;h{let n=[];for await(let u of r(o,a))n.push(u);return n},e.paginate.each=r,e.stream=(o,a)=>e(o,{...a,isStream:!0});for(let o of Bst)e[o]=(a,n)=>e(a,{...n,method:o}),e.stream[o]=(a,n)=>e(a,{...n,method:o,isStream:!0});return Object.assign(e,Est),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:yst.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=Xle,e};Xl.default=$le;dst(Jle(),Xl)});var rce=_((Rf,Zx)=>{"use strict";var vst=Rf&&Rf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),ece=Rf&&Rf.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&vst(e,t,r)};Object.defineProperty(Rf,"__esModule",{value:!0});var Dst=ve("url"),tce=hU(),Sst={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 o of e){let a=o.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new Dst.URL(r)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:t=>JSON.parse(t),stringifyJson:t=>JSON.stringify(t),cacheOptions:{}},handlers:[tce.defaultHandler],mutableDefaults:!1},gU=tce.default(Sst);Rf.default=gU;Zx.exports=gU;Zx.exports.default=gU;Zx.exports.__esModule=!0;ece(hU(),Rf);ece(AU(),Rf)});var on={};Vt(on,{Method:()=>cce,del:()=>Qst,get:()=>EU,getNetworkSettings:()=>lce,post:()=>CU,put:()=>kst,request:()=>H1});function sce(t){let e=new URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),e.username&&e.password&&(r.proxyAuth=`${e.username}:${e.password}`),{proxy:r}}async function dU(t){return Al(ice,t,()=>ae.readFilePromise(t).then(e=>(ice.set(t,e),e)))}function bst({statusCode:t,statusMessage:e},r){let o=Ut(r,t,Ct.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return ty(r,`${o}${e?` (${e})`:""}`,a)}async function $x(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(o){if(o.name!=="HTTPError")throw o;let a=r?.(o,e)??o.response.body?.error;a==null&&(o.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=o.message),o.code==="ETIMEDOUT"&&o.event==="socket"&&(a+=`(can be increased via ${Ut(e,"httpTimeout",Ct.SETTING)})`);let n=new Jt(35,a,u=>{o.response&&u.reportError(35,` ${$u(e,{label:"Response Code",value:Yc(Ct.NO_HINT,bst(o.response,e))})}`),o.request&&(u.reportError(35,` ${$u(e,{label:"Request Method",value:Yc(Ct.NO_HINT,o.request.options.method)})}`),u.reportError(35,` ${$u(e,{label:"Request URL",value:Yc(Ct.URL,o.request.requestUrl)})}`)),o.request.redirects.length>0&&u.reportError(35,` ${$u(e,{label:"Request Redirects",value:Yc(Ct.NO_HINT,cO(e,o.request.redirects,Ct.URL))})}`),o.request.retryCount===o.request.options.retry.limit&&u.reportError(35,` ${$u(e,{label:"Request Retry Count",value:Yc(Ct.NO_HINT,`${Ut(e,o.request.retryCount,Ct.NUMBER)} (can be increased via ${Ut(e,"httpRetry",Ct.SETTING)})`)})}`)});throw n.originalError=o,n}}function lce(t,e){let r=[...e.configuration.get("networkSettings")].sort(([u],[A])=>A.length-u.length),o={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(o),n=typeof t=="string"?new URL(t):t;for(let[u,A]of r)if(yU.default.isMatch(n.hostname,u))for(let p of a){let h=A.get(p);h!==null&&typeof o[p]>"u"&&(o[p]=h)}for(let u of a)typeof o[u]>"u"&&(o[u]=e.configuration.get(u));return o}async function H1(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET",wrapNetworkRequest:A}){let p={target:t,body:e,configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u},h=async()=>await Fst(t,e,p),E=typeof A<"u"?await A(h,p):h;return await(await r.reduceHook(D=>D.wrapNetworkRequest,E,p))()}async function EU(t,{configuration:e,jsonResponse:r,customErrorMessage:o,wrapNetworkRequest:a,...n}){let u=()=>$x(H1(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:o}).then(p=>p.body),A=await(typeof a<"u"?u():Al(nce,t,()=>u().then(p=>(nce.set(t,p),p))));return r?JSON.parse(A.toString()):A}async function kst(t,e,{customErrorMessage:r,...o}){return(await $x(H1(t,e,{...o,method:"PUT"}),{customErrorMessage:r,configuration:o.configuration})).body}async function CU(t,e,{customErrorMessage:r,...o}){return(await $x(H1(t,e,{...o,method:"POST"}),{customErrorMessage:r,configuration:o.configuration})).body}async function Qst(t,{customErrorMessage:e,...r}){return(await $x(H1(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function Fst(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET"}){let A=typeof t=="string"?new URL(t):t,p=lce(A,{configuration:r});if(p.enableNetwork===!1)throw new Jt(80,`Request to '${A.href}' has been blocked because of your configuration settings`);if(A.protocol==="http:"&&!yU.default.isMatch(A.hostname,r.get("unsafeHttpWhitelist")))throw new Jt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${A.hostname})`);let E={agent:{http:p.httpProxy?mU.default.httpOverHttp(sce(p.httpProxy)):Pst,https:p.httpsProxy?mU.default.httpsOverHttp(sce(p.httpsProxy)):xst},headers:o,method:u};E.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?E.body=e:E.json=e);let w=r.get("httpTimeout"),D=r.get("httpRetry"),b=r.get("enableStrictSsl"),C=p.httpsCaFilePath,T=p.httpsCertFilePath,N=p.httpsKeyFilePath,{default:U}=await Promise.resolve().then(()=>et(rce())),J=C?await dU(C):void 0,te=T?await dU(T):void 0,le=N?await dU(N):void 0,ce=U.extend({timeout:{socket:w},retry:D,https:{rejectUnauthorized:b,certificateAuthority:J,certificate:te,key:le},...E});return r.getLimit("networkConcurrency")(()=>ce(A))}var oce,ace,yU,mU,nce,ice,Pst,xst,cce,eb=It(()=>{St();oce=ve("https"),ace=ve("http"),yU=et(Xo()),mU=et(Roe());Kl();Wl();Gl();nce=new Map,ice=new Map,Pst=new ace.Agent({keepAlive:!0}),xst=new oce.Agent({keepAlive:!0});cce=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(cce||{})});var Xi={};Vt(Xi,{availableParallelism:()=>wU,getArchitecture:()=>q1,getArchitectureName:()=>Ost,getArchitectureSet:()=>IU,getCaller:()=>Hst,major:()=>Rst,openUrl:()=>Tst});function Nst(){if(process.platform==="darwin"||process.platform==="win32")return null;let t;try{t=ae.readFileSync(Lst)}catch{}if(typeof t<"u"){if(t&&(t.includes("GLIBC")||t.includes("libc")))return"glibc";if(t&&t.includes("musl"))return"musl"}let r=(process.report?.getReport()??{}).sharedObjects??[],o=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return eh(r,a=>{let n=a.match(o);if(!n)return eh.skip;if(n[1])return"glibc";if(n[2])return"musl";throw new Error("Assertion failed: Expected the libc variant to have been detected")})??null}function q1(){return Ace=Ace??{os:process.platform,cpu:process.arch,libc:Nst()}}function Ost(t=q1()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function IU(){let t=q1();return fce=fce??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function _st(t){let e=Mst.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,o=e[2]&&e[2].indexOf("eval")===0,a=Ust.exec(e[2]);return o&&a!=null&&(e[2]=a[1],e[3]=a[2],e[4]=a[3]),{file:r?null:e[2],methodName:e[1]||"",arguments:r?[e[2]]:[],line:e[3]?+e[3]:null,column:e[4]?+e[4]:null}}function Hst(){let e=new Error().stack.split(` +`)[3];return _st(e)}function wU(){return typeof tb.default.availableParallelism<"u"?tb.default.availableParallelism():Math.max(1,tb.default.cpus().length)}var tb,Rst,uce,Tst,Lst,Ace,fce,Mst,Ust,rb=It(()=>{St();tb=et(ve("os"));nb();Gl();Rst=Number(process.versions.node.split(".")[0]),uce=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),Tst=typeof uce<"u"?async t=>{try{return await BU(uce,[t],{cwd:V.cwd()}),!0}catch{return!1}}:void 0,Lst="/usr/bin/ldd";Mst=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Ust=/\((\S*)(?::(\d+))(?::(\d+))\)/});function xU(t,e,r,o,a){let n=b1(r);if(o.isArray||o.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((u,A)=>vU(t,`${e}[${A}]`,u,o,a)):String(n).split(/,/).map(u=>vU(t,e,u,o,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return vU(t,e,r,o,a)}function vU(t,e,r,o,a){let n=b1(r);switch(o.type){case"ANY":return wx(n);case"SHAPE":return Wst(t,e,r,o,a);case"MAP":return Yst(t,e,r,o,a)}if(n===null&&!o.isNullable&&o.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(o.values?.includes(n))return n;let A=(()=>{if(o.type==="BOOLEAN"&&typeof n!="string")return f1(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=NP(n,{env:t.env});switch(o.type){case"ABSOLUTE_PATH":{let h=a,E=e4(r);return E&&E[0]!=="<"&&(h=V.dirname(E)),V.resolve(h,Ae.toPortablePath(p))}case"LOCATOR_LOOSE":return Pf(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return Pf(p);case"BOOLEAN":return f1(p);default:return p}})();if(o.values&&!o.values.includes(A))throw new Error(`Invalid value, expected one of ${o.values.join(", ")}`);return A}function Wst(t,e,r,o,a){let n=b1(r);if(typeof n!="object"||Array.isArray(n))throw new it(`Object configuration settings "${e}" must be an object`);let u=bU(t,o,{ignoreArrays:!0});if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=`${e}.${A}`;if(!o.properties[A])throw new it(`Unrecognized configuration settings found: ${e}.${A} - run "yarn config -v" to see the list of settings supported in Yarn`);u.set(A,xU(t,h,p,o.properties[A],a))}return u}function Yst(t,e,r,o,a){let n=b1(r),u=new Map;if(typeof n!="object"||Array.isArray(n))throw new it(`Map configuration settings "${e}" must be an object`);if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=o.normalizeKeys?o.normalizeKeys(A):A,E=`${e}['${h}']`,w=o.valueDefinition;u.set(h,xU(t,E,p,w,a))}return u}function bU(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let o=new Map;for(let[a,n]of Object.entries(e.properties))o.set(a,bU(t,n));return o}case"MAP":return e.isArray&&!r?[]:new Map;case"ABSOLUTE_PATH":return e.default===null?null:t.projectCwd===null?Array.isArray(e.default)?e.default.map(o=>V.normalize(o)):V.isAbsolute(e.default)?V.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(o=>V.resolve(t.projectCwd,o)):V.resolve(t.projectCwd,e.default);default:return e.default}}function sb(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return Gst;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return Ae.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let o=[];for(let a of t)o.push(sb(a,e,r));return o}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=sb(n,e.valueDefinition,r);typeof u<"u"&&o.set(a,u)}return o}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=e.properties[a],A=sb(n,u,r);typeof A<"u"&&o.set(a,A)}return o}return t}function Vst(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(ob)&&(e=(0,hce.default)(e.slice(ob.length)),t[e]=r);return t}function SU(){let t=`${ob}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return PU}async function pce(t){try{return await ae.readFilePromise(t)}catch{return Buffer.of()}}async function Kst(t,e){return Buffer.compare(...await Promise.all([pce(t),pce(e)]))===0}async function Jst(t,e){let[r,o]=await Promise.all([ae.statPromise(t),ae.statPromise(e)]);return r.dev===o.dev&&r.ino===o.ino}async function Xst({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await zst(r,e)?null:r}var hce,Tf,gce,dce,mce,DU,qst,j1,jst,by,ob,PU,Gst,G1,yce,ab,ib,zst,ze,W1=It(()=>{St();Ol();hce=et(jK()),Tf=et(sg());Gt();gce=et(NJ()),dce=ve("module"),mce=et(lg()),DU=ve("stream");Kse();Ay();YM();VM();KM();woe();JM();Dg();Poe();vx();Wl();ah();eb();Gl();rb();bf();Io();qst=function(){if(!Tf.GITHUB_ACTIONS||!process.env.GITHUB_EVENT_PATH)return!1;let t=Ae.toPortablePath(process.env.GITHUB_EVENT_PATH),e;try{e=ae.readJsonSync(t)}catch{return!1}return!(!("repository"in e)||!e.repository||(e.repository.private??!0))}(),j1=new Set(["@yarnpkg/plugin-constraints","@yarnpkg/plugin-exec","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]),jst=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","zipDataEpilogue","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),by=/^(?!v)[a-z0-9._-]+$/i,ob="yarn_",PU=".yarnrc.yml",Gst="********",G1=(E=>(E.ANY="ANY",E.BOOLEAN="BOOLEAN",E.ABSOLUTE_PATH="ABSOLUTE_PATH",E.LOCATOR="LOCATOR",E.LOCATOR_LOOSE="LOCATOR_LOOSE",E.NUMBER="NUMBER",E.STRING="STRING",E.SECRET="SECRET",E.SHAPE="SHAPE",E.MAP="MAP",E))(G1||{}),yce=Ct,ab=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(ab||{}),ib={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:"STRING",default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:"ABSOLUTE_PATH",default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:"BOOLEAN",default:!1},globalFolder:{description:"Folder where all system-global files are stored",type:"ABSOLUTE_PATH",default:r4()},cacheFolder:{description:"Folder where the cache files must be written",type:"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:"NUMBER",values:["mixed",0,1,2,3,4,5,6,7,8,9],default:0},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)",type:"ABSOLUTE_PATH",default:"./.yarn/__virtual__"},installStatePath:{description:"Path of the file where the install state will be persisted",type:"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:"STRING",default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:"STRING",default:SU()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:"BOOLEAN",default:!0},cacheMigrationMode:{description:"Defines the conditions under which Yarn upgrades should cause the cache archives to be regenerated.",type:"STRING",values:["always","match-spec","required-only"],default:"always"},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:"BOOLEAN",default:UP,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:lO,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:Tf.isCI,defaultText:""},enableMessageNames:{description:"If true, the CLI will prefix most messages with codes suitable for search engines",type:"BOOLEAN",default:!0},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:"BOOLEAN",default:!Tf.isCI,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:"BOOLEAN",default:!0},enableTips:{description:"If true, installs will print a helpful message every day of the week",type:"BOOLEAN",default:!Tf.isCI,defaultText:""},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:"BOOLEAN",default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:"BOOLEAN",default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:"STRING",default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:"STRING",default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:"STRING",default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:"BOOLEAN",default:!0},supportedArchitectures:{description:"Architectures that Yarn will fetch and inject into the resolver",type:"SHAPE",properties:{os:{description:"Array of supported process.platform strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},cpu:{description:"Array of supported process.arch strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},libc:{description:"Array of supported libc libraries, or null to target them all",type:"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:"BOOLEAN",default:!0},enableNetwork:{description:"If false, Yarn will refuse to use the network if required to",type:"BOOLEAN",default:!0},enableOfflineMode:{description:"If true, Yarn will attempt to retrieve files and metadata from the global cache rather than the network",type:"BOOLEAN",default:!1},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:"STRING",default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:"NUMBER",default:6e4},httpRetry:{description:"Retry times on http failure",type:"NUMBER",default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:"NUMBER",default:50},taskPoolConcurrency:{description:"Maximal amount of concurrent heavy task processing",type:"NUMBER",default:wU()},taskPoolMode:{description:"Execution strategy for heavy tasks",type:"STRING",values:["async","workers"],default:"workers"},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{httpsCaFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:"BOOLEAN",default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null}}}},httpsCaFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:"BOOLEAN",default:!0},logFilters:{description:"Overrides for log levels",type:"SHAPE",isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:"STRING",default:void 0},text:{description:"Code of the texts covered by this override",type:"STRING",default:void 0},pattern:{description:"Code of the patterns covered by this override",type:"STRING",default:void 0},level:{description:"Log level override, set to null to remove override",type:"STRING",values:Object.values(HP),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:"BOOLEAN",default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:"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:"STRING",default:null},enableHardenedMode:{description:"If true, automatically enable --check-resolutions --refresh-lockfile on installs",type:"BOOLEAN",default:Tf.isPR&&qst,defaultText:""},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:"BOOLEAN",default:!0},enableStrictSettings:{description:"If true, unknown settings will cause Yarn to abort",type:"BOOLEAN",default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:"BOOLEAN",default:!1},enableCacheClean:{description:"If false, disallows the `cache clean` command",type:"BOOLEAN",default:!0},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:"STRING",default:"throw"},injectEnvironmentFiles:{description:"List of all the environment files that Yarn should inject inside the process when it starts",type:"ABSOLUTE_PATH",default:[".env.yarn?"],isArray:!0},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:"MAP",valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:"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:"MAP",valueDefinition:{description:"A range",type:"STRING"}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:"MAP",valueDefinition:{description:"A semver range",type:"STRING"}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:"MAP",valueDefinition:{description:"The peerDependency meta",type:"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:"BOOLEAN",default:!1}}}}}}}};zst=process.platform==="win32"?Kst:Jst;ze=class t{constructor(e){this.isCI=Tf.isCI;this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.env={};this.limits=new Map;this.packageExtensions=null;this.startingCwd=e}static{this.deleteProperty=Symbol()}static{this.telemetry=null}static create(e,r,o){let a=new t(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(ib);let n=typeof o<"u"?o:r instanceof Map?r:new Map;for(let[u,A]of n)a.activatePlugin(u,A);return a}static async find(e,r,{strict:o=!0,usePathCheck:a=null,useRc:n=!0}={}){let u=Vst();delete u.rcFilename;let A=new t(e),p=await t.findRcFiles(e),h=await t.findFolderRcFile(my());h&&(p.find(Ie=>Ie.path===h.path)||p.unshift(h));let E=Soe(p.map(ue=>[ue.path,ue.data])),w=Bt.dot,D=new Set(Object.keys(ib)),b=({yarnPath:ue,ignorePath:Ie,injectEnvironmentFiles:he})=>({yarnPath:ue,ignorePath:Ie,injectEnvironmentFiles:he}),C=({yarnPath:ue,ignorePath:Ie,injectEnvironmentFiles:he,...De})=>{let Ee={};for(let[g,me]of Object.entries(De))D.has(g)&&(Ee[g]=me);return Ee},T=({yarnPath:ue,ignorePath:Ie,...he})=>{let De={};for(let[Ee,g]of Object.entries(he))D.has(Ee)||(De[Ee]=g);return De};if(A.importSettings(b(ib)),A.useWithSource("",b(u),e,{strict:!1}),E){let[ue,Ie]=E;A.useWithSource(ue,b(Ie),w,{strict:!1})}if(a){if(await Xst({configuration:A,selfPath:a})!==null)return A;A.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let N=await t.findProjectCwd(e);A.startingCwd=e,A.projectCwd=N;let U=Object.assign(Object.create(null),process.env);A.env=U;let J=await Promise.all(A.get("injectEnvironmentFiles").map(async ue=>{let Ie=ue.endsWith("?")?await ae.readFilePromise(ue.slice(0,-1),"utf8").catch(()=>""):await ae.readFilePromise(ue,"utf8");return(0,gce.parse)(Ie)}));for(let ue of J)for(let[Ie,he]of Object.entries(ue))A.env[Ie]=NP(he,{env:U});if(A.importSettings(C(ib)),A.useWithSource("",C(u),e,{strict:o}),E){let[ue,Ie]=E;A.useWithSource(ue,C(Ie),w,{strict:o})}let te=ue=>"default"in ue?ue.default:ue,le=new Map([["@@core",Vse]]);if(r!==null)for(let ue of r.plugins.keys())le.set(ue,te(r.modules.get(ue)));for(let[ue,Ie]of le)A.activatePlugin(ue,Ie);let ce=new Map([]);if(r!==null){let ue=new Map;for(let[De,Ee]of r.modules)ue.set(De,()=>Ee);let Ie=new Set,he=async(De,Ee)=>{let{factory:g,name:me}=vf(De);if(!g||Ie.has(me))return;let Ce=new Map(ue),fe=Z=>{if((0,dce.isBuiltin)(Z))return vf(Z);if(Ce.has(Z))return Ce.get(Z)();throw new it(`This plugin cannot access the package referenced via ${Z} which is neither a builtin, nor an exposed entry`)},ie=await zm(async()=>te(await g(fe)),Z=>`${Z} (when initializing ${me}, defined in ${Ee})`);ue.set(me,()=>ie),Ie.add(me),ce.set(me,ie)};if(u.plugins)for(let De of u.plugins.split(";")){let Ee=V.resolve(e,Ae.toPortablePath(De));await he(Ee,"")}for(let{path:De,cwd:Ee,data:g}of p)if(n&&Array.isArray(g.plugins))for(let me of g.plugins){let Ce=typeof me!="string"?me.path:me,fe=me?.spec??"",ie=me?.checksum??"";if(j1.has(fe))continue;let Z=V.resolve(Ee,Ae.toPortablePath(Ce));if(!await ae.existsPromise(Z)){if(!fe){let ht=Ut(A,V.basename(Z,".cjs"),Ct.NAME),q=Ut(A,".gitignore",Ct.NAME),nt=Ut(A,A.values.get("rcFilename"),Ct.NAME),Le=Ut(A,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",Ct.URL);throw new it(`Missing source for the ${ht} plugin - please try to remove the plugin from ${nt} then reinstall it manually. This error usually occurs because ${q} is incorrect, check ${Le} to make sure your plugin folder isn't gitignored.`)}if(!fe.match(/^https?:/)){let ht=Ut(A,V.basename(Z,".cjs"),Ct.NAME),q=Ut(A,A.values.get("rcFilename"),Ct.NAME);throw new it(`Failed to recognize the source for the ${ht} plugin - please try to delete the plugin from ${q} then reinstall it manually.`)}let Se=await EU(fe,{configuration:A}),Re=Ji(Se);if(ie&&ie!==Re){let ht=Ut(A,V.basename(Z,".cjs"),Ct.NAME),q=Ut(A,A.values.get("rcFilename"),Ct.NAME),nt=Ut(A,`yarn plugin import ${fe}`,Ct.CODE);throw new it(`Failed to fetch the ${ht} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${q} then run ${nt} to reimport it.`)}await ae.mkdirPromise(V.dirname(Z),{recursive:!0}),await ae.writeFilePromise(Z,Se)}await he(Z,De)}}for(let[ue,Ie]of ce)A.activatePlugin(ue,Ie);if(A.useWithSource("",T(u),e,{strict:o}),E){let[ue,Ie]=E;A.useWithSource(ue,T(Ie),w,{strict:o})}return A.get("enableGlobalCache")&&(A.values.set("cacheFolder",`${A.get("globalFolder")}/cache`),A.sources.set("cacheFolder","")),A}static async findRcFiles(e){let r=SU(),o=[],a=e,n=null;for(;a!==n;){n=a;let u=V.join(n,r);if(ae.existsSync(u)){let A,p;try{p=await ae.readFilePromise(u,"utf8"),A=Vi(p)}catch{let h="";throw p?.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(h=" (in particular, make sure you list the colons after each key name)"),new it(`Parse error when loading ${u}; please check it's proper Yaml${h}`)}o.unshift({path:u,cwd:n,data:A})}a=V.dirname(n)}return o}static async findFolderRcFile(e){let r=V.join(e,mr.rc),o;try{o=await ae.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=Vi(o);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,o=e,a=null;for(;o!==a;){if(a=o,ae.existsSync(V.join(a,mr.lockfile)))return a;ae.existsSync(V.join(a,mr.manifest))&&(r=a),o=V.dirname(a)}return r}static async updateConfiguration(e,r,o={}){let a=SU(),n=V.join(e,a),u=ae.existsSync(n)?Vi(await ae.readFilePromise(n,"utf8")):{},A=!1,p;if(typeof r=="function"){try{p=r(u)}catch{p=r({})}if(p===u)return!1}else{p=u;for(let h of Object.keys(r)){let E=u[h],w=r[h],D;if(typeof w=="function")try{D=w(E)}catch{D=w(void 0)}else D=w;E!==D&&(D===t.deleteProperty?delete p[h]:p[h]=D,A=!0)}if(!A)return!1}return await ae.changeFilePromise(n,Sa(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await t.updateConfiguration(e,o=>{let a=o.plugins??[];if(a.length===0)return{...o,plugins:r};let n=[],u=[...r];for(let A of a){let p=typeof A!="string"?A.path:A,h=u.find(E=>E.path===p);h?(n.push(h),u=u.filter(E=>E!==h)):n.push(A)}return n.push(...u),{...o,plugins:n}})}static async updateHomeConfiguration(e){let r=my();return await t.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,o]of Object.entries(e))if(o!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,o),this.values.set(r,bU(this,o))}}useWithSource(e,r,o,a){try{this.use(e,r,o,a)}catch(n){throw n.message+=` (in ${Ut(this,e,Ct.PATH)})`,n}}use(e,r,o,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let u of["enableStrictSettings",...Object.keys(r)]){let A=r[u],p=e4(A);if(p&&(e=p),typeof A>"u"||u==="plugins"||e===""&&jst.has(u))continue;if(u==="rcFilename")throw new it(`The rcFilename settings can only be set via ${`${ob}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(u);if(!h){let w=my(),D=e[0]!=="<"?V.dirname(e):null;if(a&&!(D!==null?w===D:!1))throw new it(`Unrecognized or legacy configuration settings found: ${u} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(u,e);continue}if(this.sources.has(u)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let E;try{E=xU(this,u,A,h,o)}catch(w){throw w.message+=` in ${Ut(this,e,Ct.PATH)}`,w}if(u==="enableStrictSettings"&&e!==""){a=E;continue}if(h.type==="MAP"){let w=this.values.get(u);this.values.set(u,new Map(n?[...w,...E]:[...E,...w])),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let w=this.values.get(u);this.values.set(u,n?[...w,...E]:[...E,...w]),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else this.values.set(u,E),this.sources.set(u,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:o=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new it(`Couldn't find a configuration settings named "${e}"`);return sb(a,n,{hideSecrets:r,getNativePaths:o})}getSubprocessStreams(e,{header:r,prefix:o,report:a}){let n,u,A=ae.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${o} ${Ut(this,"STDOUT","green")}`),h=a.createStreamReporter(`${o} ${Ut(this,"STDERR","red")}`);n=new DU.PassThrough,n.pipe(p),n.pipe(A),u=new DU.PassThrough,u.pipe(h),u.pipe(A)}else n=A,u=A,typeof r<"u"&&n.write(`${r} +`);return{stdout:n,stderr:u}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let o of r.resolvers||[])e.push(new o);return new Sg([new Ix,new ci,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let o of r.fetchers||[])e.push(new o);return new py([new hy,new gy,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let o of r.linkers||[])e.push(new o);return e}getSupportedArchitectures(){let e=q1(),r=this.get("supportedArchitectures"),o=r.get("os");o!==null&&(o=o.map(u=>u==="current"?e.os:u));let a=r.get("cpu");a!==null&&(a=a.map(u=>u==="current"?e.cpu:u));let n=r.get("libc");return n!==null&&(n=ul(n,u=>u==="current"?e.libc??ul.skip:u)),{os:o,cpu:a,libc:n}}isInteractive({interactive:e,stdout:r}){return r.isTTY?e??this.get("preferInteractive"):!1}async getPackageExtensions(){if(this.packageExtensions!==null)return this.packageExtensions;this.packageExtensions=new Map;let e=this.packageExtensions,r=(o,a,{userProvided:n=!1}={})=>{if(!Fa(o.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let u=new _t;u.load(a,{yamlCompatibilityMode:!0});let A=u1(e,o.identHash),p=[];A.push([o.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:o};for(let E of u.dependencies.values())p.push({...h,type:"Dependency",descriptor:E});for(let E of u.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:E});for(let[E,w]of u.peerDependenciesMeta)for(let[D,b]of Object.entries(w))p.push({...h,type:"PeerDependencyMeta",selector:E,key:D,value:b})};await this.triggerHook(o=>o.registerPackageExtensions,this,r);for(let[o,a]of this.get("packageExtensions"))r(lh(o,!0),LP(a),{userProvided:!0});return e}normalizeLocator(e){return Fa(e.reference)?Ps(e,`${this.get("defaultProtocol")}${e.reference}`):by.test(e.reference)?Ps(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return Fa(e.range)?kn(e,`${this.get("defaultProtocol")}${e.range}`):by.test(e.range)?kn(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,o])=>[r,this.normalizeDependency(o)]))}normalizePackage(e,{packageExtensions:r}){let o=E1(e),a=r.get(e.identHash);if(typeof a<"u"){let u=e.version;if(u!==null){for(let[A,p]of a)if(nA(u,A))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof o.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof o.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let E=o.peerDependenciesMeta.get(h.selector);(typeof E>"u"||!Object.hasOwn(E,h.key)||E[h.key]!==h.value)&&(h.status="active",Al(o.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:tO(h)}}}let n=u=>u.scope?`${u.scope}__${u.name}`:`${u.name}`;for(let u of o.peerDependenciesMeta.keys()){let A=Zo(u);o.peerDependencies.has(A.identHash)||o.peerDependencies.set(A.identHash,kn(A,"*"))}for(let u of o.peerDependencies.values()){if(u.scope==="types")continue;let A=n(u),p=rA("types",A),h=rn(p);o.peerDependencies.has(p.identHash)||o.peerDependenciesMeta.has(h)||(o.peerDependencies.set(p.identHash,kn(p,"*")),o.peerDependenciesMeta.set(h,{optional:!0}))}return o.dependencies=new Map(Ss(o.dependencies,([,u])=>ka(u))),o.peerDependencies=new Map(Ss(o.peerDependencies,([,u])=>ka(u))),o}getLimit(e){return Al(this.limits,e,()=>(0,mce.default)(this.get(e)))}async triggerHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);n&&await n(...r)}}async triggerMultipleHooks(e,r){for(let o of r)await this.triggerHook(e,...o)}async reduceHook(e,r,...o){let a=r;for(let n of this.plugins.values()){let u=n.hooks;if(!u)continue;let A=e(u);A&&(a=await A(a,...o))}return a}async firstHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);if(!n)continue;let u=await n(...r);if(typeof u<"u")return u}return null}}});var Hr={};Vt(Hr,{EndStrategy:()=>RU,ExecError:()=>lb,PipeError:()=>Y1,execvp:()=>BU,pipevp:()=>Xc});function kg(t){return t!==null&&typeof t.fd=="number"}function kU(){}function QU(){for(let t of Qg)t.kill()}async function Xc(t,e,{cwd:r,env:o=process.env,strict:a=!1,stdin:n=null,stdout:u,stderr:A,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":kg(n)&&(h[0]=n),kg(u)&&(h[1]=u),kg(A)&&(h[2]=A);let E=(0,FU.default)(t,e,{cwd:Ae.fromPortablePath(r),env:{...o,PWD:Ae.fromPortablePath(r)},stdio:h});Qg.add(E),Qg.size===1&&(process.on("SIGINT",kU),process.on("SIGTERM",QU)),!kg(n)&&n!==null&&n.pipe(E.stdin),kg(u)||E.stdout.pipe(u,{end:!1}),kg(A)||E.stderr.pipe(A,{end:!1});let w=()=>{for(let D of new Set([u,A]))kg(D)||D.end()};return new Promise((D,b)=>{E.on("error",C=>{Qg.delete(E),Qg.size===0&&(process.off("SIGINT",kU),process.off("SIGTERM",QU)),(p===2||p===1)&&w(),b(C)}),E.on("close",(C,T)=>{Qg.delete(E),Qg.size===0&&(process.off("SIGINT",kU),process.off("SIGTERM",QU)),(p===2||p===1&&C!==0)&&w(),C===0||!a?D({code:TU(C,T)}):b(new Y1({fileName:t,code:C,signal:T}))})})}async function BU(t,e,{cwd:r,env:o=process.env,encoding:a="utf8",strict:n=!1}){let u=["ignore","pipe","pipe"],A=[],p=[],h=Ae.fromPortablePath(r);typeof o.PWD<"u"&&(o={...o,PWD:h});let E=(0,FU.default)(t,e,{cwd:h,env:o,stdio:u});return E.stdout.on("data",w=>{A.push(w)}),E.stderr.on("data",w=>{p.push(w)}),await new Promise((w,D)=>{E.on("error",b=>{let C=ze.create(r),T=Ut(C,t,Ct.PATH);D(new Jt(1,`Process ${T} failed to spawn`,N=>{N.reportError(1,` ${$u(C,{label:"Thrown Error",value:Yc(Ct.NO_HINT,b.message)})}`)}))}),E.on("close",(b,C)=>{let T=a==="buffer"?Buffer.concat(A):Buffer.concat(A).toString(a),N=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);b===0||!n?w({code:TU(b,C),stdout:T,stderr:N}):D(new lb({fileName:t,code:b,signal:C,stdout:T,stderr:N}))})})}function TU(t,e){let r=Zst.get(e);return typeof r<"u"?128+r:t??1}function $st(t,e,{configuration:r,report:o}){o.reportError(1,` ${$u(r,t!==null?{label:"Exit Code",value:Yc(Ct.NUMBER,t)}:{label:"Exit Signal",value:Yc(Ct.CODE,e)})}`)}var FU,RU,Y1,lb,Qg,Zst,nb=It(()=>{St();FU=et(MT());W1();Kl();Wl();RU=(o=>(o[o.Never=0]="Never",o[o.ErrorCode=1]="ErrorCode",o[o.Always=2]="Always",o))(RU||{}),Y1=class extends Jt{constructor({fileName:e,code:r,signal:o}){let a=ze.create(V.cwd()),n=Ut(a,e,Ct.PATH);super(1,`Child ${n} reported an error`,u=>{$st(r,o,{configuration:a,report:u})}),this.code=TU(r,o)}},lb=class extends Y1{constructor({fileName:e,code:r,signal:o,stdout:a,stderr:n}){super({fileName:e,code:r,signal:o}),this.stdout=a,this.stderr=n}};Qg=new Set;Zst=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function Cce(t){Ece=t}function V1(){return typeof LU>"u"&&(LU=Ece()),LU}var LU,Ece,NU=It(()=>{Ece=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var Ice=_((ub,MU)=>{var eot=Object.assign({},ve("fs")),OU=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(t=t||__filename),function(e){e=e||{};var r=typeof e<"u"?e:{},o,a;r.ready=new Promise(function(Je,st){o=Je,a=st});var n={},u;for(u in r)r.hasOwnProperty(u)&&(n[u]=r[u]);var A=[],p="./this.program",h=function(Je,st){throw st},E=!1,w=!0,D="";function b(Je){return r.locateFile?r.locateFile(Je,D):D+Je}var C,T,N,U;w&&(E?D=ve("path").dirname(D)+"/":D=__dirname+"/",C=function(st,vt){var ar=ia(st);return ar?vt?ar:ar.toString():(N||(N=eot),U||(U=ve("path")),st=U.normalize(st),N.readFileSync(st,vt?null:"utf8"))},T=function(st){var vt=C(st,!0);return vt.buffer||(vt=new Uint8Array(vt)),me(vt.buffer),vt},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),A=process.argv.slice(2),h=function(Je){process.exit(Je)},r.inspect=function(){return"[Emscripten Module object]"});var J=r.print||console.log.bind(console),te=r.printErr||console.warn.bind(console);for(u in n)n.hasOwnProperty(u)&&(r[u]=n[u]);n=null,r.arguments&&(A=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var le=0,ce=function(Je){le=Je},ue;r.wasmBinary&&(ue=r.wasmBinary);var Ie=r.noExitRuntime||!0;typeof WebAssembly!="object"&&Hi("no native wasm support detected");function he(Je,st,vt){switch(st=st||"i8",st.charAt(st.length-1)==="*"&&(st="i32"),st){case"i1":return Ke[Je>>0];case"i8":return Ke[Je>>0];case"i16":return ap((Je>>1)*2);case"i32":return Rs((Je>>2)*4);case"i64":return Rs((Je>>2)*4);case"float":return gu((Je>>2)*4);case"double":return op((Je>>3)*8);default:Hi("invalid type for getValue: "+st)}return null}var De,Ee=!1,g;function me(Je,st){Je||Hi("Assertion failed: "+st)}function Ce(Je){var st=r["_"+Je];return me(st,"Cannot call unknown function "+Je+", make sure it is exported"),st}function fe(Je,st,vt,ar,ee){var ye={string:function(Qi){var Sn=0;if(Qi!=null&&Qi!==0){var fa=(Qi.length<<2)+1;Sn=pi(fa),ht(Qi,Sn,fa)}return Sn},array:function(Qi){var Sn=pi(Qi.length);return Le(Qi,Sn),Sn}};function Ne(Qi){return st==="string"?Se(Qi):st==="boolean"?!!Qi:Qi}var gt=Ce(Je),mt=[],Dt=0;if(ar)for(var er=0;er=vt)&&xe[ar];)++ar;return Z.decode(xe.subarray(Je,ar))}function Re(Je,st,vt,ar){if(!(ar>0))return 0;for(var ee=vt,ye=vt+ar-1,Ne=0;Ne=55296&><=57343){var mt=Je.charCodeAt(++Ne);gt=65536+((gt&1023)<<10)|mt&1023}if(gt<=127){if(vt>=ye)break;st[vt++]=gt}else if(gt<=2047){if(vt+1>=ye)break;st[vt++]=192|gt>>6,st[vt++]=128|gt&63}else if(gt<=65535){if(vt+2>=ye)break;st[vt++]=224|gt>>12,st[vt++]=128|gt>>6&63,st[vt++]=128|gt&63}else{if(vt+3>=ye)break;st[vt++]=240|gt>>18,st[vt++]=128|gt>>12&63,st[vt++]=128|gt>>6&63,st[vt++]=128|gt&63}}return st[vt]=0,vt-ee}function ht(Je,st,vt){return Re(Je,xe,st,vt)}function q(Je){for(var st=0,vt=0;vt=55296&&ar<=57343&&(ar=65536+((ar&1023)<<10)|Je.charCodeAt(++vt)&1023),ar<=127?++st:ar<=2047?st+=2:ar<=65535?st+=3:st+=4}return st}function nt(Je){var st=q(Je)+1,vt=aa(st);return vt&&Re(Je,Ke,vt,st),vt}function Le(Je,st){Ke.set(Je,st)}function Te(Je,st){return Je%st>0&&(Je+=st-Je%st),Je}var ke,Ke,xe,tt,He,x,I,P,y,R;function z(Je){ke=Je,r.HEAP_DATA_VIEW=R=new DataView(Je),r.HEAP8=Ke=new Int8Array(Je),r.HEAP16=tt=new Int16Array(Je),r.HEAP32=x=new Int32Array(Je),r.HEAPU8=xe=new Uint8Array(Je),r.HEAPU16=He=new Uint16Array(Je),r.HEAPU32=I=new Uint32Array(Je),r.HEAPF32=P=new Float32Array(Je),r.HEAPF64=y=new Float64Array(Je)}var X=r.INITIAL_MEMORY||16777216,$,se=[],be=[],Fe=[],lt=!1;function Et(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)Pt(r.preRun.shift());hs(se)}function qt(){lt=!0,hs(be)}function nr(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Sr(r.postRun.shift());hs(Fe)}function Pt(Je){se.unshift(Je)}function cn(Je){be.unshift(Je)}function Sr(Je){Fe.unshift(Je)}var yr=0,Rr=null,Xr=null;function $n(Je){yr++,r.monitorRunDependencies&&r.monitorRunDependencies(yr)}function Xs(Je){if(yr--,r.monitorRunDependencies&&r.monitorRunDependencies(yr),yr==0&&(Rr!==null&&(clearInterval(Rr),Rr=null),Xr)){var st=Xr;Xr=null,st()}}r.preloadedImages={},r.preloadedAudios={};function Hi(Je){r.onAbort&&r.onAbort(Je),Je+="",te(Je),Ee=!0,g=1,Je="abort("+Je+"). Build with -s ASSERTIONS=1 for more info.";var st=new WebAssembly.RuntimeError(Je);throw a(st),st}var Qs="data:application/octet-stream;base64,";function Zs(Je){return Je.startsWith(Qs)}var bi="data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";Zs(bi)||(bi=b(bi));function Fs(Je){try{if(Je==bi&&ue)return new Uint8Array(ue);var st=ia(Je);if(st)return st;if(T)return T(Je);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(vt){Hi(vt)}}function $s(Je,st){var vt,ar,ee;try{ee=Fs(Je),ar=new WebAssembly.Module(ee),vt=new WebAssembly.Instance(ar,st)}catch(Ne){var ye=Ne.toString();throw te("failed to compile wasm module: "+ye),(ye.includes("imported Memory")||ye.includes("memory import"))&&te("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)."),Ne}return[vt,ar]}function PA(){var Je={a:dc};function st(ee,ye){var Ne=ee.exports;r.asm=Ne,De=r.asm.g,z(De.buffer),$=r.asm.W,cn(r.asm.h),Xs("wasm-instantiate")}if($n("wasm-instantiate"),r.instantiateWasm)try{var vt=r.instantiateWasm(Je,st);return vt}catch(ee){return te("Module.instantiateWasm callback failed with error: "+ee),!1}var ar=$s(bi,Je);return st(ar[0]),r.asm}function gu(Je){return R.getFloat32(Je,!0)}function op(Je){return R.getFloat64(Je,!0)}function ap(Je){return R.getInt16(Je,!0)}function Rs(Je){return R.getInt32(Je,!0)}function Nn(Je,st){R.setInt32(Je,st,!0)}function hs(Je){for(;Je.length>0;){var st=Je.shift();if(typeof st=="function"){st(r);continue}var vt=st.func;typeof vt=="number"?st.arg===void 0?$.get(vt)():$.get(vt)(st.arg):vt(st.arg===void 0?null:st.arg)}}function Ts(Je,st){var vt=new Date(Rs((Je>>2)*4)*1e3);Nn((st>>2)*4,vt.getUTCSeconds()),Nn((st+4>>2)*4,vt.getUTCMinutes()),Nn((st+8>>2)*4,vt.getUTCHours()),Nn((st+12>>2)*4,vt.getUTCDate()),Nn((st+16>>2)*4,vt.getUTCMonth()),Nn((st+20>>2)*4,vt.getUTCFullYear()-1900),Nn((st+24>>2)*4,vt.getUTCDay()),Nn((st+36>>2)*4,0),Nn((st+32>>2)*4,0);var ar=Date.UTC(vt.getUTCFullYear(),0,1,0,0,0,0),ee=(vt.getTime()-ar)/(1e3*60*60*24)|0;return Nn((st+28>>2)*4,ee),Ts.GMTString||(Ts.GMTString=nt("GMT")),Nn((st+40>>2)*4,Ts.GMTString),st}function pc(Je,st){return Ts(Je,st)}function hc(Je,st,vt){xe.copyWithin(Je,st,st+vt)}function gc(Je){try{return De.grow(Je-ke.byteLength+65535>>>16),z(De.buffer),1}catch{}}function xA(Je){var st=xe.length;Je=Je>>>0;var vt=2147483648;if(Je>vt)return!1;for(var ar=1;ar<=4;ar*=2){var ee=st*(1+.2/ar);ee=Math.min(ee,Je+100663296);var ye=Math.min(vt,Te(Math.max(Je,ee),65536)),Ne=gc(ye);if(Ne)return!0}return!1}function bA(Je){ce(Je)}function Ro(Je){var st=Date.now()/1e3|0;return Je&&Nn((Je>>2)*4,st),st}function To(){if(To.called)return;To.called=!0;var Je=new Date().getFullYear(),st=new Date(Je,0,1),vt=new Date(Je,6,1),ar=st.getTimezoneOffset(),ee=vt.getTimezoneOffset(),ye=Math.max(ar,ee);Nn((ja()>>2)*4,ye*60),Nn((rs()>>2)*4,+(ar!=ee));function Ne(sn){var ei=sn.toTimeString().match(/\(([A-Za-z ]+)\)$/);return ei?ei[1]:"GMT"}var gt=Ne(st),mt=Ne(vt),Dt=nt(gt),er=nt(mt);ee>2)*4,Dt),Nn((Di()+4>>2)*4,er)):(Nn((Di()>>2)*4,er),Nn((Di()+4>>2)*4,Dt))}function kA(Je){To();var st=Date.UTC(Rs((Je+20>>2)*4)+1900,Rs((Je+16>>2)*4),Rs((Je+12>>2)*4),Rs((Je+8>>2)*4),Rs((Je+4>>2)*4),Rs((Je>>2)*4),0),vt=new Date(st);Nn((Je+24>>2)*4,vt.getUTCDay());var ar=Date.UTC(vt.getUTCFullYear(),0,1,0,0,0,0),ee=(vt.getTime()-ar)/(1e3*60*60*24)|0;return Nn((Je+28>>2)*4,ee),vt.getTime()/1e3|0}var pr=typeof atob=="function"?atob:function(Je){var st="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",vt="",ar,ee,ye,Ne,gt,mt,Dt,er=0;Je=Je.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Ne=st.indexOf(Je.charAt(er++)),gt=st.indexOf(Je.charAt(er++)),mt=st.indexOf(Je.charAt(er++)),Dt=st.indexOf(Je.charAt(er++)),ar=Ne<<2|gt>>4,ee=(gt&15)<<4|mt>>2,ye=(mt&3)<<6|Dt,vt=vt+String.fromCharCode(ar),mt!==64&&(vt=vt+String.fromCharCode(ee)),Dt!==64&&(vt=vt+String.fromCharCode(ye));while(er0||(Et(),yr>0))return;function st(){Dn||(Dn=!0,r.calledRun=!0,!Ee&&(qt(),o(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),nr()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),st()},1)):st()}if(r.run=Pl,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return Pl(),e}}();typeof ub=="object"&&typeof MU=="object"?MU.exports=OU:typeof define=="function"&&define.amd?define([],function(){return OU}):typeof ub=="object"&&(ub.createModule=OU)});var Lf,wce,Bce,vce=It(()=>{Lf=["number","number"],wce=(Z=>(Z[Z.ZIP_ER_OK=0]="ZIP_ER_OK",Z[Z.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",Z[Z.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",Z[Z.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",Z[Z.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",Z[Z.ZIP_ER_READ=5]="ZIP_ER_READ",Z[Z.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",Z[Z.ZIP_ER_CRC=7]="ZIP_ER_CRC",Z[Z.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",Z[Z.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",Z[Z.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",Z[Z.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",Z[Z.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",Z[Z.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",Z[Z.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",Z[Z.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",Z[Z.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",Z[Z.ZIP_ER_EOF=17]="ZIP_ER_EOF",Z[Z.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",Z[Z.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",Z[Z.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",Z[Z.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",Z[Z.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",Z[Z.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",Z[Z.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",Z[Z.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",Z[Z.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",Z[Z.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",Z[Z.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",Z[Z.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",Z[Z.ZIP_ER_TELL=30]="ZIP_ER_TELL",Z[Z.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",Z))(wce||{}),Bce=t=>({get HEAPU8(){return t.HEAPU8},errors:wce,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_EXCL:2,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),uint32S:t._malloc(4),malloc:t._malloc,free:t._free,getValue:t.getValue,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"]),statIndex:t.cwrap("zip_stat_index","number",["number",...Lf,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Lf,"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",...Lf,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Lf,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Lf,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Lf,"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",...Lf,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Lf,"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",...Lf,"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"])},struct:{statS:t.cwrap("zipstruct_statS","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"]),errorS:t.cwrap("zipstruct_errorS","number",[]),errorCodeZip:t.cwrap("zipstruct_error_code_zip","number",["number"])}})});function UU(t,e){let r=t.indexOf(e);if(r<=0)return null;let o=r;for(;r>=0&&(o=r+e.length,t[o]!==V.sep);){if(t[r-1]===V.sep)return null;r=t.indexOf(e,o)}return t.length>o&&t[o]!==V.sep?null:t.slice(0,o)}var iA,Dce=It(()=>{St();St();sA();iA=class t extends Gp{static async openPromise(e,r){let o=new t(r);try{return await e(o)}finally{o.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,o=e.readOnlyArchives,a=typeof r>"u"?A=>UU(A,".zip"):A=>{for(let p of r){let h=UU(A,p);if(h)return h}return null},n=(A,p)=>new Zi(p,{baseFs:A,readOnly:o,stats:A.statSync(p)}),u=async(A,p)=>{let h={baseFs:A,readOnly:o,stats:await A.statPromise(p)};return()=>new Zi(p,h)};super({...e,factorySync:n,factoryPromise:u,getMountPoint:a})}}});function tot(t){if(typeof t=="string"&&String(+t)===t)return+t;if(typeof t=="number"&&Number.isFinite(t))return t<0?Date.now()/1e3:t;if(Sce.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function Ab(){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 ta,_U,Sce,HU,Pce,fb,Zi,qU=It(()=>{St();St();St();St();St();St();ta=ve("fs"),_U=ve("stream"),Sce=ve("util"),HU=et(ve("zlib"));NU();Pce="mixed";fb=class extends Error{constructor(e,r){super(e),this.name="Libzip Error",this.code=r}},Zi=class extends qu{constructor(r,o={}){super();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;let a=o;if(this.level=typeof a.level<"u"?a.level:Pce,r??=Ab(),typeof r=="string"){let{baseFs:A=new _n}=a;this.baseFs=A,this.path=r}else this.path=null,this.baseFs=null;if(o.stats)this.stats=o.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(A){if(A.code==="ENOENT"&&a.create)this.stats=wa.makeDefaultStats();else throw A}else this.stats=wa.makeDefaultStats();this.libzip=V1();let n=this.libzip.malloc(4);try{let A=0;o.readOnly&&(A|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof r=="string"&&(r=a.create?Ab():this.baseFs.readFileSync(r));let p=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(p,A,n),this.lzSource=p}catch(h){throw this.libzip.source.free(p),h}if(this.zip===0){let h=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(h,this.libzip.getValue(n,"i32")),this.makeLibzipError(h)}}finally{this.libzip.free(n)}this.listings.set(Bt.root,new Set);let u=this.libzip.getNumEntries(this.zip,0);for(let A=0;Ar)throw new Error("Overread");let n=Buffer.from(this.libzip.HEAPU8.subarray(o,o+r));return process.env.YARN_IS_TEST_ENV&&process.env.YARN_ZIP_DATA_EPILOGUE&&(n=Buffer.concat([n,Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)])),n}finally{this.libzip.free(o)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.readOnly){this.discardAndClose();return}let r=this.baseFs.existsSync(this.path)||this.stats.mode===wa.DEFAULT_MODE?void 0:this.stats.mode;this.baseFs.writeFileSync(this.path,this.getBufferAndClose(),{mode:r}),this.ready=!1}resolve(r){return V.resolve(Bt.root,r)}async openPromise(r,o,a){return this.openSync(r,o,a)}openSync(r,o,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(r,o){return this.opendirSync(r,o)}opendirSync(r,o={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw sr.ENOENT(`opendir '${r}'`);let n=this.listings.get(a);if(!n)throw sr.ENOTDIR(`opendir '${r}'`);let u=[...n],A=this.openSync(a,"r");return eS(this,a,u,{onClose:()=>{this.closeSync(A)}})}async readPromise(r,o,a,n,u){return this.readSync(r,o,a,n,u)}readSync(r,o,a=0,n=o.byteLength,u=-1){let A=this.fds.get(r);if(typeof A>"u")throw sr.EBADF("read");let p=u===-1||u===null?A.cursor:u,h=this.readFileSync(A.p);h.copy(o,a,p,p+n);let E=Math.max(0,Math.min(h.length-p,n));return(u===-1||u===null)&&(A.cursor+=E),E}async writePromise(r,o,a,n,u){return typeof o=="string"?this.writeSync(r,o,u):this.writeSync(r,o,a,n,u)}writeSync(r,o,a,n,u){throw typeof this.fds.get(r)>"u"?sr.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw sr.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:o}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new _U.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(A,p)=>{clearImmediate(u),this.closeSync(a),p(A)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),u=setImmediate(async()=>{try{let A=await this.readFilePromise(r,o);n.bytesRead=A.length,n.end(A)}catch(A){n.destroy(A)}});return n}createWriteStream(r,{encoding:o}={}){if(this.readOnly)throw sr.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),u=Object.assign(new _U.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(A,p)=>{try{A?p(A):(this.writeFileSync(r,Buffer.concat(a),o),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){u.destroy()},bytesWritten:0,path:r,pending:!1});return u.on("data",A=>{let p=Buffer.from(A);u.bytesWritten+=p.length,a.push(p)}),u}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let o=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(o)&&!this.listings.has(o))throw sr.ENOENT(`lstat '${r}'`);return o}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw sr.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=V.resolve(Bt.root,r);return this.entries.has(a)||this.listings.has(a)}let o;try{o=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return o===void 0?!1:this.entries.has(o)||this.listings.has(o)}async accessPromise(r,o){return this.accessSync(r,o)}accessSync(r,o=ta.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw sr.ENOENT(`access '${r}'`);if(this.readOnly&&o&ta.constants.W_OK)throw sr.EROFS(`access '${r}'`)}async statPromise(r,o={bigint:!1}){return o.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw sr.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw sr.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,o)}}async fstatPromise(r,o){return this.fstatSync(r,o)}fstatSync(r,o){let a=this.fds.get(r);if(typeof a>"u")throw sr.EBADF("fstatSync");let{p:n}=a,u=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(u)&&!this.listings.has(u))throw sr.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(u))throw sr.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,u,o)}async lstatPromise(r,o={bigint:!1}){return o.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw sr.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw sr.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,o)}}statImpl(r,o,a={}){let n=this.entries.get(o);if(typeof n<"u"){let u=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,u)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let p=this.stats.uid,h=this.stats.gid,E=this.libzip.struct.statSize(u)>>>0,w=512,D=Math.ceil(E/w),b=(this.libzip.struct.statMtime(u)>>>0)*1e3,C=b,T=b,N=b,U=new Date(C),J=new Date(T),te=new Date(N),le=new Date(b),ce=this.listings.has(o)?ta.constants.S_IFDIR:this.isSymbolicLink(n)?ta.constants.S_IFLNK:ta.constants.S_IFREG,ue=ce===ta.constants.S_IFDIR?493:420,Ie=ce|this.getUnixMode(n,ue)&511,he=this.libzip.struct.statCrc(u),De=Object.assign(new wa.StatEntry,{uid:p,gid:h,size:E,blksize:w,blocks:D,atime:U,birthtime:J,ctime:te,mtime:le,atimeMs:C,birthtimeMs:T,ctimeMs:N,mtimeMs:b,mode:Ie,crc:he});return a.bigint===!0?wa.convertToBigIntStats(De):De}if(this.listings.has(o)){let u=this.stats.uid,A=this.stats.gid,p=0,h=512,E=0,w=this.stats.mtimeMs,D=this.stats.mtimeMs,b=this.stats.mtimeMs,C=this.stats.mtimeMs,T=new Date(w),N=new Date(D),U=new Date(b),J=new Date(C),te=ta.constants.S_IFDIR|493,ce=Object.assign(new wa.StatEntry,{uid:u,gid:A,size:p,blksize:h,blocks:E,atime:T,birthtime:N,ctime:U,mtime:J,atimeMs:w,birthtimeMs:D,ctimeMs:b,mtimeMs:C,mode:te,crc:0});return a.bigint===!0?wa.convertToBigIntStats(ce):ce}throw new Error("Unreachable")}getUnixMode(r,o){if(this.libzip.file.getExternalAttributes(this.zip,r,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?o:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(r){let o=this.listings.get(r);if(o)return o;this.registerListing(V.dirname(r)).add(V.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,o){this.registerListing(V.dirname(r)).add(V.basename(r)),this.entries.set(r,o)}unregisterListing(r){this.listings.delete(r),this.listings.get(V.dirname(r))?.delete(V.basename(r))}unregisterEntry(r){this.unregisterListing(r);let o=this.entries.get(r);this.entries.delete(r),!(typeof o>"u")&&(this.fileSources.delete(o),this.isSymbolicLink(o)&&this.symlinkCount--)}deleteEntry(r,o){if(this.unregisterEntry(r),this.libzip.delete(this.zip,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(r,o,a=!0,n=!0){if(!this.ready)throw sr.EBUSY(`archive closed, ${r}`);let u=V.resolve(Bt.root,o);if(u==="/")return Bt.root;let A=this.entries.get(u);if(a&&A!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(A)){let p=this.getFileSource(A).toString();return this.resolveFilename(r,V.resolve(V.dirname(u),p),!0,n)}else return u;for(;;){let p=this.resolveFilename(r,V.dirname(u),!0,n);if(p===void 0)return p;let h=this.listings.has(p),E=this.entries.has(p);if(!h&&!E){if(n===!1)return;throw sr.ENOENT(r)}if(!h)throw sr.ENOTDIR(r);if(u=V.resolve(p,V.basename(u)),!a||this.symlinkCount===0)break;let w=this.libzip.name.locate(this.zip,u.slice(1),0);if(w===-1)break;if(this.isSymbolicLink(w)){let D=this.getFileSource(w).toString();u=V.resolve(V.dirname(u),D)}else break}return u}allocateBuffer(r){Buffer.isBuffer(r)||(r=Buffer.from(r));let o=this.libzip.malloc(r.byteLength);if(!o)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,o,r.byteLength).set(r),{buffer:o,byteLength:r.byteLength}}allocateUnattachedSource(r){let o=this.libzip.struct.errorS(),{buffer:a,byteLength:n}=this.allocateBuffer(r),u=this.libzip.source.fromUnattachedBuffer(a,n,0,1,o);if(u===0)throw this.libzip.free(o),this.makeLibzipError(o);return u}allocateSource(r){let{buffer:o,byteLength:a}=this.allocateBuffer(r),n=this.libzip.source.fromBuffer(this.zip,o,a,0,1);if(n===0)throw this.libzip.free(o),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(r,o){let a=Buffer.isBuffer(o)?o:Buffer.from(o),n=V.relative(Bt.root,r),u=this.allocateSource(o);try{let A=this.libzip.file.add(this.zip,n,u,this.libzip.ZIP_FL_OVERWRITE);if(A===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let p=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,A,0,p,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(A,a),A}catch(A){throw this.libzip.source.free(u),A}}isSymbolicLink(r){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,r,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&ta.constants.S_IFMT)===ta.constants.S_IFLNK}getFileSource(r,o={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,r,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let A=this.libzip.struct.statCompSize(n),p=this.libzip.struct.statCompMethod(n),h=this.libzip.malloc(A);try{let E=this.libzip.fopenIndex(this.zip,r,0,this.libzip.ZIP_FL_COMPRESSED);if(E===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let w=this.libzip.fread(E,h,A,0);if(w===-1)throw this.makeLibzipError(this.libzip.file.getError(E));if(wA)throw new Error("Overread");let D=this.libzip.HEAPU8.subarray(h,h+A),b=Buffer.from(D);if(p===0)return this.fileSources.set(r,b),b;if(o.asyncDecompress)return new Promise((C,T)=>{HU.default.inflateRaw(b,(N,U)=>{N?T(N):(this.fileSources.set(r,U),C(U))})});{let C=HU.default.inflateRawSync(b);return this.fileSources.set(r,C),C}}finally{this.libzip.fclose(E)}}finally{this.libzip.free(h)}}async fchmodPromise(r,o){return this.chmodPromise(this.fdToPath(r,"fchmod"),o)}fchmodSync(r,o){return this.chmodSync(this.fdToPath(r,"fchmodSync"),o)}async chmodPromise(r,o){return this.chmodSync(r,o)}chmodSync(r,o){if(this.readOnly)throw sr.EROFS(`chmod '${r}'`);o&=493;let a=this.resolveFilename(`chmod '${r}'`,r,!1),n=this.entries.get(a);if(typeof n>"u")throw new Error(`Assertion failed: The entry should have been registered (${a})`);let A=this.getUnixMode(n,ta.constants.S_IFREG|0)&-512|o;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,A<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(r,o,a){return this.chownPromise(this.fdToPath(r,"fchown"),o,a)}fchownSync(r,o,a){return this.chownSync(this.fdToPath(r,"fchownSync"),o,a)}async chownPromise(r,o,a){return this.chownSync(r,o,a)}chownSync(r,o,a){throw new Error("Unimplemented")}async renamePromise(r,o){return this.renameSync(r,o)}renameSync(r,o){throw new Error("Unimplemented")}async copyFilePromise(r,o,a){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}copyFileSync(r,o,a=0){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=this.getFileSource(n),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}prepareCopyFile(r,o,a=0){if(this.readOnly)throw sr.EROFS(`copyfile '${r} -> '${o}'`);if(a&ta.constants.COPYFILE_FICLONE_FORCE)throw sr.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${o}'`);let n=this.resolveFilename(`copyfile '${r} -> ${o}'`,r),u=this.entries.get(n);if(typeof u>"u")throw sr.EINVAL(`copyfile '${r}' -> '${o}'`);let A=this.resolveFilename(`copyfile '${r}' -> ${o}'`,o),p=this.entries.get(A);if(a&(ta.constants.COPYFILE_EXCL|ta.constants.COPYFILE_FICLONE_FORCE)&&typeof p<"u")throw sr.EEXIST(`copyfile '${r}' -> '${o}'`);return{indexSource:u,resolvedDestP:A,indexDest:p}}async appendFilePromise(r,o,a){if(this.readOnly)throw sr.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFilePromise(r,o,a)}appendFileSync(r,o,a={}){if(this.readOnly)throw sr.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFileSync(r,o,a)}fdToPath(r,o){let a=this.fds.get(r)?.p;if(typeof a>"u")throw sr.EBADF(o);return a}async writeFilePromise(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([await this.getFileSource(A,{asyncDecompress:!0}),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&await this.chmodPromise(p,u)}writeFileSync(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([this.getFileSource(A),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&this.chmodSync(p,u)}prepareWriteFile(r,o){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw sr.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw sr.EISDIR(`open '${r}'`);let n=null,u=null;typeof o=="string"?n=o:typeof o=="object"&&({encoding:n=null,mode:u=null}=o);let A=this.entries.get(a);return{encoding:n,mode:u,resolvedP:a,index:A}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw sr.EROFS(`unlink '${r}'`);let o=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(o))throw sr.EISDIR(`unlink '${r}'`);let a=this.entries.get(o);if(typeof a>"u")throw sr.EINVAL(`unlink '${r}'`);this.deleteEntry(o,a)}async utimesPromise(r,o,a){return this.utimesSync(r,o,a)}utimesSync(r,o,a){if(this.readOnly)throw sr.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,o,a){return this.lutimesSync(r,o,a)}lutimesSync(r,o,a){if(this.readOnly)throw sr.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,o){this.listings.has(r)&&(this.entries.has(r)||this.hydrateDirectory(r));let a=this.entries.get(r);if(a===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,a,0,tot(o),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(r,o){return this.mkdirSync(r,o)}mkdirSync(r,{mode:o=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:o});if(this.readOnly)throw sr.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw sr.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,o)}async rmdirPromise(r,o){return this.rmdirSync(r,o)}rmdirSync(r,{recursive:o=!1}={}){if(this.readOnly)throw sr.EROFS(`rmdir '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw sr.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw sr.ENOTEMPTY(`rmdir '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw sr.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,u)}async rmPromise(r,o){return this.rmSync(r,o)}rmSync(r,{recursive:o=!1}={}){if(this.readOnly)throw sr.EROFS(`rm '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rm '${r}'`,r),n=this.listings.get(a);if(!n)throw sr.ENOTDIR(`rm '${r}'`);if(n.size>0)throw sr.ENOTEMPTY(`rm '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw sr.EINVAL(`rm '${r}'`);this.deleteEntry(r,u)}hydrateDirectory(r){let o=this.libzip.dir.add(this.zip,V.relative(Bt.root,r));if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(r),this.registerEntry(r,o),o}async linkPromise(r,o){return this.linkSync(r,o)}linkSync(r,o){throw sr.EOPNOTSUPP(`link '${r}' -> '${o}'`)}async symlinkPromise(r,o){return this.symlinkSync(r,o)}symlinkSync(r,o){if(this.readOnly)throw sr.EROFS(`symlink '${r}' -> '${o}'`);let a=this.resolveFilename(`symlink '${r}' -> '${o}'`,o);if(this.listings.has(a))throw sr.EISDIR(`symlink '${r}' -> '${o}'`);if(this.entries.has(a))throw sr.EEXIST(`symlink '${r}' -> '${o}'`);let n=this.setFileSource(a,r);if(this.registerEntry(a,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(ta.constants.S_IFLNK|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return o?a.toString(o):a}readFileSync(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=this.readFileBuffer(r);return o?a.toString(o):a}readFileBuffer(r,o={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdToPath(r,"read"));let a=this.resolveFilename(`open '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw sr.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw sr.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw sr.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,o)}async readdirPromise(r,o){return this.readdirSync(r,o)}readdirSync(r,o){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw sr.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw sr.ENOTDIR(`scandir '${r}'`);if(o?.recursive)if(o?.withFileTypes){let u=Array.from(n,A=>Object.assign(this.statImpl("lstat",V.join(r,A)),{name:A,path:Bt.dot}));for(let A of u){if(!A.isDirectory())continue;let p=V.join(A.path,A.name),h=this.listings.get(V.join(a,p));for(let E of h)u.push(Object.assign(this.statImpl("lstat",V.join(r,p,E)),{name:E,path:p}))}return u}else{let u=[...n];for(let A of u){let p=this.listings.get(V.join(a,A));if(!(typeof p>"u"))for(let h of p)u.push(V.join(A,h))}return u}else return o?.withFileTypes?Array.from(n,u=>Object.assign(this.statImpl("lstat",V.join(r,u)),{name:u,path:void 0})):[...n]}async readlinkPromise(r){let o=this.prepareReadlink(r);return(await this.getFileSource(o,{asyncDecompress:!0})).toString()}readlinkSync(r){let o=this.prepareReadlink(r);return this.getFileSource(o).toString()}prepareReadlink(r){let o=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(o)&&!this.listings.has(o))throw sr.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(o))throw sr.ENOTDIR(`open '${r}'`);if(this.listings.has(o))throw sr.EINVAL(`readlink '${r}'`);let a=this.entries.get(o);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw sr.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw sr.EINVAL(`open '${r}'`);let u=await this.getFileSource(n,{asyncDecompress:!0}),A=Buffer.alloc(o,0);return u.copy(A),await this.writeFilePromise(r,A)}truncateSync(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw sr.EINVAL(`open '${r}'`);let u=this.getFileSource(n),A=Buffer.alloc(o,0);return u.copy(A),this.writeFileSync(r,A)}async ftruncatePromise(r,o){return this.truncatePromise(this.fdToPath(r,"ftruncate"),o)}ftruncateSync(r,o){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),o)}watch(r,o,a){let n;switch(typeof o){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=o);break}if(!n)return{on:()=>{},close:()=>{}};let u=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(u)}}}watchFile(r,o,a){let n=V.resolve(Bt.root,r);return um(this,n,o,a)}unwatchFile(r,o){let a=V.resolve(Bt.root,r);return q0(this,a,o)}}});function bce(t,e,r=Buffer.alloc(0),o){let a=new Zi(r),n=w=>w===e||w.startsWith(`${e}/`)?w.slice(0,e.length):null,u=async(w,D)=>()=>a,A=(w,D)=>a,p={...t},h=new _n(p),E=new Gp({baseFs:h,getMountPoint:n,factoryPromise:u,factorySync:A,magicByte:21,maxAge:1/0,typeCheck:o?.typeCheck});return uw(xce.default,new Wp(E)),a}var xce,kce=It(()=>{St();xce=et(ve("fs"));qU()});var Qce=It(()=>{Dce();qU();kce()});var K1={};Vt(K1,{DEFAULT_COMPRESSION_LEVEL:()=>Pce,LibzipError:()=>fb,ZipFS:()=>Zi,ZipOpenFS:()=>iA,getArchivePart:()=>UU,getLibzipPromise:()=>not,getLibzipSync:()=>rot,makeEmptyArchive:()=>Ab,mountMemoryDrive:()=>bce});function rot(){return V1()}async function not(){return V1()}var Fce,sA=It(()=>{NU();Fce=et(Ice());vce();Qce();Cce(()=>{let t=(0,Fce.default)();return Bce(t)})});var J1,Rce=It(()=>{St();Gt();z1();J1=class extends ot{constructor(){super(...arguments);this.cwd=de.String("--cwd",process.cwd(),{description:"The directory to run the command in"});this.commandName=de.String();this.args=de.Proxy()}static{this.usage={description:"run a command using yarn's portable shell",details:` + This command will run a command using Yarn's portable shell. + + Make sure to escape glob patterns, redirections, and other features that might be expanded by your own shell. + + Note: To escape something from Yarn's shell, you might have to escape it twice, the first time from your own shell. + + Note: Don't use this command in Yarn scripts, as Yarn's shell is automatically used. + + For a list of features, visit: https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-shell/README.md. + `,examples:[["Run a simple command","$0 echo Hello"],["Run a command with a glob pattern","$0 echo '*.js'"],["Run a command with a redirection","$0 echo Hello World '>' hello.txt"],["Run a command with an escaped glob pattern (The double escape is needed in Unix shells)",`$0 echo '"*.js"'`],["Run a command with a variable (Double quotes are needed in Unix shells, to prevent them from expanding the variable)",'$0 "GREETING=Hello echo $GREETING World"']]}}async execute(){let r=this.args.length>0?`${this.commandName} ${this.args.join(" ")}`:this.commandName;return await ky(r,[],{cwd:Ae.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}}});var fl,Tce=It(()=>{fl=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var gb={};Vt(gb,{fastGlobOptions:()=>Oce,isBraceExpansion:()=>jU,isGlobPattern:()=>iot,match:()=>sot,micromatchOptions:()=>hb});function iot(t){if(!pb.default.scan(t,hb).isGlob)return!1;try{pb.default.parse(t,hb)}catch{return!1}return!0}function sot(t,{cwd:e,baseFs:r}){return(0,Lce.default)(t,{...Oce,cwd:Ae.fromPortablePath(e),fs:aS(Nce.default,new Wp(r))})}function jU(t){return pb.default.scan(t,hb).isBrace}var Lce,Nce,pb,hb,Oce,Mce=It(()=>{St();Lce=et(ux()),Nce=et(ve("fs")),pb=et(Xo()),hb={strictBrackets:!0},Oce={onlyDirectories:!1,onlyFiles:!1}});function GU(){}function WU(){for(let t of Fg)t.kill()}function qce(t,e,r,o){return a=>{let n=a[0]instanceof oA.Transform?"pipe":a[0],u=a[1]instanceof oA.Transform?"pipe":a[1],A=a[2]instanceof oA.Transform?"pipe":a[2],p=(0,_ce.default)(t,e,{...o,stdio:[n,u,A]});return Fg.add(p),Fg.size===1&&(process.on("SIGINT",GU),process.on("SIGTERM",WU)),a[0]instanceof oA.Transform&&a[0].pipe(p.stdin),a[1]instanceof oA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof oA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",E=>{switch(Fg.delete(p),Fg.size===0&&(process.off("SIGINT",GU),process.off("SIGTERM",WU)),E.code){case"ENOENT":a[2].write(`command not found: ${t} +`),h(127);break;case"EACCES":a[2].write(`permission denied: ${t} +`),h(128);break;default:a[2].write(`uncaught error: ${E.message} +`),h(1);break}}),p.on("close",E=>{Fg.delete(p),Fg.size===0&&(process.off("SIGINT",GU),process.off("SIGTERM",WU)),h(E!==null?E:129)})})}}}function jce(t){return e=>{let r=e[0]==="pipe"?new oA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function db(t,e){return VU.start(t,e)}function Uce(t,e=null){let r=new oA.PassThrough,o=new Hce.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",t(e!==null?`${e} ${p}`:p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&t(e!==null?`${e} ${n}`:n)}),r}function Gce(t,{prefix:e}){return{stdout:Uce(r=>t.stdout.write(`${r} +`),t.stdout.isTTY?e:null),stderr:Uce(r=>t.stderr.write(`${r} +`),t.stderr.isTTY?e:null)}}var _ce,oA,Hce,Fg,Zl,YU,VU,KU=It(()=>{_ce=et(MT()),oA=ve("stream"),Hce=ve("string_decoder"),Fg=new Set;Zl=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},YU=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}},VU=class t{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:o,stderr:a}){let n=new t(null,e);return n.stdin=r,n.stdout=o,n.stderr=a,n}pipeTo(e,r=1){let o=new t(this,e),a=new YU;return o.pipe=a,o.stdout=this.stdout,o.stderr=this.stderr,(r&1)===1?this.stdout=a:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)===2?this.stderr=a:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),o}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 o;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");o=this.stderr,e[2]=o.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),o.close(),n))}async run(){let e=[];for(let o=this;o;o=o.ancestor)e.push(o.exec());return(await Promise.all(e))[0]}}});var e2={};Vt(e2,{EntryCommand:()=>J1,ShellError:()=>fl,execute:()=>ky,globUtils:()=>gb});function Wce(t,e,r){let o=new pl.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(o,{end:!1}),(e&2)===2&&r.stdin instanceof pl.Writable&&o.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stderr,{end:!1});break;default:throw new fl(`Bad file descriptor: "${t}"`)}return o}function yb(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function aot(t,e,r){let o=[],a=new pl.PassThrough;return a.on("data",n=>o.push(n)),await Eb(t,e,yb(r,{stdout:a})),Buffer.concat(o).toString().replace(/[\r\n]+$/,"")}async function Yce(t,e,r){let o=t.map(async n=>{let u=await Rg(n.args,e,r);return{name:n.name,value:u.join(" ")}});return(await Promise.all(o)).reduce((n,u)=>(n[u.name]=u.value,n),{})}function mb(t){return t.match(/[^ \r\n\t]+/g)||[]}async function Zce(t,e,r,o,a=o){switch(t.name){case"$":o(String(process.pid));break;case"#":o(String(e.args.length));break;case"@":if(t.quoted)for(let n of e.args)a(n);else for(let n of e.args){let u=mb(n);for(let A=0;A=0&&n"u"&&(t.defaultValue?u=(await Rg(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(u="")),typeof u>"u")throw A?new fl(`Unbound argument #${n}`):new fl(`Unbound variable "${t.name}"`);if(t.quoted)o(u);else{let p=mb(u);for(let E=0;Eo.push(n));let a=Number(o.join(" "));return Number.isNaN(a)?X1({type:"variable",name:o.join(" ")},e,r):X1({type:"number",value:a},e,r)}else return lot[t.type](await X1(t.left,e,r),await X1(t.right,e,r))}async function Rg(t,e,r){let o=new Map,a=[],n=[],u=E=>{n.push(E)},A=()=>{n.length>0&&a.push(n.join("")),n=[]},p=E=>{u(E),A()},h=(E,w,D)=>{let b=JSON.stringify({type:E,fd:w}),C=o.get(b);typeof C>"u"&&o.set(b,C=[]),C.push(D)};for(let E of t){let w=!1;switch(E.type){case"redirection":{let D=await Rg(E.args,e,r);for(let b of D)h(E.subtype,E.fd,b)}break;case"argument":for(let D of E.segments)switch(D.type){case"text":u(D.text);break;case"glob":u(D.pattern),w=!0;break;case"shell":{let b=await aot(D.shell,e,r);if(D.quoted)u(b);else{let C=mb(b);for(let T=0;T"u")throw new Error("Assertion failed: Expected a glob pattern to have been set");let b=await e.glob.match(D,{cwd:r.cwd,baseFs:e.baseFs});if(b.length===0){let C=jU(D)?". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22":"";throw new fl(`No matches found: "${D}"${C}`)}for(let C of b.sort())p(C)}}if(o.size>0){let E=[];for(let[w,D]of o.entries())E.splice(E.length,0,w,String(D.length),...D);a.splice(0,0,"__ysh_set_redirects",...E,"--")}return a}function Z1(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let o=Ae.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:o});let[n,...u]=t;if(n==="command")return qce(u[0],u.slice(1),e,{cwd:o,env:a});let A=e.builtins.get(n);if(typeof A>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return jce(async({stdin:p,stdout:h,stderr:E})=>{let{stdin:w,stdout:D,stderr:b}=r;r.stdin=p,r.stdout=h,r.stderr=E;try{return await A(u,e,r)}finally{r.stdin=w,r.stdout=D,r.stderr=b}})}function cot(t,e,r){return o=>{let a=new pl.PassThrough,n=Eb(t,e,yb(r,{stdin:a}));return{stdin:a,promise:n}}}function uot(t,e,r){return o=>{let a=new pl.PassThrough,n=Eb(t,e,r);return{stdin:a,promise:n}}}function Vce(t,e,r,o){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(o.procedures,a));return o.procedures={...o.procedures},o.procedures[a]=t,Z1([...e,"__ysh_run_procedure",a],r,o)}}async function Kce(t,e,r){let o=t,a=null,n=null;for(;o;){let u=o.then?{...r}:r,A;switch(o.type){case"command":{let p=await Rg(o.args,e,r),h=await Yce(o.envs,e,r);A=o.envs.length?Z1(p,e,yb(u,{environment:h})):Z1(p,e,u)}break;case"subshell":{let p=await Rg(o.args,e,r),h=cot(o.subshell,e,u);A=Vce(h,p,e,u)}break;case"group":{let p=await Rg(o.args,e,r),h=uot(o.group,e,u);A=Vce(h,p,e,u)}break;case"envs":{let p=await Yce(o.envs,e,r);u.environment={...u.environment,...p},A=Z1(["true"],e,u)}break}if(typeof A>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=db(A,{stdin:new Zl(u.stdin),stdout:new Zl(u.stdout),stderr:new Zl(u.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(A,1);break;case"|&":n=n.pipeTo(A,3);break}}o.then?(a=o.then.type,o=o.then.chain):o=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function Aot(t,e,r,{background:o=!1}={}){function a(n){let u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[n%u.length];return Jce.default.hex(A)}if(o){let n=r.nextBackgroundJobIndex++,u=a(n),A=`[${n}]`,p=u(A),{stdout:h,stderr:E}=Gce(r,{prefix:p});return r.backgroundJobs.push(Kce(t,e,yb(r,{stdout:h,stderr:E})).catch(w=>E.write(`${w.message} +`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${u(mm(t))}' has ended +`)})),0}return await Kce(t,e,r)}async function fot(t,e,r,{background:o=!1}={}){let a,n=A=>{a=A,r.variables["?"]=String(A)},u=async A=>{try{return await Aot(A.chain,e,r,{background:o&&typeof A.then>"u"})}catch(p){if(!(p instanceof fl))throw p;return r.stderr.write(`${p.message} +`),1}};for(n(await u(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await u(t.then.line));break;case"||":a!==0&&n(await u(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function Eb(t,e,r){let o=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:u}of t){if(a=await fot(n,e,r,{background:u==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=o,a}function $ce(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=>$1(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>$1(e));case"arithmetic":return JU(t.arithmetic);case"shell":return zU(t.shell);default:return!1}}function $1(t){switch(t.type){case"redirection":return t.args.some(e=>$1(e));case"argument":return t.segments.some(e=>$ce(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function JU(t){switch(t.type){case"variable":return $ce(t);case"number":return!1;default:return JU(t.left)||JU(t.right)}}function zU(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let o;switch(r.type){case"subshell":o=zU(r.subshell);break;case"command":o=r.envs.some(a=>a.args.some(n=>$1(n)))||r.args.some(a=>$1(a));break}if(o)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function ky(t,e=[],{baseFs:r=new _n,builtins:o={},cwd:a=Ae.toPortablePath(process.cwd()),env:n=process.env,stdin:u=process.stdin,stdout:A=process.stdout,stderr:p=process.stderr,variables:h={},glob:E=gb}={}){let w={};for(let[C,T]of Object.entries(n))typeof T<"u"&&(w[C]=T);let D=new Map(oot);for(let[C,T]of Object.entries(o))D.set(C,T);u===null&&(u=new pl.PassThrough,u.end());let b=uS(t,E);if(!zU(b)&&b.length>0&&e.length>0){let{command:C}=b[b.length-1];for(;C.then;)C=C.then.line;let T=C.chain;for(;T.then;)T=T.then.chain;T.type==="command"&&(T.args=T.args.concat(e.map(N=>({type:"argument",segments:[{type:"text",text:N}]}))))}return await Eb(b,{args:e,baseFs:r,builtins:D,initialStdin:u,initialStdout:A,initialStderr:p,glob:E},{cwd:a,environment:w,exitCode:null,procedures:{},stdin:u,stdout:A,stderr:p,variables:Object.assign({},h,{"?":0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var Jce,zce,pl,Xce,oot,lot,z1=It(()=>{St();Ol();Jce=et(sN()),zce=ve("os"),pl=ve("stream"),Xce=ve("timers/promises");Rce();Tce();Mce();KU();KU();oot=new Map([["cd",async([t=(0,zce.homedir)(),...e],r,o)=>{let a=V.resolve(o.cwd,Ae.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(u=>{throw u.code==="ENOENT"?new fl(`cd: no such file or directory: ${t}`):u})).isDirectory())throw new fl(`cd: not a directory: ${t}`);return o.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${Ae.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,o)=>o.exitCode=parseInt(t??o.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} +`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new fl("sleep: missing operand");let o=Number(t);if(Number.isNaN(o))throw new fl(`sleep: invalid time interval '${t}'`);return await(0,Xce.setTimeout)(1e3*o,0)}],["unset",async(t,e,r)=>{for(let o of t)delete r.environment[o],delete r.variables[o];return 0}],["__ysh_run_procedure",async(t,e,r)=>{let o=r.procedures[t[0]];return await db(o,{stdin:new Zl(r.stdin),stdout:new Zl(r.stdout),stderr:new Zl(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let o=r.stdin,a=r.stdout,n=r.stderr,u=[],A=[],p=[],h=0;for(;t[h]!=="--";){let w=t[h++],{type:D,fd:b}=JSON.parse(w),C=J=>{switch(b){case null:case 0:u.push(J);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},T=J=>{switch(b){case null:case 1:A.push(J);break;case 2:p.push(J);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},N=Number(t[h++]),U=h+N;for(let J=h;Je.baseFs.createReadStream(V.resolve(r.cwd,Ae.toPortablePath(t[J]))));break;case"<<<":C(()=>{let te=new pl.PassThrough;return process.nextTick(()=>{te.write(`${t[J]} +`),te.end()}),te});break;case"<&":C(()=>Wce(Number(t[J]),1,r));break;case">":case">>":{let te=V.resolve(r.cwd,Ae.toPortablePath(t[J]));T(te==="/dev/null"?new pl.Writable({autoDestroy:!0,emitClose:!0,write(le,ce,ue){setImmediate(ue)}}):e.baseFs.createWriteStream(te,D===">>"?{flags:"a"}:void 0))}break;case">&":T(Wce(Number(t[J]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${D}"`)}}if(u.length>0){let w=new pl.PassThrough;o=w;let D=b=>{if(b===u.length)w.end();else{let C=u[b]();C.pipe(w,{end:!1}),C.on("end",()=>{D(b+1)})}};D(0)}if(A.length>0){let w=new pl.PassThrough;a=w;for(let D of A)w.pipe(D)}if(p.length>0){let w=new pl.PassThrough;n=w;for(let D of p)w.pipe(D)}let E=await db(Z1(t.slice(h+1),e,r),{stdin:new Zl(o),stdout:new Zl(a),stderr:new Zl(n)}).run();return await Promise.all(A.map(w=>new Promise((D,b)=>{w.on("error",C=>{b(C)}),w.on("close",()=>{D()}),w.end()}))),await Promise.all(p.map(w=>new Promise((D,b)=>{w.on("error",C=>{b(C)}),w.on("close",()=>{D()}),w.end()}))),E}]]);lot={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var Cb=_((MMt,eue)=>{function pot(t,e){for(var r=-1,o=t==null?0:t.length,a=Array(o);++r{var tue=dg(),hot=Cb(),got=jl(),dot=fy(),mot=1/0,rue=tue?tue.prototype:void 0,nue=rue?rue.toString:void 0;function iue(t){if(typeof t=="string")return t;if(got(t))return hot(t,iue)+"";if(dot(t))return nue?nue.call(t):"";var e=t+"";return e=="0"&&1/t==-mot?"-0":e}sue.exports=iue});var t2=_((_Mt,aue)=>{var yot=oue();function Eot(t){return t==null?"":yot(t)}aue.exports=Eot});var XU=_((HMt,lue)=>{function Cot(t,e,r){var o=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var n=Array(a);++o{var Iot=XU();function wot(t,e,r){var o=t.length;return r=r===void 0?o:r,!e&&r>=o?t:Iot(t,e,r)}cue.exports=wot});var ZU=_((jMt,Aue)=>{var Bot="\\ud800-\\udfff",vot="\\u0300-\\u036f",Dot="\\ufe20-\\ufe2f",Sot="\\u20d0-\\u20ff",Pot=vot+Dot+Sot,xot="\\ufe0e\\ufe0f",bot="\\u200d",kot=RegExp("["+bot+Bot+Pot+xot+"]");function Qot(t){return kot.test(t)}Aue.exports=Qot});var pue=_((GMt,fue)=>{function Fot(t){return t.split("")}fue.exports=Fot});var Iue=_((WMt,Cue)=>{var hue="\\ud800-\\udfff",Rot="\\u0300-\\u036f",Tot="\\ufe20-\\ufe2f",Lot="\\u20d0-\\u20ff",Not=Rot+Tot+Lot,Oot="\\ufe0e\\ufe0f",Mot="["+hue+"]",$U="["+Not+"]",e3="\\ud83c[\\udffb-\\udfff]",Uot="(?:"+$U+"|"+e3+")",gue="[^"+hue+"]",due="(?:\\ud83c[\\udde6-\\uddff]){2}",mue="[\\ud800-\\udbff][\\udc00-\\udfff]",_ot="\\u200d",yue=Uot+"?",Eue="["+Oot+"]?",Hot="(?:"+_ot+"(?:"+[gue,due,mue].join("|")+")"+Eue+yue+")*",qot=Eue+yue+Hot,jot="(?:"+[gue+$U+"?",$U,due,mue,Mot].join("|")+")",Got=RegExp(e3+"(?="+e3+")|"+jot+qot,"g");function Wot(t){return t.match(Got)||[]}Cue.exports=Wot});var Bue=_((YMt,wue)=>{var Yot=pue(),Vot=ZU(),Kot=Iue();function Jot(t){return Vot(t)?Kot(t):Yot(t)}wue.exports=Jot});var Due=_((VMt,vue)=>{var zot=uue(),Xot=ZU(),Zot=Bue(),$ot=t2();function eat(t){return function(e){e=$ot(e);var r=Xot(e)?Zot(e):void 0,o=r?r[0]:e.charAt(0),a=r?zot(r,1).join(""):e.slice(1);return o[t]()+a}}vue.exports=eat});var Pue=_((KMt,Sue)=>{var tat=Due(),rat=tat("toUpperCase");Sue.exports=rat});var t3=_((JMt,xue)=>{var nat=t2(),iat=Pue();function sat(t){return iat(nat(t).toLowerCase())}xue.exports=sat});var bue=_((zMt,Ib)=>{function oat(){var t=0,e=1,r=2,o=3,a=4,n=5,u=6,A=7,p=8,h=9,E=10,w=11,D=12,b=13,C=14,T=15,N=16,U=17,J=0,te=1,le=2,ce=3,ue=4;function Ie(g,me){return 55296<=g.charCodeAt(me)&&g.charCodeAt(me)<=56319&&56320<=g.charCodeAt(me+1)&&g.charCodeAt(me+1)<=57343}function he(g,me){me===void 0&&(me=0);var Ce=g.charCodeAt(me);if(55296<=Ce&&Ce<=56319&&me=1){var fe=g.charCodeAt(me-1),ie=Ce;return 55296<=fe&&fe<=56319?(fe-55296)*1024+(ie-56320)+65536:ie}return Ce}function De(g,me,Ce){var fe=[g].concat(me).concat([Ce]),ie=fe[fe.length-2],Z=Ce,Se=fe.lastIndexOf(C);if(Se>1&&fe.slice(1,Se).every(function(q){return q==o})&&[o,b,U].indexOf(g)==-1)return le;var Re=fe.lastIndexOf(a);if(Re>0&&fe.slice(1,Re).every(function(q){return q==a})&&[D,a].indexOf(ie)==-1)return fe.filter(function(q){return q==a}).length%2==1?ce:ue;if(ie==t&&Z==e)return J;if(ie==r||ie==t||ie==e)return Z==C&&me.every(function(q){return q==o})?le:te;if(Z==r||Z==t||Z==e)return te;if(ie==u&&(Z==u||Z==A||Z==h||Z==E))return J;if((ie==h||ie==A)&&(Z==A||Z==p))return J;if((ie==E||ie==p)&&Z==p)return J;if(Z==o||Z==T)return J;if(Z==n)return J;if(ie==D)return J;var ht=fe.indexOf(o)!=-1?fe.lastIndexOf(o)-1:fe.length-2;return[b,U].indexOf(fe[ht])!=-1&&fe.slice(ht+1,-1).every(function(q){return q==o})&&Z==C||ie==T&&[N,U].indexOf(Z)!=-1?J:me.indexOf(a)!=-1?le:ie==a&&Z==a?J:te}this.nextBreak=function(g,me){if(me===void 0&&(me=0),me<0)return 0;if(me>=g.length-1)return g.length;for(var Ce=Ee(he(g,me)),fe=[],ie=me+1;ie{var aat=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,wb;function lat(){if(wb)return wb;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return wb=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=bue(),e=new t;return wb=r=>e.splitGraphemes(r)}}kue.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let o=r-e,a="",n=0,u=0;for(;t.length>0;){let A=t.match(aat)||[t,t,void 0],p=lat()(A[1]),h=Math.min(e-n,p.length);p=p.slice(h);let E=Math.min(o-u,p.length);a+=p.slice(0,E).join(""),n+=h,u+=E,typeof A[2]<"u"&&(a+=A[2]),t=t.slice(A[0].length)}return a}});var nn,r2=It(()=>{nn=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.7.0"});function Oue(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Ju(t===null?0:t);return!r&&t===null?Ut(e,a,"grey"):a}function r3(t,{configuration:e,json:r}){let o=Oue(t,{configuration:e,json:r});if(!o||t===null||t===0)return o;let a=vr[t],n=`https://yarnpkg.com/advanced/error-codes#${o}---${a}`.toLowerCase();return ty(e,o,n)}async function Qy({configuration:t,stdout:e,forceError:r},o){let a=await Lt.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let u=!1,A=!1;for(let p of o)typeof p.option<"u"&&(p.error||r?(A=!0,n.reportError(50,p.message)):(u=!0,n.reportWarning(50,p.message)),p.callback?.());u&&!A&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Lue,Bb,cat,Fue,Rue,hh,Nue,Tue,uat,Aat,vb,fat,Lt,n2=It(()=>{Lue=et(Que()),Bb=et(sg());GS();Kl();r2();Wl();cat="\xB7",Fue=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Rue=80,hh=Bb.default.GITHUB_ACTIONS?{start:t=>`::group::${t} +`,end:t=>`::endgroup:: +`}:Bb.default.TRAVIS?{start:t=>`travis_fold:start:${t} +`,end:t=>`travis_fold:end:${t} +`}:Bb.default.GITLAB?{start:t=>`section_start:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}[collapsed=true]\r\x1B[0K${t} +`,end:t=>`section_end:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r\x1B[0K`}:null,Nue=hh!==null,Tue=new Date,uat=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,Aat=t=>t,vb=Aat({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}}),fat=uat&&Object.keys(vb).find(t=>{let e=vb[t];return!(e.date&&(e.date[0]!==Tue.getDate()||e.date[1]!==Tue.getMonth()+1))})||"default";Lt=class extends Ws{constructor({configuration:r,stdout:o,json:a=!1,forceSectionAlignment:n=!1,includeNames:u=!0,includePrefix:A=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:E=h,includeWarnings:w=h}){super();this.uncommitted=new Set;this.warningCount=0;this.errorCount=0;this.timerFooter=[];this.startTime=Date.now();this.indent=0;this.level=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;if(g1(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=u,this.includePrefix=A,this.includeFooter=p,this.includeInfos=E,this.includeWarnings=w,this.json=a,this.stdout=o,r.get("enableProgressBars")&&!a&&o.isTTY&&o.columns>22){let D=r.get("progressBarStyle")||fat;if(!Object.hasOwn(vb,D))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=vb[D];let b=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*b/80)}}static async start(r,o){let a=new this(r),n=process.emitWarning;process.emitWarning=(u,A)=>{if(typeof u!="string"){let h=u;u=h.message,A=A??h.name}let p=typeof A<"u"?`${A}: ${u}`:u;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,Cg(r.configuration,`Yarn ${nn}`,2));try{await o(a)}catch(u){a.reportExceptionOnce(u)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let o=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,o-12-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}async startSectionPromise({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}startTimerImpl(r,o,a){return{cb:typeof o=="function"?o:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,hh!==null&&!this.json&&this.includeInfos&&this.stdout.write(hh.start(r))},reportFooter:A=>{if(this.indent-=1,hh!==null&&!this.json&&this.includeInfos){this.stdout.write(hh.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&A>200?this.reportInfo(null,`\u2514 Completed in ${Ut(this.configuration,A,Ct.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof o=="function"?{}:o).skipIfEmpty}}startTimerSync(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionSync(u,n)}async startTimerPromise(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionPromise(u,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,o){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",u=`${this.formatPrefix(n,"blueBright")}${o}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(u)}reportWarning(r,o){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"warning",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${o}`)}reportError(r,o){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,o)),this.reportErrorImpl(r,o)}reportErrorImpl(r,o){this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"error",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"redBright")}${o}`,{truncate:!1})}reportFold(r,o){if(!hh)return;let a=`${hh.start(r)}${o}${hh.end(r)}`;this.timerFooter.push(()=>this.stdout.write(a))}reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(r.hasProgress&&r.hasTitle)throw new Error("Unimplemented: Progress bars can't have both progress and titles.");let o=!1,a=Promise.resolve().then(async()=>{let u={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:u,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:A,title:p}of r)o||u.progress===A&&u.title===p||(u.progress=A,u.title=p,this.refreshProgress());n()}),n=()=>{o||(o=!0,this.progress.delete(r),this.refreshProgress({delta:1}))};return{...a,stop:n}}reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>0?r="Failed with errors":this.warningCount>0?r="Done with warnings":r="Done";let o=Ut(this.configuration,Date.now()-this.startTime,Ct.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${o}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:o}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:o})} +`),this.writeProgress()}writeLines(r,{truncate:o}={}){this.clearProgress({delta:r.length});for(let a of r)this.stdout.write(`${this.truncate(a,{truncate:o})} +`);this.writeProgress()}commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let o of r)o.committed=!0,o.action()}clearProgress({delta:r=0,clear:o=!1}){this.progressStyle!==null&&this.progress.size+r>0&&(this.stdout.write(`\x1B[${this.progress.size+r}A`),(r>0||o)&&this.stdout.write("\x1B[0J"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let r=Date.now();r-this.progressTime>Rue&&(this.progressFrame=(this.progressFrame+1)%Fue.length,this.progressTime=r);let o=Fue[this.progressFrame];for(let a of this.progress.values()){let n="";if(typeof a.lastScaledSize<"u"){let h=this.progressStyle.chars[0].repeat(a.lastScaledSize),E=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-a.lastScaledSize);n=` ${h}${E}`}let u=this.formatName(null),A=u?`${u}: `:"",p=a.definition.title?` ${a.definition.title}`:"";this.stdout.write(`${Ut(this.configuration,"\u27A4","blueBright")} ${A}${o}${n}${p} +`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},Rue)}refreshProgress({delta:r=0,force:o=!1}={}){let a=!1,n=!1;if(o||this.progress.size===0)a=!0;else for(let u of this.progress.values()){let A=typeof u.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*u.definition.progress):void 0,p=u.lastScaledSize;u.lastScaledSize=A;let h=u.lastTitle;if(u.lastTitle=u.definition.title,A!==p||(n=h!==u.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:o}={}){return this.progressStyle===null&&(o=!1),typeof o>"u"&&(o=this.configuration.get("preferTruncatedLines")),o&&(r=(0,Lue.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?Oue(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,o){return this.includePrefix?`${Ut(this.configuration,"\u27A4",o)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?r3(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${cat} `}}});var hn={};Vt(hn,{PackageManager:()=>_ue,detectPackageManager:()=>Hue,executePackageAccessibleBinary:()=>Yue,executePackageScript:()=>Db,executePackageShellcode:()=>n3,executeWorkspaceAccessibleBinary:()=>Eat,executeWorkspaceLifecycleScript:()=>Gue,executeWorkspaceScript:()=>jue,getPackageAccessibleBinaries:()=>Sb,getWorkspaceAccessibleBinaries:()=>Wue,hasPackageScript:()=>dat,hasWorkspaceScript:()=>i3,isNodeScript:()=>s3,makeScriptEnv:()=>i2,maybeExecuteWorkspaceLifecycleScript:()=>yat,prepareExternalProject:()=>gat});async function gh(t,e,r,o=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${o.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await ae.writeFilePromise(V.format({dir:t,name:e,ext:".cmd"}),a)}await ae.writeFilePromise(V.join(t,e),`#!/bin/sh +exec "${r}" ${o.map(a=>`'${a.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" +`,{mode:493})}async function Hue(t){let e=await _t.tryFind(t);if(e?.packageManager){let o=dx(e.packageManager);if(o?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=o.reference.split(".");switch(o.name){case"yarn":return{packageManagerField:!0,packageManager:Number(n)===1?"Yarn Classic":"Yarn",reason:a};case"npm":return{packageManagerField:!0,packageManager:"npm",reason:a};case"pnpm":return{packageManagerField:!0,packageManager:"pnpm",reason:a}}}}let r;try{r=await ae.readFilePromise(V.join(t,mr.lockfile),"utf8")}catch{}return r!==void 0?r.match(/^__metadata:$/m)?{packageManager:"Yarn",reason:'"__metadata" key found in yarn.lock'}:{packageManager:"Yarn Classic",reason:'"__metadata" key not found in yarn.lock, must be a Yarn classic lockfile'}:ae.existsSync(V.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:ae.existsSync(V.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function i2({project:t,locator:e,binFolder:r,ignoreCorepack:o,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let u={};for(let[E,w]of Object.entries(n))typeof w<"u"&&(u[E.toLowerCase()!=="path"?E:"PATH"]=w);let A=Ae.fromPortablePath(r);u.BERRY_BIN_FOLDER=Ae.fromPortablePath(A);let p=process.env.COREPACK_ROOT&&!o?Ae.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([gh(r,"node",process.execPath),...nn!==null?[gh(r,"run",process.execPath,[p,"run"]),gh(r,"yarn",process.execPath,[p]),gh(r,"yarnpkg",process.execPath,[p]),gh(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(u.INIT_CWD=Ae.fromPortablePath(t.configuration.startingCwd),u.PROJECT_CWD=Ae.fromPortablePath(t.cwd)),u.PATH=u.PATH?`${A}${Ae.delimiter}${u.PATH}`:`${A}`,u.npm_execpath=`${A}${Ae.sep}yarn`,u.npm_node_execpath=`${A}${Ae.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let E=t.tryWorkspaceByLocator(e),w=E?E.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";u.npm_package_name=rn(e),u.npm_package_version=w;let D;if(E)D=E.cwd;else{let b=t.storedPackages.get(e.locatorHash);if(!b)throw new Error(`Package for ${jr(t.configuration,e)} not found in the project`);let C=t.configuration.getLinkers(),T={project:t,report:new Lt({stdout:new dh.PassThrough,configuration:t.configuration})},N=C.find(U=>U.supportsPackage(b,T));if(!N)throw new Error(`The package ${jr(t.configuration,b)} isn't supported by any of the available linkers`);D=await N.findPackageLocation(b,T)}u.npm_package_json=Ae.fromPortablePath(V.join(D,mr.manifest))}let h=nn!==null?`yarn/${nn}`:`yarn/${vf("@yarnpkg/core").version}-core`;return u.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(u.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(E=>E.setupScriptEnvironment,t,u,async(E,w,D)=>await gh(r,E,w,D)),u}async function gat(t,e,{configuration:r,report:o,workspace:a=null,locator:n=null}){await hat(async()=>{await ae.mktempPromise(async u=>{let A=V.join(u,"pack.log"),p=null,{stdout:h,stderr:E}=r.getSubprocessStreams(A,{prefix:Ae.fromPortablePath(t),report:o}),w=n&&Jc(n)?I1(n):n,D=w?Qa(w):"an external project";h.write(`Packing ${D} from sources +`);let b=await Hue(t),C;b!==null?(h.write(`Using ${b.packageManager} for bootstrap. Reason: ${b.reason} + +`),C=b.packageManager):(h.write(`No package manager configuration detected; defaulting to Yarn + +`),C="Yarn");let T=C==="Yarn"&&!b?.packageManagerField;await ae.mktempPromise(async N=>{let U=await i2({binFolder:N,ignoreCorepack:T,baseEnv:{...process.env,COREPACK_ENABLE_AUTO_PIN:"0"}}),te=new Map([["Yarn Classic",async()=>{let ce=a!==null?["workspace",a]:[],ue=V.join(t,mr.manifest),Ie=await ae.readFilePromise(ue),he=await Xc(process.execPath,[process.argv[1],"set","version","classic","--only-if-needed","--yarn-path"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(he.code!==0)return he.code;await ae.writeFilePromise(ue,Ie),await ae.appendFilePromise(V.join(t,".npmignore"),`/.yarn +`),h.write(` +`),delete U.NODE_ENV;let De=await Xc("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(De.code!==0)return De.code;h.write(` +`);let Ee=await Xc("yarn",[...ce,"pack","--filename",Ae.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return Ee.code!==0?Ee.code:0}],["Yarn",async()=>{let ce=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let ue=V.join(t,mr.lockfile);await ae.existsPromise(ue)||await ae.writeFilePromise(ue,"");let Ie=await Xc("yarn",[...ce,"pack","--install-if-needed","--filename",Ae.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return Ie.code!==0?Ie.code:0}],["npm",async()=>{if(a!==null){let me=new dh.PassThrough,Ce=Xm(me);me.pipe(h,{end:!1});let fe=await Xc("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:me,stderr:E,end:0});if(me.end(),fe.code!==0)return h.end(),E.end(),fe.code;let ie=(await Ce).toString().trim();if(!nA(ie,">=7.x")){let Z=rA(null,"npm"),Se=kn(Z,ie),Re=kn(Z,">=7.x");throw new Error(`Workspaces aren't supported by ${Jn(r,Se)}; please upgrade to ${Jn(r,Re)} (npm has been detected as the primary package manager for ${Ut(r,t,Ct.PATH)})`)}}let ce=a!==null?["--workspace",a]:[];delete U.npm_config_user_agent,delete U.npm_config_production,delete U.NPM_CONFIG_PRODUCTION,delete U.NODE_ENV;let ue=await Xc("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(ue.code!==0)return ue.code;let Ie=new dh.PassThrough,he=Xm(Ie);Ie.pipe(h);let De=await Xc("npm",["pack","--silent",...ce],{cwd:t,env:U,stdin:p,stdout:Ie,stderr:E});if(De.code!==0)return De.code;let Ee=(await he).toString().trim().replace(/^.*\n/s,""),g=V.resolve(t,Ae.toPortablePath(Ee));return await ae.renamePromise(g,e),0}]]).get(C);if(typeof te>"u")throw new Error("Assertion failed: Unsupported workflow");let le=await te();if(!(le===0||typeof le>"u"))throw ae.detachTemp(u),new Jt(58,`Packing the package failed (exit code ${le}, logs can be found here: ${Ut(r,A,Ct.PATH)})`)})})})}async function dat(t,e,{project:r}){let o=r.tryWorkspaceByLocator(t);if(o!==null)return i3(o,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r.configuration,t)} not found in the project`);return await iA.openPromise(async n=>{let u=r.configuration,A=r.configuration.getLinkers(),p={project:r,report:new Lt({stdout:new dh.PassThrough,configuration:u})},h=A.find(b=>b.supportsPackage(a,p));if(!h)throw new Error(`The package ${jr(r.configuration,a)} isn't supported by any of the available linkers`);let E=await h.findPackageLocation(a,p),w=new En(E,{baseFs:n});return(await _t.find(Bt.dot,{baseFs:w})).scripts.has(e)})}async function Db(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await ae.mktempPromise(async p=>{let{manifest:h,env:E,cwd:w}=await que(t,{project:a,binFolder:p,cwd:o,lifecycleScript:e}),D=h.scripts.get(e);if(typeof D>"u")return 1;let b=async()=>await ky(D,r,{cwd:w,env:E,stdin:n,stdout:u,stderr:A});return await(await a.configuration.reduceHook(T=>T.wrapScriptExecution,b,a,t,e,{script:D,args:r,cwd:w,env:E,stdin:n,stdout:u,stderr:A}))()})}async function n3(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await ae.mktempPromise(async p=>{let{env:h,cwd:E}=await que(t,{project:a,binFolder:p,cwd:o});return await ky(e,r,{cwd:E,env:h,stdin:n,stdout:u,stderr:A})})}async function mat(t,{binFolder:e,cwd:r,lifecycleScript:o}){let a=await i2({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:o});return await o3(e,await Wue(t)),typeof r>"u"&&(r=V.dirname(await ae.realpathPromise(V.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function que(t,{project:e,binFolder:r,cwd:o,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return mat(n,{binFolder:r,cwd:o,lifecycleScript:a});let u=e.storedPackages.get(t.locatorHash);if(!u)throw new Error(`Package for ${jr(e.configuration,t)} not found in the project`);return await iA.openPromise(async A=>{let p=e.configuration,h=e.configuration.getLinkers(),E={project:e,report:new Lt({stdout:new dh.PassThrough,configuration:p})},w=h.find(N=>N.supportsPackage(u,E));if(!w)throw new Error(`The package ${jr(e.configuration,u)} isn't supported by any of the available linkers`);let D=await i2({project:e,locator:t,binFolder:r,lifecycleScript:a});await o3(r,await Sb(t,{project:e}));let b=await w.findPackageLocation(u,E),C=new En(b,{baseFs:A}),T=await _t.find(Bt.dot,{baseFs:C});return typeof o>"u"&&(o=b),{manifest:T,binFolder:r,env:D,cwd:o}})}async function jue(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u}){return await Db(t.anchoredLocator,e,r,{cwd:o,project:t.project,stdin:a,stdout:n,stderr:u})}function i3(t,e){return t.manifest.scripts.has(e)}async function Gue(t,e,{cwd:r,report:o}){let{configuration:a}=t.project,n=null;await ae.mktempPromise(async u=>{let A=V.join(u,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${Ae.fromPortablePath(t.cwd)}") +`,{stdout:h,stderr:E}=a.getSubprocessStreams(A,{report:o,prefix:jr(a,t.anchoredLocator),header:p});o.reportInfo(36,`Calling the "${e}" lifecycle script`);let w=await jue(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:E});if(h.end(),E.end(),w!==0)throw ae.detachTemp(u),new Jt(36,`${(0,Mue.default)(e)} script failed (exit code ${Ut(a,w,Ct.NUMBER)}, logs can be found here: ${Ut(a,A,Ct.PATH)}); run ${Ut(a,`yarn ${e}`,Ct.CODE)} to investigate`)})}async function yat(t,e,r){i3(t,e)&&await Gue(t,e,r)}function s3(t){let e=V.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),o;try{o=ae.openSync(t,"r")}catch{return!0}try{ae.readSync(o,r,0,r.length,0)}finally{ae.closeSync(o)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function Sb(t,{project:e}){let r=e.configuration,o=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r,t)} not found in the project`);let n=new dh.Writable,u=r.getLinkers(),A={project:e,report:new Lt({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let E of a.dependencies.values()){let w=e.storedResolutions.get(E.descriptorHash);if(!w)throw new Error(`Assertion failed: The resolution (${Jn(r,E)}) should have been registered`);p.add(w)}let h=await Promise.all(Array.from(p,async E=>{let w=e.storedPackages.get(E);if(!w)throw new Error(`Assertion failed: The package (${E}) should have been registered`);if(w.bin.size===0)return ul.skip;let D=u.find(C=>C.supportsPackage(w,A));if(!D)return ul.skip;let b=null;try{b=await D.findPackageLocation(w,A)}catch(C){if(C.code==="LOCATOR_NOT_INSTALLED")return ul.skip;throw C}return{dependency:w,packageLocation:b}}));for(let E of h){if(E===ul.skip)continue;let{dependency:w,packageLocation:D}=E;for(let[b,C]of w.bin){let T=V.resolve(D,C);o.set(b,[w,Ae.fromPortablePath(T),s3(T)])}}return o}async function Wue(t){return await Sb(t.anchoredLocator,{project:t.project})}async function o3(t,e){await Promise.all(Array.from(e,([r,[,o,a]])=>a?gh(t,r,process.execPath,[o]):gh(t,r,o,[])))}async function Yue(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await Sb(t,{project:a});let E=h.get(e);if(!E)throw new Error(`Binary not found (${e}) for ${jr(a.configuration,t)}`);return await ae.mktempPromise(async w=>{let[,D]=E,b=await i2({project:a,locator:t,binFolder:w});await o3(b.BERRY_BIN_FOLDER,h);let C=s3(Ae.toPortablePath(D))?Xc(process.execPath,[...p,D,...r],{cwd:o,env:b,stdin:n,stdout:u,stderr:A}):Xc(D,r,{cwd:o,env:b,stdin:n,stdout:u,stderr:A}),T;try{T=await C}finally{await ae.removePromise(b.BERRY_BIN_FOLDER)}return T.code})}async function Eat(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A}){return await Yue(t.anchoredLocator,e,r,{project:t.project,cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A})}var Mue,Uue,dh,_ue,pat,hat,a3=It(()=>{St();St();sA();z1();Mue=et(t3()),Uue=et(lg()),dh=ve("stream");Ay();Kl();n2();r2();nb();Wl();Gl();bf();Io();_ue=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))(_ue||{});pat=2,hat=(0,Uue.default)(pat)});var Fy=_((y4t,Kue)=>{"use strict";var Vue=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"]]);Kue.exports=t=>t?Object.keys(t).map(e=>[Vue.has(e)?Vue.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var Ty=_((E4t,nAe)=>{"use strict";var Jue=typeof process=="object"&&process?process:{stdout:null,stderr:null},Cat=ve("events"),zue=ve("stream"),Xue=ve("string_decoder").StringDecoder,Nf=Symbol("EOF"),Of=Symbol("maybeEmitEnd"),mh=Symbol("emittedEnd"),Pb=Symbol("emittingEnd"),s2=Symbol("emittedError"),xb=Symbol("closed"),Zue=Symbol("read"),bb=Symbol("flush"),$ue=Symbol("flushChunk"),Ra=Symbol("encoding"),Mf=Symbol("decoder"),kb=Symbol("flowing"),o2=Symbol("paused"),Ry=Symbol("resume"),xs=Symbol("bufferLength"),l3=Symbol("bufferPush"),c3=Symbol("bufferShift"),Do=Symbol("objectMode"),So=Symbol("destroyed"),u3=Symbol("emitData"),eAe=Symbol("emitEnd"),A3=Symbol("emitEnd2"),Uf=Symbol("async"),a2=t=>Promise.resolve().then(t),tAe=global._MP_NO_ITERATOR_SYMBOLS_!=="1",Iat=tAe&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),wat=tAe&&Symbol.iterator||Symbol("iterator not implemented"),Bat=t=>t==="end"||t==="finish"||t==="prefinish",vat=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Dat=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),Qb=class{constructor(e,r,o){this.src=e,this.dest=r,this.opts=o,this.ondrain=()=>e[Ry](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},f3=class extends Qb{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,o){super(e,r,o),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};nAe.exports=class rAe extends zue{constructor(e){super(),this[kb]=!1,this[o2]=!1,this.pipes=[],this.buffer=[],this[Do]=e&&e.objectMode||!1,this[Do]?this[Ra]=null:this[Ra]=e&&e.encoding||null,this[Ra]==="buffer"&&(this[Ra]=null),this[Uf]=e&&!!e.async||!1,this[Mf]=this[Ra]?new Xue(this[Ra]):null,this[Nf]=!1,this[mh]=!1,this[Pb]=!1,this[xb]=!1,this[s2]=null,this.writable=!0,this.readable=!0,this[xs]=0,this[So]=!1}get bufferLength(){return this[xs]}get encoding(){return this[Ra]}set encoding(e){if(this[Do])throw new Error("cannot set encoding in objectMode");if(this[Ra]&&e!==this[Ra]&&(this[Mf]&&this[Mf].lastNeed||this[xs]))throw new Error("cannot change encoding");this[Ra]!==e&&(this[Mf]=e?new Xue(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[Mf].write(r)))),this[Ra]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Do]}set objectMode(e){this[Do]=this[Do]||!!e}get async(){return this[Uf]}set async(e){this[Uf]=this[Uf]||!!e}write(e,r,o){if(this[Nf])throw new Error("write after end");if(this[So])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(o=r,r="utf8"),r||(r="utf8");let a=this[Uf]?a2:n=>n();return!this[Do]&&!Buffer.isBuffer(e)&&(Dat(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):vat(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[Do]?(this.flowing&&this[xs]!==0&&this[bb](!0),this.flowing?this.emit("data",e):this[l3](e),this[xs]!==0&&this.emit("readable"),o&&a(o),this.flowing):e.length?(typeof e=="string"&&!(r===this[Ra]&&!this[Mf].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[Ra]&&(e=this[Mf].write(e)),this.flowing&&this[xs]!==0&&this[bb](!0),this.flowing?this.emit("data",e):this[l3](e),this[xs]!==0&&this.emit("readable"),o&&a(o),this.flowing):(this[xs]!==0&&this.emit("readable"),o&&a(o),this.flowing)}read(e){if(this[So])return null;if(this[xs]===0||e===0||e>this[xs])return this[Of](),null;this[Do]&&(e=null),this.buffer.length>1&&!this[Do]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[xs])]);let r=this[Zue](e||null,this.buffer[0]);return this[Of](),r}[Zue](e,r){return e===r.length||e===null?this[c3]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[xs]-=e),this.emit("data",r),!this.buffer.length&&!this[Nf]&&this.emit("drain"),r}end(e,r,o){return typeof e=="function"&&(o=e,e=null),typeof r=="function"&&(o=r,r="utf8"),e&&this.write(e,r),o&&this.once("end",o),this[Nf]=!0,this.writable=!1,(this.flowing||!this[o2])&&this[Of](),this}[Ry](){this[So]||(this[o2]=!1,this[kb]=!0,this.emit("resume"),this.buffer.length?this[bb]():this[Nf]?this[Of]():this.emit("drain"))}resume(){return this[Ry]()}pause(){this[kb]=!1,this[o2]=!0}get destroyed(){return this[So]}get flowing(){return this[kb]}get paused(){return this[o2]}[l3](e){this[Do]?this[xs]+=1:this[xs]+=e.length,this.buffer.push(e)}[c3](){return this.buffer.length&&(this[Do]?this[xs]-=1:this[xs]-=this.buffer[0].length),this.buffer.shift()}[bb](e){do;while(this[$ue](this[c3]()));!e&&!this.buffer.length&&!this[Nf]&&this.emit("drain")}[$ue](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[So])return;let o=this[mh];return r=r||{},e===Jue.stdout||e===Jue.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,o?r.end&&e.end():(this.pipes.push(r.proxyErrors?new f3(this,e,r):new Qb(this,e,r)),this[Uf]?a2(()=>this[Ry]()):this[Ry]()),e}unpipe(e){let r=this.pipes.find(o=>o.dest===e);r&&(this.pipes.splice(this.pipes.indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let o=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[Ry]():e==="readable"&&this[xs]!==0?super.emit("readable"):Bat(e)&&this[mh]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[s2]&&(this[Uf]?a2(()=>r.call(this,this[s2])):r.call(this,this[s2])),o}get emittedEnd(){return this[mh]}[Of](){!this[Pb]&&!this[mh]&&!this[So]&&this.buffer.length===0&&this[Nf]&&(this[Pb]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[xb]&&this.emit("close"),this[Pb]=!1)}emit(e,r,...o){if(e!=="error"&&e!=="close"&&e!==So&&this[So])return;if(e==="data")return r?this[Uf]?a2(()=>this[u3](r)):this[u3](r):!1;if(e==="end")return this[eAe]();if(e==="close"){if(this[xb]=!0,!this[mh]&&!this[So])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[s2]=r;let n=super.emit("error",r);return this[Of](),n}else if(e==="resume"){let n=super.emit("resume");return this[Of](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...o);return this[Of](),a}[u3](e){for(let o of this.pipes)o.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[Of](),r}[eAe](){this[mh]||(this[mh]=!0,this.readable=!1,this[Uf]?a2(()=>this[A3]()):this[A3]())}[A3](){if(this[Mf]){let r=this[Mf].end();if(r){for(let o of this.pipes)o.dest.write(r);super.emit("data",r)}}for(let r of this.pipes)r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}collect(){let e=[];this[Do]||(e.dataLength=0);let r=this.promise();return this.on("data",o=>{e.push(o),this[Do]||(e.dataLength+=o.length)}),r.then(()=>e)}concat(){return this[Do]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Do]?Promise.reject(new Error("cannot concat in objectMode")):this[Ra]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(So,()=>r(new Error("stream destroyed"))),this.on("error",o=>r(o)),this.on("end",()=>e())})}[Iat](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[Nf])return Promise.resolve({done:!0});let o=null,a=null,n=h=>{this.removeListener("data",u),this.removeListener("end",A),a(h)},u=h=>{this.removeListener("error",n),this.removeListener("end",A),this.pause(),o({value:h,done:!!this[Nf]})},A=()=>{this.removeListener("error",n),this.removeListener("data",u),o({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,E)=>{a=E,o=h,this.once(So,p),this.once("error",n),this.once("end",A),this.once("data",u)})}}}[wat](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[So]?(e?this.emit("error",e):this.emit(So),this):(this[So]=!0,this.buffer.length=0,this[xs]=0,typeof this.close=="function"&&!this[xb]&&this.close(),e?this.emit("error",e):this.emit(So),this)}static isStream(e){return!!e&&(e instanceof rAe||e instanceof zue||e instanceof Cat&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var sAe=_((C4t,iAe)=>{var Sat=ve("zlib").constants||{ZLIB_VERNUM:4736};iAe.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:1/0,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},Sat))});var x3=_(hl=>{"use strict";var m3=ve("assert"),yh=ve("buffer").Buffer,lAe=ve("zlib"),Tg=hl.constants=sAe(),Pat=Ty(),oAe=yh.concat,Lg=Symbol("_superWrite"),Ny=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"}},xat=Symbol("opts"),l2=Symbol("flushFlag"),aAe=Symbol("finishFlushFlag"),P3=Symbol("fullFlushFlag"),ui=Symbol("handle"),Fb=Symbol("onError"),Ly=Symbol("sawError"),p3=Symbol("level"),h3=Symbol("strategy"),g3=Symbol("ended"),I4t=Symbol("_defaultFullFlush"),Rb=class extends Pat{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[Ly]=!1,this[g3]=!1,this[xat]=e,this[l2]=e.flush,this[aAe]=e.finishFlush;try{this[ui]=new lAe[r](e)}catch(o){throw new Ny(o)}this[Fb]=o=>{this[Ly]||(this[Ly]=!0,this.close(),this.emit("error",o))},this[ui].on("error",o=>this[Fb](new Ny(o))),this.once("end",()=>this.close)}close(){this[ui]&&(this[ui].close(),this[ui]=null,this.emit("close"))}reset(){if(!this[Ly])return m3(this[ui],"zlib binding closed"),this[ui].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[P3]),this.write(Object.assign(yh.alloc(0),{[l2]:e})))}end(e,r,o){return e&&this.write(e,r),this.flush(this[aAe]),this[g3]=!0,super.end(null,null,o)}get ended(){return this[g3]}write(e,r,o){if(typeof r=="function"&&(o=r,r="utf8"),typeof e=="string"&&(e=yh.from(e,r)),this[Ly])return;m3(this[ui],"zlib binding closed");let a=this[ui]._handle,n=a.close;a.close=()=>{};let u=this[ui].close;this[ui].close=()=>{},yh.concat=h=>h;let A;try{let h=typeof e[l2]=="number"?e[l2]:this[l2];A=this[ui]._processChunk(e,h),yh.concat=oAe}catch(h){yh.concat=oAe,this[Fb](new Ny(h))}finally{this[ui]&&(this[ui]._handle=a,a.close=n,this[ui].close=u,this[ui].removeAllListeners("error"))}this[ui]&&this[ui].on("error",h=>this[Fb](new Ny(h)));let p;if(A)if(Array.isArray(A)&&A.length>0){p=this[Lg](yh.from(A[0]));for(let h=1;h{this.flush(a),n()};try{this[ui].params(e,r)}finally{this[ui].flush=o}this[ui]&&(this[p3]=e,this[h3]=r)}}}},y3=class extends _f{constructor(e){super(e,"Deflate")}},E3=class extends _f{constructor(e){super(e,"Inflate")}},d3=Symbol("_portable"),C3=class extends _f{constructor(e){super(e,"Gzip"),this[d3]=e&&!!e.portable}[Lg](e){return this[d3]?(this[d3]=!1,e[9]=255,super[Lg](e)):super[Lg](e)}},I3=class extends _f{constructor(e){super(e,"Gunzip")}},w3=class extends _f{constructor(e){super(e,"DeflateRaw")}},B3=class extends _f{constructor(e){super(e,"InflateRaw")}},v3=class extends _f{constructor(e){super(e,"Unzip")}},Tb=class extends Rb{constructor(e,r){e=e||{},e.flush=e.flush||Tg.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Tg.BROTLI_OPERATION_FINISH,super(e,r),this[P3]=Tg.BROTLI_OPERATION_FLUSH}},D3=class extends Tb{constructor(e){super(e,"BrotliCompress")}},S3=class extends Tb{constructor(e){super(e,"BrotliDecompress")}};hl.Deflate=y3;hl.Inflate=E3;hl.Gzip=C3;hl.Gunzip=I3;hl.DeflateRaw=w3;hl.InflateRaw=B3;hl.Unzip=v3;typeof lAe.BrotliCompress=="function"?(hl.BrotliCompress=D3,hl.BrotliDecompress=S3):hl.BrotliCompress=hl.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var Oy=_((v4t,cAe)=>{var bat=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;cAe.exports=bat!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var Lb=_((S4t,uAe)=>{"use strict";var kat=Ty(),b3=Oy(),k3=Symbol("slurp");uAe.exports=class extends kat{constructor(e,r,o){switch(super(),this.pause(),this.extended=r,this.globalExtended=o,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=b3(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=b3(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[k3](r),o&&this[k3](o,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let o=this.remain,a=this.blockRemain;return this.remain=Math.max(0,o-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:o>=r?super.write(e):super.write(e.slice(0,o))}[k3](e,r){for(let o in e)e[o]!==null&&e[o]!==void 0&&!(r&&o==="path")&&(this[o]=o==="path"||o==="linkpath"?b3(e[o]):e[o])}}});var Q3=_(Nb=>{"use strict";Nb.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"]]);Nb.code=new Map(Array.from(Nb.name).map(t=>[t[1],t[0]]))});var hAe=_((x4t,pAe)=>{"use strict";var Qat=(t,e)=>{if(Number.isSafeInteger(t))t<0?Rat(t,e):Fat(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},Fat=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},Rat=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var o=e.length;o>1;o--){var a=t&255;t=Math.floor(t/256),r?e[o-1]=AAe(a):a===0?e[o-1]=0:(r=!0,e[o-1]=fAe(a))}},Tat=t=>{let e=t[0],r=e===128?Nat(t.slice(1,t.length)):e===255?Lat(t):null;if(r===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(r))throw Error("parsed number outside of javascript safe integer range");return r},Lat=t=>{for(var e=t.length,r=0,o=!1,a=e-1;a>-1;a--){var n=t[a],u;o?u=AAe(n):n===0?u=n:(o=!0,u=fAe(n)),u!==0&&(r-=u*Math.pow(256,e-a-1))}return r},Nat=t=>{for(var e=t.length,r=0,o=e-1;o>-1;o--){var a=t[o];a!==0&&(r+=a*Math.pow(256,e-o-1))}return r},AAe=t=>(255^t)&255,fAe=t=>(255^t)+1&255;pAe.exports={encode:Qat,parse:Tat}});var Uy=_((b4t,dAe)=>{"use strict";var F3=Q3(),My=ve("path").posix,gAe=hAe(),R3=Symbol("slurp"),gl=Symbol("type"),N3=class{constructor(e,r,o,a){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[gl]="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,o,a):e&&this.set(e)}decode(e,r,o,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=Ng(e,r,100),this.mode=Eh(e,r+100,8),this.uid=Eh(e,r+108,8),this.gid=Eh(e,r+116,8),this.size=Eh(e,r+124,12),this.mtime=T3(e,r+136,12),this.cksum=Eh(e,r+148,12),this[R3](o),this[R3](a,!0),this[gl]=Ng(e,r+156,1),this[gl]===""&&(this[gl]="0"),this[gl]==="0"&&this.path.substr(-1)==="/"&&(this[gl]="5"),this[gl]==="5"&&(this.size=0),this.linkpath=Ng(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=Ng(e,r+265,32),this.gname=Ng(e,r+297,32),this.devmaj=Eh(e,r+329,8),this.devmin=Eh(e,r+337,8),e[r+475]!==0){let u=Ng(e,r+345,155);this.path=u+"/"+this.path}else{let u=Ng(e,r+345,130);u&&(this.path=u+"/"+this.path),this.atime=T3(e,r+476,12),this.ctime=T3(e,r+488,12)}let n=8*32;for(let u=r;u=r+512))throw new Error("need 512 bytes for header");let o=this.ctime||this.atime?130:155,a=Oat(this.path||"",o),n=a[0],u=a[1];this.needPax=a[2],this.needPax=Og(e,r,100,n)||this.needPax,this.needPax=Ch(e,r+100,8,this.mode)||this.needPax,this.needPax=Ch(e,r+108,8,this.uid)||this.needPax,this.needPax=Ch(e,r+116,8,this.gid)||this.needPax,this.needPax=Ch(e,r+124,12,this.size)||this.needPax,this.needPax=L3(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[gl].charCodeAt(0),this.needPax=Og(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=Og(e,r+265,32,this.uname)||this.needPax,this.needPax=Og(e,r+297,32,this.gname)||this.needPax,this.needPax=Ch(e,r+329,8,this.devmaj)||this.needPax,this.needPax=Ch(e,r+337,8,this.devmin)||this.needPax,this.needPax=Og(e,r+345,o,u)||this.needPax,e[r+475]!==0?this.needPax=Og(e,r+345,155,u)||this.needPax:(this.needPax=Og(e,r+345,130,u)||this.needPax,this.needPax=L3(e,r+476,12,this.atime)||this.needPax,this.needPax=L3(e,r+488,12,this.ctime)||this.needPax);let A=8*32;for(let p=r;p{let o=t,a="",n,u=My.parse(t).root||".";if(Buffer.byteLength(o)<100)n=[o,a,!1];else{a=My.dirname(o),o=My.basename(o);do Buffer.byteLength(o)<=100&&Buffer.byteLength(a)<=e?n=[o,a,!1]:Buffer.byteLength(o)>100&&Buffer.byteLength(a)<=e?n=[o.substr(0,99),a,!0]:(o=My.join(My.basename(a),o),a=My.dirname(a));while(a!==u&&!n);n||(n=[t.substr(0,99),"",!0])}return n},Ng=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),T3=(t,e,r)=>Mat(Eh(t,e,r)),Mat=t=>t===null?null:new Date(t*1e3),Eh=(t,e,r)=>t[e]&128?gAe.parse(t.slice(e,e+r)):_at(t,e,r),Uat=t=>isNaN(t)?null:t,_at=(t,e,r)=>Uat(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),Hat={12:8589934591,8:2097151},Ch=(t,e,r,o)=>o===null?!1:o>Hat[r]||o<0?(gAe.encode(o,t.slice(e,e+r)),!0):(qat(t,e,r,o),!1),qat=(t,e,r,o)=>t.write(jat(o,r),e,r,"ascii"),jat=(t,e)=>Gat(Math.floor(t).toString(8),e),Gat=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",L3=(t,e,r,o)=>o===null?!1:Ch(t,e,r,o.getTime()/1e3),Wat=new Array(156).join("\0"),Og=(t,e,r,o)=>o===null?!1:(t.write(o+Wat,e,r,"utf8"),o.length!==Buffer.byteLength(o)||o.length>r);dAe.exports=N3});var Ob=_((k4t,mAe)=>{"use strict";var Yat=Uy(),Vat=ve("path"),c2=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),o=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(o);for(let n=0;n<512;n++)a[n]=0;new Yat({path:("PaxHeader/"+Vat.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(a),a.write(e,512,r,"utf8");for(let n=r+512;n=Math.pow(10,n)&&(n+=1),n+a+o}};c2.parse=(t,e,r)=>new c2(Kat(Jat(t),e),r);var Kat=(t,e)=>e?Object.keys(t).reduce((r,o)=>(r[o]=t[o],r),e):t,Jat=t=>t.replace(/\n$/,"").split(` +`).reduce(zat,Object.create(null)),zat=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let o=e.split("="),a=o.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=o.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};mAe.exports=c2});var _y=_((Q4t,yAe)=>{yAe.exports=t=>{let e=t.length-1,r=-1;for(;e>-1&&t.charAt(e)==="/";)r=e,e--;return r===-1?t:t.slice(0,r)}});var Mb=_((F4t,EAe)=>{"use strict";EAe.exports=t=>class extends t{warn(e,r,o={}){this.file&&(o.file=this.file),this.cwd&&(o.cwd=this.cwd),o.code=r instanceof Error&&r.code||e,o.tarCode=e,!this.strict&&o.recoverable!==!1?(r instanceof Error&&(o=Object.assign(r,o),r=r.message),this.emit("warn",o.tarCode,r,o)):r instanceof Error?this.emit("error",Object.assign(r,o)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),o))}}});var M3=_((T4t,CAe)=>{"use strict";var Ub=["|","<",">","?",":"],O3=Ub.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),Xat=new Map(Ub.map((t,e)=>[t,O3[e]])),Zat=new Map(O3.map((t,e)=>[t,Ub[e]]));CAe.exports={encode:t=>Ub.reduce((e,r)=>e.split(r).join(Xat.get(r)),t),decode:t=>O3.reduce((e,r)=>e.split(r).join(Zat.get(r)),t)}});var U3=_((L4t,wAe)=>{var{isAbsolute:$at,parse:IAe}=ve("path").win32;wAe.exports=t=>{let e="",r=IAe(t);for(;$at(t)||r.root;){let o=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(o.length),e+=o,r=IAe(t)}return[e,t]}});var vAe=_((N4t,BAe)=>{"use strict";BAe.exports=(t,e,r)=>(t&=4095,r&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t)});var J3=_((U4t,MAe)=>{"use strict";var QAe=Ty(),FAe=Ob(),RAe=Uy(),lA=ve("fs"),DAe=ve("path"),aA=Oy(),elt=_y(),TAe=(t,e)=>e?(t=aA(t).replace(/^\.(\/|$)/,""),elt(e)+"/"+t):aA(t),tlt=16*1024*1024,SAe=Symbol("process"),PAe=Symbol("file"),xAe=Symbol("directory"),H3=Symbol("symlink"),bAe=Symbol("hardlink"),u2=Symbol("header"),_b=Symbol("read"),q3=Symbol("lstat"),Hb=Symbol("onlstat"),j3=Symbol("onread"),G3=Symbol("onreadlink"),W3=Symbol("openfile"),Y3=Symbol("onopenfile"),Ih=Symbol("close"),qb=Symbol("mode"),V3=Symbol("awaitDrain"),_3=Symbol("ondrain"),cA=Symbol("prefix"),kAe=Symbol("hadError"),LAe=Mb(),rlt=M3(),NAe=U3(),OAe=vAe(),jb=LAe(class extends QAe{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=aA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||tlt,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=aA(r.cwd||process.cwd()),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime||null,this.prefix=r.prefix?aA(r.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=NAe(this.path);a&&(this.path=n,o=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=rlt.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=aA(r.absolute||DAe.resolve(this.cwd,e)),this.path===""&&(this.path="./"),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.statCache.has(this.absolute)?this[Hb](this.statCache.get(this.absolute)):this[q3]()}emit(e,...r){return e==="error"&&(this[kAe]=!0),super.emit(e,...r)}[q3](){lA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[Hb](r)})}[Hb](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=ilt(e),this.emit("stat",e),this[SAe]()}[SAe](){switch(this.type){case"File":return this[PAe]();case"Directory":return this[xAe]();case"SymbolicLink":return this[H3]();default:return this.end()}}[qb](e){return OAe(e,this.type==="Directory",this.portable)}[cA](e){return TAe(e,this.prefix)}[u2](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new RAe({path:this[cA](this.path),linkpath:this.type==="Link"?this[cA](this.linkpath):this.linkpath,mode:this[qb](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&&super.write(new FAe({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[cA](this.path),linkpath:this.type==="Link"?this[cA](this.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()),super.write(this.header.block)}[xAe](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[u2](),this.end()}[H3](){lA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[G3](r)})}[G3](e){this.linkpath=aA(e),this[u2](),this.end()}[bAe](e){this.type="Link",this.linkpath=aA(DAe.relative(this.cwd,e)),this.stat.size=0,this[u2](),this.end()}[PAe](){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[bAe](r)}this.linkCache.set(e,this.absolute)}if(this[u2](),this.stat.size===0)return this.end();this[W3]()}[W3](){lA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[Y3](r)})}[Y3](e){if(this.fd=e,this[kAe])return this[Ih]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let r=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(r),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[_b]()}[_b](){let{fd:e,buf:r,offset:o,length:a,pos:n}=this;lA.read(e,r,o,a,n,(u,A)=>{if(u)return this[Ih](()=>this.emit("error",u));this[j3](A)})}[Ih](e){lA.close(this.fd,e)}[j3](e){if(e<=0&&this.remain>0){let a=new Error("encountered unexpected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[Ih](()=>this.emit("error",a))}if(e>this.remain){let a=new Error("did not encounter expected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[Ih](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[_3]())}[V3](e){this.once("drain",e)}write(e){if(this.blockRemaine?this.emit("error",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[_b]()}}),K3=class extends jb{[q3](){this[Hb](lA.lstatSync(this.absolute))}[H3](){this[G3](lA.readlinkSync(this.absolute))}[W3](){this[Y3](lA.openSync(this.absolute,"r"))}[_b](){let e=!0;try{let{fd:r,buf:o,offset:a,length:n,pos:u}=this,A=lA.readSync(r,o,a,n,u);this[j3](A),e=!1}finally{if(e)try{this[Ih](()=>{})}catch{}}}[V3](e){e()}[Ih](e){lA.closeSync(this.fd),e()}},nlt=LAe(class extends QAe{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.prefix=r.prefix||null,this.path=aA(e.path),this.mode=this[qb](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=aA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=NAe(this.path);a&&(this.path=n,o=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new RAe({path:this[cA](this.path),linkpath:this.type==="Link"?this[cA](this.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}),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.header.encode()&&!this.noPax&&super.write(new FAe({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[cA](this.path),linkpath:this.type==="Link"?this[cA](this.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)}[cA](e){return TAe(e,this.prefix)}[qb](e){return OAe(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&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});jb.Sync=K3;jb.Tar=nlt;var ilt=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";MAe.exports=jb});var Zb=_((H4t,WAe)=>{"use strict";var zb=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}},slt=Ty(),olt=x3(),alt=Lb(),i_=J3(),llt=i_.Sync,clt=i_.Tar,ult=eP(),UAe=Buffer.alloc(1024),Yb=Symbol("onStat"),Gb=Symbol("ended"),uA=Symbol("queue"),Hy=Symbol("current"),Mg=Symbol("process"),Wb=Symbol("processing"),_Ae=Symbol("processJob"),AA=Symbol("jobs"),z3=Symbol("jobDone"),Vb=Symbol("addFSEntry"),HAe=Symbol("addTarEntry"),e_=Symbol("stat"),t_=Symbol("readdir"),Kb=Symbol("onreaddir"),Jb=Symbol("pipe"),qAe=Symbol("entry"),X3=Symbol("entryOpt"),r_=Symbol("writeEntryClass"),GAe=Symbol("write"),Z3=Symbol("ondrain"),Xb=ve("fs"),jAe=ve("path"),Alt=Mb(),$3=Oy(),s_=Alt(class extends slt{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=$3(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[r_]=i_,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 olt.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[Z3]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[Z3]),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[uA]=new ult,this[AA]=0,this.jobs=+e.jobs||4,this[Wb]=!1,this[Gb]=!1}[GAe](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[Gb]=!0,this[Mg](),this}write(e){if(this[Gb])throw new Error("write after end");return e instanceof alt?this[HAe](e):this[Vb](e),this.flowing}[HAe](e){let r=$3(jAe.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let o=new zb(e.path,r,!1);o.entry=new clt(e,this[X3](o)),o.entry.on("end",a=>this[z3](o)),this[AA]+=1,this[uA].push(o)}this[Mg]()}[Vb](e){let r=$3(jAe.resolve(this.cwd,e));this[uA].push(new zb(e,r)),this[Mg]()}[e_](e){e.pending=!0,this[AA]+=1;let r=this.follow?"stat":"lstat";Xb[r](e.absolute,(o,a)=>{e.pending=!1,this[AA]-=1,o?this.emit("error",o):this[Yb](e,a)})}[Yb](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[Mg]()}[t_](e){e.pending=!0,this[AA]+=1,Xb.readdir(e.absolute,(r,o)=>{if(e.pending=!1,this[AA]-=1,r)return this.emit("error",r);this[Kb](e,o)})}[Kb](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[Mg]()}[Mg](){if(!this[Wb]){this[Wb]=!0;for(let e=this[uA].head;e!==null&&this[AA]this.warn(r,o,a),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,prefix:this.prefix}}[qAe](e){this[AA]+=1;try{return new this[r_](e.path,this[X3](e)).on("end",()=>this[z3](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[Z3](){this[Hy]&&this[Hy].entry&&this[Hy].entry.resume()}[Jb](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[Vb](u+a)});let r=e.entry,o=this.zip;o?r.on("data",a=>{o.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),n_=class extends s_{constructor(e){super(e),this[r_]=llt}pause(){}resume(){}[e_](e){let r=this.follow?"statSync":"lstatSync";this[Yb](e,Xb[r](e.absolute))}[t_](e,r){this[Kb](e,Xb.readdirSync(e.absolute))}[Jb](e){let r=e.entry,o=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[Vb](u+a)}),o?r.on("data",a=>{o.write(a)}):r.on("data",a=>{super[GAe](a)})}};s_.Sync=n_;WAe.exports=s_});var Jy=_(f2=>{"use strict";var flt=Ty(),plt=ve("events").EventEmitter,Ta=ve("fs"),l_=Ta.writev;if(!l_){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;l_=(r,o,a,n)=>{let u=(p,h)=>n(p,h,o),A=new e;A.oncomplete=u,t.writeBuffers(r,o,a,A)}}var Vy=Symbol("_autoClose"),Zc=Symbol("_close"),A2=Symbol("_ended"),zn=Symbol("_fd"),YAe=Symbol("_finished"),Bh=Symbol("_flags"),o_=Symbol("_flush"),c_=Symbol("_handleChunk"),u_=Symbol("_makeBuf"),nk=Symbol("_mode"),$b=Symbol("_needDrain"),Wy=Symbol("_onerror"),Ky=Symbol("_onopen"),a_=Symbol("_onread"),jy=Symbol("_onwrite"),vh=Symbol("_open"),Hf=Symbol("_path"),Ug=Symbol("_pos"),fA=Symbol("_queue"),Gy=Symbol("_read"),VAe=Symbol("_readSize"),wh=Symbol("_reading"),ek=Symbol("_remain"),KAe=Symbol("_size"),tk=Symbol("_write"),qy=Symbol("_writing"),rk=Symbol("_defaultFlag"),Yy=Symbol("_errored"),ik=class extends flt{constructor(e,r){if(r=r||{},super(r),this.readable=!0,this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[Yy]=!1,this[zn]=typeof r.fd=="number"?r.fd:null,this[Hf]=e,this[VAe]=r.readSize||16*1024*1024,this[wh]=!1,this[KAe]=typeof r.size=="number"?r.size:1/0,this[ek]=this[KAe],this[Vy]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[zn]=="number"?this[Gy]():this[vh]()}get fd(){return this[zn]}get path(){return this[Hf]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[vh](){Ta.open(this[Hf],"r",(e,r)=>this[Ky](e,r))}[Ky](e,r){e?this[Wy](e):(this[zn]=r,this.emit("open",r),this[Gy]())}[u_](){return Buffer.allocUnsafe(Math.min(this[VAe],this[ek]))}[Gy](){if(!this[wh]){this[wh]=!0;let e=this[u_]();if(e.length===0)return process.nextTick(()=>this[a_](null,0,e));Ta.read(this[zn],e,0,e.length,null,(r,o,a)=>this[a_](r,o,a))}}[a_](e,r,o){this[wh]=!1,e?this[Wy](e):this[c_](r,o)&&this[Gy]()}[Zc](){if(this[Vy]&&typeof this[zn]=="number"){let e=this[zn];this[zn]=null,Ta.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[Wy](e){this[wh]=!0,this[Zc](),this.emit("error",e)}[c_](e,r){let o=!1;return this[ek]-=e,e>0&&(o=super.write(ethis[Ky](e,r))}[Ky](e,r){this[rk]&&this[Bh]==="r+"&&e&&e.code==="ENOENT"?(this[Bh]="w",this[vh]()):e?this[Wy](e):(this[zn]=r,this.emit("open",r),this[o_]())}end(e,r){return e&&this.write(e,r),this[A2]=!0,!this[qy]&&!this[fA].length&&typeof this[zn]=="number"&&this[jy](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[A2]?(this.emit("error",new Error("write() after end()")),!1):this[zn]===null||this[qy]||this[fA].length?(this[fA].push(e),this[$b]=!0,!1):(this[qy]=!0,this[tk](e),!0)}[tk](e){Ta.write(this[zn],e,0,e.length,this[Ug],(r,o)=>this[jy](r,o))}[jy](e,r){e?this[Wy](e):(this[Ug]!==null&&(this[Ug]+=r),this[fA].length?this[o_]():(this[qy]=!1,this[A2]&&!this[YAe]?(this[YAe]=!0,this[Zc](),this.emit("finish")):this[$b]&&(this[$b]=!1,this.emit("drain"))))}[o_](){if(this[fA].length===0)this[A2]&&this[jy](null,0);else if(this[fA].length===1)this[tk](this[fA].pop());else{let e=this[fA];this[fA]=[],l_(this[zn],e,this[Ug],(r,o)=>this[jy](r,o))}}[Zc](){if(this[Vy]&&typeof this[zn]=="number"){let e=this[zn];this[zn]=null,Ta.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},f_=class extends sk{[vh](){let e;if(this[rk]&&this[Bh]==="r+")try{e=Ta.openSync(this[Hf],this[Bh],this[nk])}catch(r){if(r.code==="ENOENT")return this[Bh]="w",this[vh]();throw r}else e=Ta.openSync(this[Hf],this[Bh],this[nk]);this[Ky](null,e)}[Zc](){if(this[Vy]&&typeof this[zn]=="number"){let e=this[zn];this[zn]=null,Ta.closeSync(e),this.emit("close")}}[tk](e){let r=!0;try{this[jy](null,Ta.writeSync(this[zn],e,0,e.length,this[Ug])),r=!1}finally{if(r)try{this[Zc]()}catch{}}}};f2.ReadStream=ik;f2.ReadStreamSync=A_;f2.WriteStream=sk;f2.WriteStreamSync=f_});var fk=_((G4t,tfe)=>{"use strict";var hlt=Mb(),glt=Uy(),dlt=ve("events"),mlt=eP(),ylt=1024*1024,Elt=Lb(),JAe=Ob(),Clt=x3(),p_=Buffer.from([31,139]),$l=Symbol("state"),_g=Symbol("writeEntry"),qf=Symbol("readEntry"),h_=Symbol("nextEntry"),zAe=Symbol("processEntry"),ec=Symbol("extendedHeader"),p2=Symbol("globalExtendedHeader"),Dh=Symbol("meta"),XAe=Symbol("emitMeta"),yi=Symbol("buffer"),jf=Symbol("queue"),Hg=Symbol("ended"),ZAe=Symbol("emittedEnd"),qg=Symbol("emit"),La=Symbol("unzip"),ok=Symbol("consumeChunk"),ak=Symbol("consumeChunkSub"),g_=Symbol("consumeBody"),$Ae=Symbol("consumeMeta"),efe=Symbol("consumeHeader"),lk=Symbol("consuming"),d_=Symbol("bufferConcat"),m_=Symbol("maybeEnd"),h2=Symbol("writing"),Sh=Symbol("aborted"),ck=Symbol("onDone"),jg=Symbol("sawValidEntry"),uk=Symbol("sawNullBlock"),Ak=Symbol("sawEOF"),Ilt=t=>!0;tfe.exports=hlt(class extends dlt{constructor(e){e=e||{},super(e),this.file=e.file||"",this[jg]=null,this.on(ck,r=>{(this[$l]==="begin"||this[jg]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(ck,e.ondone):this.on(ck,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||ylt,this.filter=typeof e.filter=="function"?e.filter:Ilt,this.writable=!0,this.readable=!1,this[jf]=new mlt,this[yi]=null,this[qf]=null,this[_g]=null,this[$l]="begin",this[Dh]="",this[ec]=null,this[p2]=null,this[Hg]=!1,this[La]=null,this[Sh]=!1,this[uk]=!1,this[Ak]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[efe](e,r){this[jg]===null&&(this[jg]=!1);let o;try{o=new glt(e,r,this[ec],this[p2])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(o.nullBlock)this[uk]?(this[Ak]=!0,this[$l]==="begin"&&(this[$l]="header"),this[qg]("eof")):(this[uk]=!0,this[qg]("nullBlock"));else if(this[uk]=!1,!o.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:o});else if(!o.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:o});else{let a=o.type;if(/^(Symbolic)?Link$/.test(a)&&!o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:o});else if(!/^(Symbolic)?Link$/.test(a)&&o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:o});else{let n=this[_g]=new Elt(o,this[ec],this[p2]);if(!this[jg])if(n.remain){let u=()=>{n.invalid||(this[jg]=!0)};n.on("end",u)}else this[jg]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[qg]("ignoredEntry",n),this[$l]="ignore",n.resume()):n.size>0&&(this[Dh]="",n.on("data",u=>this[Dh]+=u),this[$l]="meta"):(this[ec]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[qg]("ignoredEntry",n),this[$l]=n.remain?"ignore":"header",n.resume()):(n.remain?this[$l]="body":(this[$l]="header",n.end()),this[qf]?this[jf].push(n):(this[jf].push(n),this[h_]())))}}}[zAe](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[qf]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",o=>this[h_]()),r=!1)):(this[qf]=null,r=!1),r}[h_](){do;while(this[zAe](this[jf].shift()));if(!this[jf].length){let e=this[qf];!e||e.flowing||e.size===e.remain?this[h2]||this.emit("drain"):e.once("drain",o=>this.emit("drain"))}}[g_](e,r){let o=this[_g],a=o.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return o.write(n),o.blockRemain||(this[$l]="header",this[_g]=null,o.end()),n.length}[$Ae](e,r){let o=this[_g],a=this[g_](e,r);return this[_g]||this[XAe](o),a}[qg](e,r,o){!this[jf].length&&!this[qf]?this.emit(e,r,o):this[jf].push([e,r,o])}[XAe](e){switch(this[qg]("meta",this[Dh]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[ec]=JAe.parse(this[Dh],this[ec],!1);break;case"GlobalExtendedHeader":this[p2]=JAe.parse(this[Dh],this[p2],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[ec]=this[ec]||Object.create(null),this[ec].path=this[Dh].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[ec]=this[ec]||Object.create(null),this[ec].linkpath=this[Dh].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[Sh]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[Sh])return;if(this[La]===null&&e){if(this[yi]&&(e=Buffer.concat([this[yi],e]),this[yi]=null),e.lengththis[ok](n)),this[La].on("error",n=>this.abort(n)),this[La].on("end",n=>{this[Hg]=!0,this[ok]()}),this[h2]=!0;let a=this[La][o?"end":"write"](e);return this[h2]=!1,a}}this[h2]=!0,this[La]?this[La].write(e):this[ok](e),this[h2]=!1;let r=this[jf].length?!1:this[qf]?this[qf].flowing:!0;return!r&&!this[jf].length&&this[qf].once("drain",o=>this.emit("drain")),r}[d_](e){e&&!this[Sh]&&(this[yi]=this[yi]?Buffer.concat([this[yi],e]):e)}[m_](){if(this[Hg]&&!this[ZAe]&&!this[Sh]&&!this[lk]){this[ZAe]=!0;let e=this[_g];if(e&&e.blockRemain){let r=this[yi]?this[yi].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[yi]&&e.write(this[yi]),e.end()}this[qg](ck)}}[ok](e){if(this[lk])this[d_](e);else if(!e&&!this[yi])this[m_]();else{if(this[lk]=!0,this[yi]){this[d_](e);let r=this[yi];this[yi]=null,this[ak](r)}else this[ak](e);for(;this[yi]&&this[yi].length>=512&&!this[Sh]&&!this[Ak];){let r=this[yi];this[yi]=null,this[ak](r)}this[lk]=!1}(!this[yi]||this[Hg])&&this[m_]()}[ak](e){let r=0,o=e.length;for(;r+512<=o&&!this[Sh]&&!this[Ak];)switch(this[$l]){case"begin":case"header":this[efe](e,r),r+=512;break;case"ignore":case"body":r+=this[g_](e,r);break;case"meta":r+=this[$Ae](e,r);break;default:throw new Error("invalid state: "+this[$l])}r{"use strict";var wlt=Fy(),nfe=fk(),zy=ve("fs"),Blt=Jy(),rfe=ve("path"),y_=_y();sfe.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 o=wlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Dlt(o,e),o.noResume||vlt(o),o.file&&o.sync?Slt(o):o.file?Plt(o,r):ife(o)};var vlt=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},Dlt=(t,e)=>{let r=new Map(e.map(n=>[y_(n),!0])),o=t.filter,a=(n,u)=>{let A=u||rfe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(rfe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(y_(n)):n=>a(y_(n))},Slt=t=>{let e=ife(t),r=t.file,o=!0,a;try{let n=zy.statSync(r),u=t.maxReadSize||16*1024*1024;if(n.size{let r=new nfe(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("end",u),zy.stat(a,(p,h)=>{if(p)A(p);else{let E=new Blt.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},ife=t=>new nfe(t)});var Afe=_((Y4t,ufe)=>{"use strict";var xlt=Fy(),hk=Zb(),ofe=Jy(),afe=pk(),lfe=ve("path");ufe.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 o=xlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return o.file&&o.sync?blt(o,e):o.file?klt(o,e,r):o.sync?Qlt(o,e):Flt(o,e)};var blt=(t,e)=>{let r=new hk.Sync(t),o=new ofe.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(o),cfe(r,e)},klt=(t,e,r)=>{let o=new hk(t),a=new ofe.WriteStream(t.file,{mode:t.mode||438});o.pipe(a);let n=new Promise((u,A)=>{a.on("error",A),a.on("close",u),o.on("error",A)});return E_(o,e),r?n.then(r,r):n},cfe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?afe({file:lfe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},E_=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return afe({file:lfe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>E_(t,e));t.add(r)}t.end()},Qlt=(t,e)=>{let r=new hk.Sync(t);return cfe(r,e),r},Flt=(t,e)=>{let r=new hk(t);return E_(r,e),r}});var C_=_((V4t,yfe)=>{"use strict";var Rlt=Fy(),ffe=Zb(),dl=ve("fs"),pfe=Jy(),hfe=pk(),gfe=ve("path"),dfe=Uy();yfe.exports=(t,e,r)=>{let o=Rlt(t);if(!o.file)throw new TypeError("file is required");if(o.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),o.sync?Tlt(o,e):Nlt(o,e,r)};var Tlt=(t,e)=>{let r=new ffe.Sync(t),o=!0,a,n;try{try{a=dl.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=dl.openSync(t.file,"w+");else throw p}let u=dl.fstatSync(a),A=Buffer.alloc(512);e:for(n=0;nu.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}o=!1,Llt(t,r,n,a,e)}finally{if(o)try{dl.closeSync(a)}catch{}}},Llt=(t,e,r,o,a)=>{let n=new pfe.WriteStreamSync(t.file,{fd:o,start:r});e.pipe(n),Olt(e,a)},Nlt=(t,e,r)=>{e=Array.from(e);let o=new ffe(t),a=(u,A,p)=>{let h=(C,T)=>{C?dl.close(u,N=>p(C)):p(null,T)},E=0;if(A===0)return h(null,0);let w=0,D=Buffer.alloc(512),b=(C,T)=>{if(C)return h(C);if(w+=T,w<512&&T)return dl.read(u,D,w,D.length-w,E+w,b);if(E===0&&D[0]===31&&D[1]===139)return h(new Error("cannot append to compressed archives"));if(w<512)return h(null,E);let N=new dfe(D);if(!N.cksumValid)return h(null,E);let U=512*Math.ceil(N.size/512);if(E+U+512>A||(E+=U+512,E>=A))return h(null,E);t.mtimeCache&&t.mtimeCache.set(N.path,N.mtime),w=0,dl.read(u,D,0,512,E,b)};dl.read(u,D,0,512,E,b)},n=new Promise((u,A)=>{o.on("error",A);let p="r+",h=(E,w)=>{if(E&&E.code==="ENOENT"&&p==="r+")return p="w+",dl.open(t.file,p,h);if(E)return A(E);dl.fstat(w,(D,b)=>{if(D)return dl.close(w,()=>A(D));a(w,b.size,(C,T)=>{if(C)return A(C);let N=new pfe.WriteStream(t.file,{fd:w,start:T});o.pipe(N),N.on("error",A),N.on("close",u),mfe(o,e)})})};dl.open(t.file,p,h)});return r?n.then(r,r):n},Olt=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?hfe({file:gfe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},mfe=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return hfe({file:gfe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>mfe(t,e));t.add(r)}t.end()}});var Cfe=_((K4t,Efe)=>{"use strict";var Mlt=Fy(),Ult=C_();Efe.exports=(t,e,r)=>{let o=Mlt(t);if(!o.file)throw new TypeError("file is required");if(o.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),_lt(o),Ult(o,e,r)};var _lt=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,o)=>e(r,o)&&!(t.mtimeCache.get(r)>o.mtime):(r,o)=>!(t.mtimeCache.get(r)>o.mtime)}});var Bfe=_((J4t,wfe)=>{var{promisify:Ife}=ve("util"),Ph=ve("fs"),Hlt=t=>{if(!t)t={mode:511,fs:Ph};else if(typeof t=="object")t={mode:511,fs:Ph,...t};else if(typeof t=="number")t={mode:t,fs:Ph};else if(typeof t=="string")t={mode:parseInt(t,8),fs:Ph};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||Ph.mkdir,t.mkdirAsync=Ife(t.mkdir),t.stat=t.stat||t.fs.stat||Ph.stat,t.statAsync=Ife(t.stat),t.statSync=t.statSync||t.fs.statSync||Ph.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||Ph.mkdirSync,t};wfe.exports=Hlt});var Dfe=_((z4t,vfe)=>{var qlt=process.platform,{resolve:jlt,parse:Glt}=ve("path"),Wlt=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=jlt(t),qlt==="win32"){let e=/[*|"<>?:]/,{root:r}=Glt(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};vfe.exports=Wlt});var kfe=_((X4t,bfe)=>{var{dirname:Sfe}=ve("path"),Pfe=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(o=>o.isDirectory()?r:void 0,o=>o.code==="ENOENT"?Pfe(t,Sfe(e),e):void 0),xfe=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(o){return o.code==="ENOENT"?xfe(t,Sfe(e),e):void 0}};bfe.exports={findMade:Pfe,findMadeSync:xfe}});var B_=_((Z4t,Ffe)=>{var{dirname:Qfe}=ve("path"),I_=(t,e,r)=>{e.recursive=!1;let o=Qfe(t);return o===t?e.mkdirAsync(t,e).catch(a=>{if(a.code!=="EISDIR")throw a}):e.mkdirAsync(t,e).then(()=>r||t,a=>{if(a.code==="ENOENT")return I_(o,e).then(n=>I_(t,e,n));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;return e.statAsync(t).then(n=>{if(n.isDirectory())return r;throw a},()=>{throw a})})},w_=(t,e,r)=>{let o=Qfe(t);if(e.recursive=!1,o===t)try{return e.mkdirSync(t,e)}catch(a){if(a.code!=="EISDIR")throw a;return}try{return e.mkdirSync(t,e),r||t}catch(a){if(a.code==="ENOENT")return w_(t,e,w_(o,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};Ffe.exports={mkdirpManual:I_,mkdirpManualSync:w_}});var Lfe=_(($4t,Tfe)=>{var{dirname:Rfe}=ve("path"),{findMade:Ylt,findMadeSync:Vlt}=kfe(),{mkdirpManual:Klt,mkdirpManualSync:Jlt}=B_(),zlt=(t,e)=>(e.recursive=!0,Rfe(t)===t?e.mkdirAsync(t,e):Ylt(e,t).then(o=>e.mkdirAsync(t,e).then(()=>o).catch(a=>{if(a.code==="ENOENT")return Klt(t,e);throw a}))),Xlt=(t,e)=>{if(e.recursive=!0,Rfe(t)===t)return e.mkdirSync(t,e);let o=Vlt(e,t);try{return e.mkdirSync(t,e),o}catch(a){if(a.code==="ENOENT")return Jlt(t,e);throw a}};Tfe.exports={mkdirpNative:zlt,mkdirpNativeSync:Xlt}});var Ufe=_((eUt,Mfe)=>{var Nfe=ve("fs"),Zlt=process.version,v_=Zlt.replace(/^v/,"").split("."),Ofe=+v_[0]>10||+v_[0]==10&&+v_[1]>=12,$lt=Ofe?t=>t.mkdir===Nfe.mkdir:()=>!1,ect=Ofe?t=>t.mkdirSync===Nfe.mkdirSync:()=>!1;Mfe.exports={useNative:$lt,useNativeSync:ect}});var Wfe=_((tUt,Gfe)=>{var Xy=Bfe(),Zy=Dfe(),{mkdirpNative:_fe,mkdirpNativeSync:Hfe}=Lfe(),{mkdirpManual:qfe,mkdirpManualSync:jfe}=B_(),{useNative:tct,useNativeSync:rct}=Ufe(),$y=(t,e)=>(t=Zy(t),e=Xy(e),tct(e)?_fe(t,e):qfe(t,e)),nct=(t,e)=>(t=Zy(t),e=Xy(e),rct(e)?Hfe(t,e):jfe(t,e));$y.sync=nct;$y.native=(t,e)=>_fe(Zy(t),Xy(e));$y.manual=(t,e)=>qfe(Zy(t),Xy(e));$y.nativeSync=(t,e)=>Hfe(Zy(t),Xy(e));$y.manualSync=(t,e)=>jfe(Zy(t),Xy(e));Gfe.exports=$y});var Zfe=_((rUt,Xfe)=>{"use strict";var tc=ve("fs"),Gg=ve("path"),ict=tc.lchown?"lchown":"chown",sct=tc.lchownSync?"lchownSync":"chownSync",Vfe=tc.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),Yfe=(t,e,r)=>{try{return tc[sct](t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},oct=(t,e,r)=>{try{return tc.chownSync(t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},act=Vfe?(t,e,r,o)=>a=>{!a||a.code!=="EISDIR"?o(a):tc.chown(t,e,r,o)}:(t,e,r,o)=>o,D_=Vfe?(t,e,r)=>{try{return Yfe(t,e,r)}catch(o){if(o.code!=="EISDIR")throw o;oct(t,e,r)}}:(t,e,r)=>Yfe(t,e,r),lct=process.version,Kfe=(t,e,r)=>tc.readdir(t,e,r),cct=(t,e)=>tc.readdirSync(t,e);/^v4\./.test(lct)&&(Kfe=(t,e,r)=>tc.readdir(t,r));var gk=(t,e,r,o)=>{tc[ict](t,e,r,act(t,e,r,a=>{o(a&&a.code!=="ENOENT"?a:null)}))},Jfe=(t,e,r,o,a)=>{if(typeof e=="string")return tc.lstat(Gg.resolve(t,e),(n,u)=>{if(n)return a(n.code!=="ENOENT"?n:null);u.name=e,Jfe(t,u,r,o,a)});if(e.isDirectory())S_(Gg.resolve(t,e.name),r,o,n=>{if(n)return a(n);let u=Gg.resolve(t,e.name);gk(u,r,o,a)});else{let n=Gg.resolve(t,e.name);gk(n,r,o,a)}},S_=(t,e,r,o)=>{Kfe(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return o();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return o(a)}if(a||!n.length)return gk(t,e,r,o);let u=n.length,A=null,p=h=>{if(!A){if(h)return o(A=h);if(--u===0)return gk(t,e,r,o)}};n.forEach(h=>Jfe(t,h,e,r,p))})},uct=(t,e,r,o)=>{if(typeof e=="string")try{let a=tc.lstatSync(Gg.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&zfe(Gg.resolve(t,e.name),r,o),D_(Gg.resolve(t,e.name),r,o)},zfe=(t,e,r)=>{let o;try{o=cct(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return D_(t,e,r);throw a}return o&&o.length&&o.forEach(a=>uct(t,a,e,r)),D_(t,e,r)};Xfe.exports=S_;S_.sync=zfe});var rpe=_((nUt,P_)=>{"use strict";var $fe=Wfe(),rc=ve("fs"),dk=ve("path"),epe=Zfe(),$c=Oy(),mk=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},yk=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},Ek=(t,e)=>t.get($c(e)),g2=(t,e,r)=>t.set($c(e),r),Act=(t,e)=>{rc.stat(t,(r,o)=>{(r||!o.isDirectory())&&(r=new yk(t,r&&r.code||"ENOTDIR")),e(r)})};P_.exports=(t,e,r)=>{t=$c(t);let o=e.umask,a=e.mode|448,n=(a&o)!==0,u=e.uid,A=e.gid,p=typeof u=="number"&&typeof A=="number"&&(u!==e.processUid||A!==e.processGid),h=e.preserve,E=e.unlink,w=e.cache,D=$c(e.cwd),b=(N,U)=>{N?r(N):(g2(w,t,!0),U&&p?epe(U,u,A,J=>b(J)):n?rc.chmod(t,a,r):r())};if(w&&Ek(w,t)===!0)return b();if(t===D)return Act(t,b);if(h)return $fe(t,{mode:a}).then(N=>b(null,N),b);let T=$c(dk.relative(D,t)).split("/");Ck(D,T,a,w,E,D,null,b)};var Ck=(t,e,r,o,a,n,u,A)=>{if(!e.length)return A(null,u);let p=e.shift(),h=$c(dk.resolve(t+"/"+p));if(Ek(o,h))return Ck(h,e,r,o,a,n,u,A);rc.mkdir(h,r,tpe(h,e,r,o,a,n,u,A))},tpe=(t,e,r,o,a,n,u,A)=>p=>{p?rc.lstat(t,(h,E)=>{if(h)h.path=h.path&&$c(h.path),A(h);else if(E.isDirectory())Ck(t,e,r,o,a,n,u,A);else if(a)rc.unlink(t,w=>{if(w)return A(w);rc.mkdir(t,r,tpe(t,e,r,o,a,n,u,A))});else{if(E.isSymbolicLink())return A(new mk(t,t+"/"+e.join("/")));A(p)}}):(u=u||t,Ck(t,e,r,o,a,n,u,A))},fct=t=>{let e=!1,r="ENOTDIR";try{e=rc.statSync(t).isDirectory()}catch(o){r=o.code}finally{if(!e)throw new yk(t,r)}};P_.exports.sync=(t,e)=>{t=$c(t);let r=e.umask,o=e.mode|448,a=(o&r)!==0,n=e.uid,u=e.gid,A=typeof n=="number"&&typeof u=="number"&&(n!==e.processUid||u!==e.processGid),p=e.preserve,h=e.unlink,E=e.cache,w=$c(e.cwd),D=N=>{g2(E,t,!0),N&&A&&epe.sync(N,n,u),a&&rc.chmodSync(t,o)};if(E&&Ek(E,t)===!0)return D();if(t===w)return fct(w),D();if(p)return D($fe.sync(t,o));let C=$c(dk.relative(w,t)).split("/"),T=null;for(let N=C.shift(),U=w;N&&(U+="/"+N);N=C.shift())if(U=$c(dk.resolve(U)),!Ek(E,U))try{rc.mkdirSync(U,o),T=T||U,g2(E,U,!0)}catch{let te=rc.lstatSync(U);if(te.isDirectory()){g2(E,U,!0);continue}else if(h){rc.unlinkSync(U),rc.mkdirSync(U,o),T=T||U,g2(E,U,!0);continue}else if(te.isSymbolicLink())return new mk(U,U+"/"+C.join("/"))}return D(T)}});var b_=_((iUt,npe)=>{var x_=Object.create(null),{hasOwnProperty:pct}=Object.prototype;npe.exports=t=>(pct.call(x_,t)||(x_[t]=t.normalize("NFKD")),x_[t])});var ape=_((sUt,ope)=>{var ipe=ve("assert"),hct=b_(),gct=_y(),{join:spe}=ve("path"),dct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,mct=dct==="win32";ope.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((w,D)=>(w.length&&(D=spe(w[w.length-1],D)),w.push(D||"/"),w),[]),o=new Set,a=h=>{let E=e.get(h);if(!E)throw new Error("function does not have any path reservations");return{paths:E.paths.map(w=>t.get(w)),dirs:[...E.dirs].map(w=>t.get(w))}},n=h=>{let{paths:E,dirs:w}=a(h);return E.every(D=>D[0]===h)&&w.every(D=>D[0]instanceof Set&&D[0].has(h))},u=h=>o.has(h)||!n(h)?!1:(o.add(h),h(()=>A(h)),!0),A=h=>{if(!o.has(h))return!1;let{paths:E,dirs:w}=e.get(h),D=new Set;return E.forEach(b=>{let C=t.get(b);ipe.equal(C[0],h),C.length===1?t.delete(b):(C.shift(),typeof C[0]=="function"?D.add(C[0]):C[0].forEach(T=>D.add(T)))}),w.forEach(b=>{let C=t.get(b);ipe(C[0]instanceof Set),C[0].size===1&&C.length===1?t.delete(b):C[0].size===1?(C.shift(),D.add(C[0])):C[0].delete(h)}),o.delete(h),D.forEach(b=>u(b)),!0};return{check:n,reserve:(h,E)=>{h=mct?["win32 parallelization disabled"]:h.map(D=>hct(gct(spe(D))).toLowerCase());let w=new Set(h.map(D=>r(D)).reduce((D,b)=>D.concat(b)));return e.set(E,{dirs:w,paths:h}),h.forEach(D=>{let b=t.get(D);b?b.push(E):t.set(D,[E])}),w.forEach(D=>{let b=t.get(D);b?b[b.length-1]instanceof Set?b[b.length-1].add(E):b.push(new Set([E])):t.set(D,[new Set([E])])}),u(E)}}}});var upe=_((oUt,cpe)=>{var yct=process.platform,Ect=yct==="win32",Cct=global.__FAKE_TESTING_FS__||ve("fs"),{O_CREAT:Ict,O_TRUNC:wct,O_WRONLY:Bct,UV_FS_O_FILEMAP:lpe=0}=Cct.constants,vct=Ect&&!!lpe,Dct=512*1024,Sct=lpe|wct|Ict|Bct;cpe.exports=vct?t=>t"w"});var M_=_((aUt,vpe)=>{"use strict";var Pct=ve("assert"),xct=fk(),Fn=ve("fs"),bct=Jy(),Gf=ve("path"),Ipe=rpe(),Ape=M3(),kct=ape(),Qct=U3(),ml=Oy(),Fct=_y(),Rct=b_(),fpe=Symbol("onEntry"),F_=Symbol("checkFs"),ppe=Symbol("checkFs2"),Bk=Symbol("pruneCache"),R_=Symbol("isReusable"),nc=Symbol("makeFs"),T_=Symbol("file"),L_=Symbol("directory"),vk=Symbol("link"),hpe=Symbol("symlink"),gpe=Symbol("hardlink"),dpe=Symbol("unsupported"),mpe=Symbol("checkPath"),xh=Symbol("mkdir"),Po=Symbol("onError"),Ik=Symbol("pending"),ype=Symbol("pend"),eE=Symbol("unpend"),k_=Symbol("ended"),Q_=Symbol("maybeClose"),N_=Symbol("skip"),d2=Symbol("doChown"),m2=Symbol("uid"),y2=Symbol("gid"),E2=Symbol("checkedCwd"),wpe=ve("crypto"),Bpe=upe(),Tct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,C2=Tct==="win32",Lct=(t,e)=>{if(!C2)return Fn.unlink(t,e);let r=t+".DELETE."+wpe.randomBytes(16).toString("hex");Fn.rename(t,r,o=>{if(o)return e(o);Fn.unlink(r,e)})},Nct=t=>{if(!C2)return Fn.unlinkSync(t);let e=t+".DELETE."+wpe.randomBytes(16).toString("hex");Fn.renameSync(t,e),Fn.unlinkSync(e)},Epe=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,Cpe=t=>Rct(Fct(ml(t))).toLowerCase(),Oct=(t,e)=>{e=Cpe(e);for(let r of t.keys()){let o=Cpe(r);(o===e||o.indexOf(e+"/")===0)&&t.delete(r)}},Mct=t=>{for(let e of t.keys())t.delete(e)},I2=class extends xct{constructor(e){if(e||(e={}),e.ondone=r=>{this[k_]=!0,this[Q_]()},super(e),this[E2]=!1,this.reservations=kct(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[Ik]=0,this[k_]=!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||C2,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=ml(Gf.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0: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[fpe](r))}warn(e,r,o={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(o.recoverable=!1),super.warn(e,r,o)}[Q_](){this[k_]&&this[Ik]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[mpe](e){if(this.strip){let r=ml(e.path).split("/");if(r.length=this.strip)e.linkpath=o.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=ml(e.path),o=r.split("/");if(o.includes("..")||C2&&/^[a-z]:\.\.$/i.test(o[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=Qct(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(Gf.isAbsolute(e.path)?e.absolute=ml(Gf.resolve(e.path)):e.absolute=ml(Gf.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+"/")!==0&&e.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:e,path:ml(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!=="Directory"&&e.type!=="GNUDumpDir")return!1;if(this.win32){let{root:r}=Gf.win32.parse(e.absolute);e.absolute=r+Ape.encode(e.absolute.substr(r.length));let{root:o}=Gf.win32.parse(e.path);e.path=o+Ape.encode(e.path.substr(o.length))}return!0}[fpe](e){if(!this[mpe](e))return e.resume();switch(Pct.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[F_](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[dpe](e)}}[Po](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[eE](),r.resume())}[xh](e,r,o){Ipe(ml(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,noChmod:this.noChmod},o)}[d2](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}[m2](e){return Epe(this.uid,e.uid,this.processUid)}[y2](e){return Epe(this.gid,e.gid,this.processGid)}[T_](e,r){let o=e.mode&4095||this.fmode,a=new bct.WriteStream(e.absolute,{flags:Bpe(e.size),mode:o,autoClose:!1});a.on("error",p=>{a.fd&&Fn.close(a.fd,()=>{}),a.write=()=>!0,this[Po](p,e),r()});let n=1,u=p=>{if(p){a.fd&&Fn.close(a.fd,()=>{}),this[Po](p,e),r();return}--n===0&&Fn.close(a.fd,h=>{h?this[Po](h,e):this[eE](),r()})};a.on("finish",p=>{let h=e.absolute,E=a.fd;if(e.mtime&&!this.noMtime){n++;let w=e.atime||new Date,D=e.mtime;Fn.futimes(E,w,D,b=>b?Fn.utimes(h,w,D,C=>u(C&&b)):u())}if(this[d2](e)){n++;let w=this[m2](e),D=this[y2](e);Fn.fchown(E,w,D,b=>b?Fn.chown(h,w,D,C=>u(C&&b)):u())}u()});let A=this.transform&&this.transform(e)||e;A!==e&&(A.on("error",p=>{this[Po](p,e),r()}),e.pipe(A)),A.pipe(a)}[L_](e,r){let o=e.mode&4095||this.dmode;this[xh](e.absolute,o,a=>{if(a){this[Po](a,e),r();return}let n=1,u=A=>{--n===0&&(r(),this[eE](),e.resume())};e.mtime&&!this.noMtime&&(n++,Fn.utimes(e.absolute,e.atime||new Date,e.mtime,u)),this[d2](e)&&(n++,Fn.chown(e.absolute,this[m2](e),this[y2](e),u)),u()})}[dpe](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[hpe](e,r){this[vk](e,e.linkpath,"symlink",r)}[gpe](e,r){let o=ml(Gf.resolve(this.cwd,e.linkpath));this[vk](e,o,"link",r)}[ype](){this[Ik]++}[eE](){this[Ik]--,this[Q_]()}[N_](e){this[eE](),e.resume()}[R_](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!C2}[F_](e){this[ype]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,o=>this[ppe](e,o))}[Bk](e){e.type==="SymbolicLink"?Mct(this.dirCache):e.type!=="Directory"&&Oct(this.dirCache,e.absolute)}[ppe](e,r){this[Bk](e);let o=A=>{this[Bk](e),r(A)},a=()=>{this[xh](this.cwd,this.dmode,A=>{if(A){this[Po](A,e),o();return}this[E2]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let A=ml(Gf.dirname(e.absolute));if(A!==this.cwd)return this[xh](A,this.dmode,p=>{if(p){this[Po](p,e),o();return}u()})}u()},u=()=>{Fn.lstat(e.absolute,(A,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[N_](e),o();return}if(A||this[R_](e,p))return this[nc](null,e,o);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,E=w=>this[nc](w,e,o);return h?Fn.chmod(e.absolute,e.mode,E):E()}if(e.absolute!==this.cwd)return Fn.rmdir(e.absolute,h=>this[nc](h,e,o))}if(e.absolute===this.cwd)return this[nc](null,e,o);Lct(e.absolute,h=>this[nc](h,e,o))})};this[E2]?n():a()}[nc](e,r,o){if(e){this[Po](e,r),o();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[T_](r,o);case"Link":return this[gpe](r,o);case"SymbolicLink":return this[hpe](r,o);case"Directory":case"GNUDumpDir":return this[L_](r,o)}}[vk](e,r,o,a){Fn[o](r,e.absolute,n=>{n?this[Po](n,e):(this[eE](),e.resume()),a()})}},wk=t=>{try{return[null,t()]}catch(e){return[e,null]}},O_=class extends I2{[nc](e,r){return super[nc](e,r,()=>{})}[F_](e){if(this[Bk](e),!this[E2]){let n=this[xh](this.cwd,this.dmode);if(n)return this[Po](n,e);this[E2]=!0}if(e.absolute!==this.cwd){let n=ml(Gf.dirname(e.absolute));if(n!==this.cwd){let u=this[xh](n,this.dmode);if(u)return this[Po](u,e)}}let[r,o]=wk(()=>Fn.lstatSync(e.absolute));if(o&&(this.keep||this.newer&&o.mtime>e.mtime))return this[N_](e);if(r||this[R_](e,o))return this[nc](null,e);if(o.isDirectory()){if(e.type==="Directory"){let u=!this.noChmod&&e.mode&&(o.mode&4095)!==e.mode,[A]=u?wk(()=>{Fn.chmodSync(e.absolute,e.mode)}):[];return this[nc](A,e)}let[n]=wk(()=>Fn.rmdirSync(e.absolute));this[nc](n,e)}let[a]=e.absolute===this.cwd?[]:wk(()=>Nct(e.absolute));this[nc](a,e)}[T_](e,r){let o=e.mode&4095||this.fmode,a=A=>{let p;try{Fn.closeSync(n)}catch(h){p=h}(A||p)&&this[Po](A||p,e),r()},n;try{n=Fn.openSync(e.absolute,Bpe(e.size),o)}catch(A){return a(A)}let u=this.transform&&this.transform(e)||e;u!==e&&(u.on("error",A=>this[Po](A,e)),e.pipe(u)),u.on("data",A=>{try{Fn.writeSync(n,A,0,A.length)}catch(p){a(p)}}),u.on("end",A=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,E=e.mtime;try{Fn.futimesSync(n,h,E)}catch(w){try{Fn.utimesSync(e.absolute,h,E)}catch{p=w}}}if(this[d2](e)){let h=this[m2](e),E=this[y2](e);try{Fn.fchownSync(n,h,E)}catch(w){try{Fn.chownSync(e.absolute,h,E)}catch{p=p||w}}}a(p)})}[L_](e,r){let o=e.mode&4095||this.dmode,a=this[xh](e.absolute,o);if(a){this[Po](a,e),r();return}if(e.mtime&&!this.noMtime)try{Fn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[d2](e))try{Fn.chownSync(e.absolute,this[m2](e),this[y2](e))}catch{}r(),e.resume()}[xh](e,r){try{return Ipe.sync(ml(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(o){return o}}[vk](e,r,o,a){try{Fn[o+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[Po](n,e)}}};I2.Sync=O_;vpe.exports=I2});var bpe=_((lUt,xpe)=>{"use strict";var Uct=Fy(),Dk=M_(),Spe=ve("fs"),Ppe=Jy(),Dpe=ve("path"),U_=_y();xpe.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 o=Uct(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&_ct(o,e),o.file&&o.sync?Hct(o):o.file?qct(o,r):o.sync?jct(o):Gct(o)};var _ct=(t,e)=>{let r=new Map(e.map(n=>[U_(n),!0])),o=t.filter,a=(n,u)=>{let A=u||Dpe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(Dpe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(U_(n)):n=>a(U_(n))},Hct=t=>{let e=new Dk.Sync(t),r=t.file,o=Spe.statSync(r),a=t.maxReadSize||16*1024*1024;new Ppe.ReadStreamSync(r,{readSize:a,size:o.size}).pipe(e)},qct=(t,e)=>{let r=new Dk(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("close",u),Spe.stat(a,(p,h)=>{if(p)A(p);else{let E=new Ppe.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},jct=t=>new Dk.Sync(t),Gct=t=>new Dk(t)});var kpe=_(us=>{"use strict";us.c=us.create=Afe();us.r=us.replace=C_();us.t=us.list=pk();us.u=us.update=Cfe();us.x=us.extract=bpe();us.Pack=Zb();us.Unpack=M_();us.Parse=fk();us.ReadEntry=Lb();us.WriteEntry=J3();us.Header=Uy();us.Pax=Ob();us.types=Q3()});var __,Qpe,bh,w2,B2,Fpe=It(()=>{__=et(lg()),Qpe=ve("worker_threads"),bh=Symbol("kTaskInfo"),w2=class{constructor(e,r){this.fn=e;this.limit=(0,__.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},B2=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,__.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let o=this.workers.pop();o?o.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new Qpe.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[bh])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[bh].resolve(r),e[bh]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[bh]?.reject(r),e[bh]=null}),e.on("exit",r=>{r!==0&&e[bh]?.reject(new Error(`Worker exited with code ${r}`)),e[bh]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((o,a)=>{r[bh]={resolve:o,reject:a},r.postMessage(e)})})}}});var Tpe=_((fUt,Rpe)=>{var H_;Rpe.exports.getContent=()=>(typeof H_>"u"&&(H_=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),H_)});var $i={};Vt($i,{convertToZip:()=>Kct,convertToZipWorker:()=>G_,extractArchiveTo:()=>Upe,getDefaultTaskPool:()=>Ope,getTaskPoolForConfiguration:()=>Mpe,makeArchiveFromDirectory:()=>Vct});function Wct(t,e){switch(t){case"async":return new w2(G_,{poolSize:e});case"workers":return new B2((0,j_.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function Ope(){return typeof q_>"u"&&(q_=Wct("workers",Xi.availableParallelism())),q_}function Mpe(t){return typeof t>"u"?Ope():Al(Yct,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new w2(G_,{poolSize:r});case"workers":return new B2((0,j_.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function G_(t){let{tmpFile:e,tgz:r,compressionLevel:o,extractBufferOpts:a}=t,n=new Zi(e,{create:!0,level:o,stats:wa.makeDefaultStats()}),u=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await Upe(u,n,a),n.saveAndClose(),e}async function Vct(t,{baseFs:e=new _n,prefixPath:r=Bt.root,compressionLevel:o,inMemory:a=!1}={}){let n;if(a)n=new Zi(null,{level:o});else{let A=await ae.mktempPromise(),p=V.join(A,"archive.zip");n=new Zi(p,{create:!0,level:o})}let u=V.resolve(Bt.root,r);return await n.copyPromise(u,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function Kct(t,e={}){let r=await ae.mktempPromise(),o=V.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??Mpe(e.configuration)).run({tmpFile:o,tgz:t,compressionLevel:a,extractBufferOpts:n}),new Zi(o,{level:e.compressionLevel})}async function*Jct(t){let e=new Npe.default.Parse,r=new Lpe.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",o=>{r.write(o)}),e.on("error",o=>{r.destroy(o)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let o of r){let a=o;yield a,a.resume()}}async function Upe(t,e,{stripComponents:r=0,prefixPath:o=Bt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let u=n.path.split(/\//g);return!!(u.some(A=>A==="..")||u.length<=r)}for await(let n of Jct(t)){if(a(n))continue;let u=V.normalize(Ae.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(u.length<=r)continue;let A=u.slice(r).join("/"),p=V.join(o,A),h=420;switch((n.type==="Directory"||(n.mode??0)&73)&&(h|=73),n.type){case"Directory":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[Si.SAFE_TIME,Si.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,Si.SAFE_TIME,Si.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[Si.SAFE_TIME,Si.SAFE_TIME]}),e.writeFileSync(p,await Xm(n),{mode:h}),e.utimesSync(p,Si.SAFE_TIME,Si.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(V.dirname(p),{chmod:493,utimes:[Si.SAFE_TIME,Si.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,Si.SAFE_TIME,Si.SAFE_TIME);break}}return e}var Lpe,Npe,j_,q_,Yct,_pe=It(()=>{Ve();St();sA();Lpe=ve("stream"),Npe=et(kpe());Fpe();Gl();j_=et(Tpe());Yct=new WeakMap});var qpe=_((W_,Hpe)=>{(function(t,e){typeof W_=="object"?Hpe.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(W_,function(){function t(a,n){var u=n?"\u2514":"\u251C";return a?u+="\u2500 ":u+="\u2500\u2500\u2510",u}function e(a,n){var u=[];for(var A in a)a.hasOwnProperty(A)&&(n&&typeof a[A]=="function"||u.push(A));return u}function r(a,n,u,A,p,h,E){var w="",D=0,b,C,T=A.slice(0);if(T.push([n,u])&&A.length>0&&(A.forEach(function(U,J){J>0&&(w+=(U[1]?" ":"\u2502")+" "),!C&&U[0]===n&&(C=!0)}),w+=t(a,u)+a,p&&(typeof n!="object"||n instanceof Date)&&(w+=": "+n),C&&(w+=" (circular ref.)"),E(w)),!C&&typeof n=="object"){var N=e(n,h);N.forEach(function(U){b=++D===N.length,r(U,n[U],b,T,p,h,E)})}}var o={};return o.asLines=function(a,n,u,A){var p=typeof u!="function"?u:!1;r(".",a,!1,[],n,p,A||u)},o.asTree=function(a,n,u){var A="";return r(".",a,!1,[],n,u,function(p){A+=p+` +`}),A},o})});var As={};Vt(As,{emitList:()=>zct,emitTree:()=>Ype,treeNodeToJson:()=>Wpe,treeNodeToTreeify:()=>Gpe});function Gpe(t,{configuration:e}){let r={},o=0,a=(n,u)=>{let A=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of A){if(!h)continue;let{label:E,value:w,children:D}=h,b=[];typeof E<"u"&&b.push(Cg(e,E,2)),typeof w<"u"&&b.push(Ut(e,w[0],w[1])),b.length===0&&b.push(Cg(e,`${p}`,2));let C=b.join(": ").trim(),T=`\0${o++}\0`,N=u[`${T}${C}`]={};typeof D<"u"&&a(D,N)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function Wpe(t){let e=r=>{if(typeof r.children>"u"){if(typeof r.value>"u")throw new Error("Assertion failed: Expected a value to be set if the children are missing");return Ig(r.value[0],r.value[1])}let o=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,u]of o)u&&(a[Xct(n)]=e(u));return typeof r.value>"u"?a:{value:Ig(r.value[0],r.value[1]),children:a}};return e(t)}function zct(t,{configuration:e,stdout:r,json:o}){let a=t.map(n=>({value:n}));Ype({children:a},{configuration:e,stdout:r,json:o})}function Ype(t,{configuration:e,stdout:r,json:o,separators:a=0}){if(o){let u=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let A of u)A&&r.write(`${JSON.stringify(Wpe(A))} +`);return}let n=(0,jpe.asTree)(Gpe(t,{configuration:e}),!1,!1);if(n=n.replace(/\0[0-9]+\0/g,""),a>=1&&(n=n.replace(/^([├└]─)/gm,`\u2502 +$1`).replace(/^│\n/,"")),a>=2)for(let u=0;u<2;++u)n=n.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3 \u2502 +$2`).replace(/^│\n/,"");if(a>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(n)}function Xct(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var jpe,Vpe=It(()=>{jpe=et(qpe());Wl()});function v2(t){let e=t.match(Zct);if(!e?.groups)throw new Error("Assertion failed: Expected the checksum to match the requested pattern");let r=e.groups.cacheVersion?parseInt(e.groups.cacheVersion):null;return{cacheKey:e.groups.cacheKey??null,cacheVersion:r,cacheSpec:e.groups.cacheSpec??null,hash:e.groups.hash}}var Kpe,Y_,V_,Sk,Wr,Zct,K_=It(()=>{Ve();St();St();sA();Kpe=ve("crypto"),Y_=et(ve("fs"));Kl();ah();Gl();Io();V_=Zm(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),Sk=Zm(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Wr=class t{constructor(e,{configuration:r,immutable:o=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,Kpe.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=o,this.check=a;let{cacheSpec:n,cacheKey:u}=t.getCacheKey(r);this.cacheSpec=n,this.cacheKey=u}static async find(e,{immutable:r,check:o}={}){let a=new t(e.get("cacheFolder"),{configuration:e,immutable:r,check:o});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),o=r!=="mixed"?`c${r}`:"";return{cacheKey:[Sk,o].join(""),cacheSpec:o}}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`${ly(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=v2(r).hash.slice(0,10);return`${ly(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:o}=v2(e);if(r===null||r{let he=new Zi,De=V.join(Bt.root,_M(e));return he.mkdirSync(De,{recursive:!0}),he.writeJsonSync(V.join(De,mr.manifest),{name:rn(e),mocked:!0}),he},E=async(he,{isColdHit:De,controlPath:Ee=null})=>{if(Ee===null&&u.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!De?v2(r).cacheKey:this.cacheKey,me=!u.skipIntegrityCheck||!r?`${g}/${await fx(he)}`:r;if(Ee!==null){let fe=!u.skipIntegrityCheck||!r?`${this.cacheKey}/${await fx(Ee)}`:r;if(me!==fe)throw new Jt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let Ce=null;switch(r!==null&&me!==r&&(this.check?Ce="throw":v2(r).cacheKey!==v2(me).cacheKey?Ce="update":Ce=this.configuration.get("checksumBehavior")),Ce){case null:case"update":return{isValid:!0,hash:me};case"ignore":return{isValid:!0,hash:r};case"reset":return{isValid:!1,hash:r};default:case"throw":throw new Jt(18,"The remote archive doesn't match the expected checksum")}},w=async he=>{if(!n)throw new Error(`Cache check required but no loader configured for ${jr(this.configuration,e)}`);let De=await n(),Ee=De.getRealPath();De.saveAndClose(),await ae.chmodPromise(Ee,420);let g=await E(he,{controlPath:Ee,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},D=async()=>{if(A===null||!await ae.existsPromise(A)){let he=await n(),De=he.getRealPath();return he.saveAndClose(),{source:"loader",path:De}}return{source:"mirror",path:A}},b=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${jr(this.configuration,e)}`);if(this.immutable)throw new Jt(56,`Cache entry required but missing for ${jr(this.configuration,e)}`);let{path:he,source:De}=await D(),{hash:Ee}=await E(he,{isColdHit:!0}),g=this.getLocatorPath(e,Ee),me=[];De!=="mirror"&&A!==null&&me.push(async()=>{let fe=`${A}${this.cacheId}`;await ae.copyFilePromise(he,fe,Y_.default.constants.COPYFILE_FICLONE),await ae.chmodPromise(fe,420),await ae.renamePromise(fe,A)}),(!u.mirrorWriteOnly||A===null)&&me.push(async()=>{let fe=`${g}${this.cacheId}`;await ae.copyFilePromise(he,fe,Y_.default.constants.COPYFILE_FICLONE),await ae.chmodPromise(fe,420),await ae.renamePromise(fe,g)});let Ce=u.mirrorWriteOnly?A??g:g;return await Promise.all(me.map(fe=>fe())),[!1,Ce,Ee]},C=async()=>{let De=(async()=>{let Ee=u.unstablePackages?.has(e.locatorHash),g=Ee||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,me=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,Ce=!!u.mockedPackages?.has(e.locatorHash)&&(!this.check||!me),fe=Ce||me,ie=fe?o:a;if(ie&&ie(),fe){let Z=null,Se=g;if(!Ce)if(this.check)Z=await w(Se);else{let Re=await E(Se,{isColdHit:!1});if(Re.isValid)Z=Re.hash;else return b()}return[Ce,Se,Z]}else{if(this.immutable&&Ee)throw new Jt(56,`Cache entry required but missing for ${jr(this.configuration,e)}; consider defining ${pe.pretty(this.configuration,"supportedArchitectures",pe.Type.CODE)} to cache packages for multiple systems`);return b()}})();this.mutexes.set(e.locatorHash,De);try{return await De}finally{this.mutexes.delete(e.locatorHash)}};for(let he;he=this.mutexes.get(e.locatorHash);)await he;let[T,N,U]=await C();T||this.markedFiles.add(N);let J,te=T?()=>h():()=>new Zi(N,{baseFs:p,readOnly:!0}),le=new Am(()=>rO(()=>J=te(),he=>`Failed to open the cache entry for ${jr(this.configuration,e)}: ${he}`),V),ce=new ju(N,{baseFs:le,pathUtils:V}),ue=()=>{J?.discardAndClose()},Ie=u.unstablePackages?.has(e.locatorHash)?null:U;return[ce,ue,Ie]}},Zct=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var Pk,Jpe=It(()=>{Pk=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(Pk||{})});var $ct,tE,J_=It(()=>{St();Ol();bf();Io();$ct=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,o)=>`${r}#commit=${o}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^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?:\/\/[^/]+\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>mx({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],tE=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let o=V.join(e.cwd,mr.lockfile);if(!ae.existsSync(o))return;let a=await ae.readFilePromise(o,"utf8"),n=Vi(a);if(Object.hasOwn(n,"__metadata"))return;let u=this.resolutions=new Map;for(let A of Object.keys(n)){let p=v1(A);if(!p){r.reportWarning(14,`Failed to parse the string "${A}" into a proper descriptor`);continue}let h=Fa(p.range)?kn(p,`npm:${p.range}`):p,{version:E,resolved:w}=n[A];if(!w)continue;let D;for(let[C,T]of $ct){let N=w.match(C);if(N){D=T(E,...N);break}}if(!D){r.reportWarning(14,`${Jn(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${w}")`);continue}let b=h;try{let C=vg(h.range),T=v1(C.selector,!0);T&&(b=T)}catch{}u.set(h.descriptorHash,Ps(b,D))}}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,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let a=this.resolutions.get(e.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");let n=NM(a),u=o.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(u,r,o)}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var pA,zpe=It(()=>{Kl();n2();Wl();pA=class extends Ws{constructor({configuration:r,stdout:o,suggestInstall:a=!0}){super();this.errorCount=0;g1(this,{configuration:r}),this.configuration=r,this.stdout=o,this.suggestInstall=a}static async start(r,o){let a=new this(r);try{await o(a)}catch(n){a.reportExceptionOnce(n)}finally{await a.finalize()}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(r){}reportCacheMiss(r){}startSectionSync(r,o){return o()}async startSectionPromise(r,o){return await o()}startTimerSync(r,o,a){return(typeof o=="function"?o:a)()}async startTimerPromise(r,o,a){return await(typeof o=="function"?o:a)()}reportSeparator(){}reportInfo(r,o){}reportWarning(r,o){}reportError(r,o){this.errorCount+=1,this.stdout.write(`${Ut(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${o} +`)}reportProgress(r){return{...Promise.resolve().then(async()=>{for await(let{}of r);}),stop:()=>{}}}reportJson(r){}reportFold(r,o){}async finalize(){this.errorCount>0&&(this.stdout.write(` +`),this.stdout.write(`${Ut(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. +`),this.suggestInstall&&this.stdout.write(`${Ut(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. +`))}formatNameWithHyperlink(r){return r3(r,{configuration:this.configuration,json:!1})}}});var rE,z_=It(()=>{Io();rE=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(hx(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,o){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){let a=o.project.storedResolutions.get(e.descriptorHash);if(a){let u=o.project.originalPackages.get(a);if(u)return[u]}let n=o.project.originalPackages.get(hx(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.originalPackages.get(e.locatorHash);if(!o)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return o}}});function Wf(){}function eut(t,e,r,o,a){for(var n=0,u=e.length,A=0,p=0;nb.length?T:b}),h.value=t.join(E)}else h.value=t.join(r.slice(A,A+h.count));A+=h.count,h.added||(p+=h.count)}}var D=e[u-1];return u>1&&typeof D.value=="string"&&(D.added||D.removed)&&t.equals("",D.value)&&(e[u-2].value+=D.value,e.pop()),e}function tut(t){return{newPos:t.newPos,components:t.components.slice(0)}}function rut(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}function $pe(t,e,r){return r=rut(r,{ignoreWhitespace:!0}),t8.diff(t,e,r)}function nut(t,e,r){return r8.diff(t,e,r)}function xk(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?xk=function(e){return typeof e}:xk=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},xk(t)}function X_(t){return out(t)||aut(t)||lut(t)||cut()}function out(t){if(Array.isArray(t))return Z_(t)}function aut(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function lut(t,e){if(t){if(typeof t=="string")return Z_(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Z_(t,e)}}function Z_(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r"u"&&(u.context=4);var A=nut(r,o,u);if(!A)return;A.push({value:"",lines:[]});function p(U){return U.map(function(J){return" "+J})}for(var h=[],E=0,w=0,D=[],b=1,C=1,T=function(J){var te=A[J],le=te.lines||te.value.replace(/\n$/,"").split(` +`);if(te.lines=le,te.added||te.removed){var ce;if(!E){var ue=A[J-1];E=b,w=C,ue&&(D=u.context>0?p(ue.lines.slice(-u.context)):[],E-=D.length,w-=D.length)}(ce=D).push.apply(ce,X_(le.map(function(fe){return(te.added?"+":"-")+fe}))),te.added?C+=le.length:b+=le.length}else{if(E)if(le.length<=u.context*2&&J=A.length-2&&le.length<=u.context){var g=/\n$/.test(r),me=/\n$/.test(o),Ce=le.length==0&&D.length>Ee.oldLines;!g&&Ce&&r.length>0&&D.splice(Ee.oldLines,0,"\\ No newline at end of file"),(!g&&!Ce||!me)&&D.push("\\ No newline at end of file")}h.push(Ee),E=0,w=0,D=[]}b+=le.length,C+=le.length}},N=0;N{Wf.prototype={diff:function(e,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=o.callback;typeof o=="function"&&(a=o,o={}),this.options=o;var n=this;function u(T){return a?(setTimeout(function(){a(void 0,T)},0),!0):T}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var A=r.length,p=e.length,h=1,E=A+p;o.maxEditLength&&(E=Math.min(E,o.maxEditLength));var w=[{newPos:-1,components:[]}],D=this.extractCommon(w[0],r,e,0);if(w[0].newPos+1>=A&&D+1>=p)return u([{value:this.join(r),count:r.length}]);function b(){for(var T=-1*h;T<=h;T+=2){var N=void 0,U=w[T-1],J=w[T+1],te=(J?J.newPos:0)-T;U&&(w[T-1]=void 0);var le=U&&U.newPos+1=A&&te+1>=p)return u(eut(n,N.components,r,e,n.useLongestToken));w[T]=N}h++}if(a)(function T(){setTimeout(function(){if(h>E)return a();b()||T()},0)})();else for(;h<=E;){var C=b();if(C)return C}},pushComponent:function(e,r,o){var a=e[e.length-1];a&&a.added===r&&a.removed===o?e[e.length-1]={count:a.count+1,added:r,removed:o}:e.push({count:1,added:r,removed:o})},extractCommon:function(e,r,o,a){for(var n=r.length,u=o.length,A=e.newPos,p=A-a,h=0;A+1"u"?r:u}:o;return typeof t=="string"?t:JSON.stringify($_(t,null,null,a),a," ")};D2.equals=function(t,e){return Wf.prototype.equals.call(D2,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};e8=new Wf;e8.tokenize=function(t){return t.slice()};e8.join=e8.removeEmpty=function(t){return t}});var rhe=_((HUt,the)=>{var Aut=jl(),fut=fy(),put=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,hut=/^\w*$/;function gut(t,e){if(Aut(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||fut(t)?!0:hut.test(t)||!put.test(t)||e!=null&&t in Object(e)}the.exports=gut});var she=_((qUt,ihe)=>{var nhe=mP(),dut="Expected a function";function i8(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(dut);var r=function(){var o=arguments,a=e?e.apply(this,o):o[0],n=r.cache;if(n.has(a))return n.get(a);var u=t.apply(this,o);return r.cache=n.set(a,u)||n,u};return r.cache=new(i8.Cache||nhe),r}i8.Cache=nhe;ihe.exports=i8});var ahe=_((jUt,ohe)=>{var mut=she(),yut=500;function Eut(t){var e=mut(t,function(o){return r.size===yut&&r.clear(),o}),r=e.cache;return e}ohe.exports=Eut});var s8=_((GUt,lhe)=>{var Cut=ahe(),Iut=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,wut=/\\(\\)?/g,But=Cut(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(Iut,function(r,o,a,n){e.push(a?n.replace(wut,"$1"):o||r)}),e});lhe.exports=But});var Wg=_((WUt,che)=>{var vut=jl(),Dut=rhe(),Sut=s8(),Put=t2();function xut(t,e){return vut(t)?t:Dut(t,e)?[t]:Sut(Put(t))}che.exports=xut});var nE=_((YUt,uhe)=>{var but=fy(),kut=1/0;function Qut(t){if(typeof t=="string"||but(t))return t;var e=t+"";return e=="0"&&1/t==-kut?"-0":e}uhe.exports=Qut});var bk=_((VUt,Ahe)=>{var Fut=Wg(),Rut=nE();function Tut(t,e){e=Fut(e,t);for(var r=0,o=e.length;t!=null&&r{var Lut=RP(),Nut=Wg(),Out=n1(),fhe=cl(),Mut=nE();function Uut(t,e,r,o){if(!fhe(t))return t;e=Nut(e,t);for(var a=-1,n=e.length,u=n-1,A=t;A!=null&&++a{var _ut=bk(),Hut=o8(),qut=Wg();function jut(t,e,r){for(var o=-1,a=e.length,n={};++o{function Gut(t,e){return t!=null&&e in Object(t)}dhe.exports=Gut});var a8=_((XUt,yhe)=>{var Wut=Wg(),Yut=e1(),Vut=jl(),Kut=n1(),Jut=wP(),zut=nE();function Xut(t,e,r){e=Wut(e,t);for(var o=-1,a=e.length,n=!1;++o{var Zut=mhe(),$ut=a8();function eAt(t,e){return t!=null&&$ut(t,e,Zut)}Ehe.exports=eAt});var whe=_(($Ut,Ihe)=>{var tAt=ghe(),rAt=Che();function nAt(t,e){return tAt(t,e,function(r,o){return rAt(t,o)})}Ihe.exports=nAt});var She=_((e3t,Dhe)=>{var Bhe=dg(),iAt=e1(),sAt=jl(),vhe=Bhe?Bhe.isConcatSpreadable:void 0;function oAt(t){return sAt(t)||iAt(t)||!!(vhe&&t&&t[vhe])}Dhe.exports=oAt});var bhe=_((t3t,xhe)=>{var aAt=CP(),lAt=She();function Phe(t,e,r,o,a){var n=-1,u=t.length;for(r||(r=lAt),a||(a=[]);++n0&&r(A)?e>1?Phe(A,e-1,r,o,a):aAt(a,A):o||(a[a.length]=A)}return a}xhe.exports=Phe});var Qhe=_((r3t,khe)=>{var cAt=bhe();function uAt(t){var e=t==null?0:t.length;return e?cAt(t,1):[]}khe.exports=uAt});var l8=_((n3t,Fhe)=>{var AAt=Qhe(),fAt=KN(),pAt=JN();function hAt(t){return pAt(fAt(t,void 0,AAt),t+"")}Fhe.exports=hAt});var c8=_((i3t,Rhe)=>{var gAt=whe(),dAt=l8(),mAt=dAt(function(t,e){return t==null?{}:gAt(t,e)});Rhe.exports=mAt});var kk,The=It(()=>{Kl();kk=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,o){return this.resolver.bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){throw new Jt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,o,a){throw new Jt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new Jt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}}});var Ri,u8=It(()=>{Kl();Ri=class extends Ws{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,o){return(typeof r=="function"?r:o)()}async startTimerPromise(e,r,o){return await(typeof r=="function"?r:o)()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}reportFold(e,r){}async finalize(){}}});var Lhe,iE,A8=It(()=>{St();Lhe=et(ux());Ay();Dg();Wl();ah();bf();Io();iE=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await _t.tryFind(this.cwd)??new _t,this.relativeCwd=V.relative(this.project.cwd,this.cwd)||Bt.dot;let e=this.manifest.name?this.manifest.name:rA(null,`${this.computeCandidateName()}-${Ji(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=kn(e,`${ci.protocol}${this.relativeCwd}`),this.anchoredLocator=Ps(e,`${ci.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let o=await(0,Lhe.default)(r,{cwd:Ae.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});o.sort(),await o.reduce(async(a,n)=>{let u=V.resolve(this.cwd,Ae.toPortablePath(n)),A=await ae.existsPromise(V.join(u,"package.json"));await a,A&&this.workspacesCwds.add(u)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${S1(this.project.configuration,this)} (${Ut(this.project.configuration,V.join(this.cwd,mr.manifest),Ct.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),o=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(o===ci.protocol&&V.normalize(a)===this.relativeCwd||o===ci.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=Fa(a);return n?o===ci.protocol?n.test(this.manifest.version??"0.0.0"):this.project.configuration.get("enableTransparentWorkspaces")&&this.manifest.version!==null?n.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":`${V.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=_t.hardDependencies}={}){let r=new Set,o=a=>{for(let n of e)for(let u of a.manifest[n].values()){let A=this.project.tryWorkspaceByDescriptor(u);A===null||r.has(A)||(r.add(A),o(A))}};return o(this),r}getRecursiveWorkspaceDependents({dependencies:e=_t.hardDependencies}={}){let r=new Set,o=a=>{for(let n of this.project.workspaces)e.some(A=>[...n.manifest[A].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&B1(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),o(n))};return o(this),r}getRecursiveWorkspaceChildren(){let e=new Set([this]);for(let r of e)for(let o of r.workspacesCwds){let a=this.project.workspacesByCwd.get(o);a&&e.add(a)}return e.delete(this),Array.from(e)}async persistManifest(){let e={};this.manifest.exportTo(e);let r=V.join(this.cwd,_t.fileName),o=`${JSON.stringify(e,null,this.manifest.indent)} +`;await ae.changeFilePromise(r,o,{automaticNewlines:!0}),this.manifest.raw=e}}});function BAt({project:t,allDescriptors:e,allResolutions:r,allPackages:o,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:u=new Map,peerWarnings:A=[],peerRequirementNodes:p=new Map,volatileDescriptors:h=new Set}){let E=new Map,w=[],D=new Map,b=new Map,C=new Map,T=new Map,N=new Map(t.workspaces.map(ce=>{let ue=ce.anchoredLocator.locatorHash,Ie=o.get(ue);if(typeof Ie>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[ue,E1(Ie)]})),U=()=>{let ce=ae.mktempSync(),ue=V.join(ce,"stacktrace.log"),Ie=String(w.length+1).length,he=w.map((De,Ee)=>`${`${Ee+1}.`.padStart(Ie," ")} ${Qa(De)} +`).join("");throw ae.writeFileSync(ue,he),ae.detachTemp(ce),new Jt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${Ae.fromPortablePath(ue)}`)},J=ce=>{let ue=r.get(ce.descriptorHash);if(typeof ue>"u")throw new Error("Assertion failed: The resolution should have been registered");let Ie=o.get(ue);if(!Ie)throw new Error("Assertion failed: The package could not be found");return Ie},te=(ce,ue,Ie,{top:he,optional:De})=>{w.length>1e3&&U(),w.push(ue);let Ee=le(ce,ue,Ie,{top:he,optional:De});return w.pop(),Ee},le=(ce,ue,Ie,{top:he,optional:De})=>{if(De||n.delete(ue.locatorHash),a.has(ue.locatorHash))return;a.add(ue.locatorHash);let Ee=o.get(ue.locatorHash);if(!Ee)throw new Error(`Assertion failed: The package (${jr(t.configuration,ue)}) should have been registered`);let g=[],me=new Map,Ce=[],fe=[],ie=[],Z=[];for(let Re of Array.from(Ee.dependencies.values())){if(Ee.peerDependencies.has(Re.identHash)&&Ee.locatorHash!==he)continue;if(Sf(Re))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");h.delete(Re.descriptorHash);let ht=De;if(!ht){let xe=Ee.dependenciesMeta.get(rn(Re));if(typeof xe<"u"){let tt=xe.get(null);typeof tt<"u"&&tt.optional&&(ht=!0)}}let q=r.get(Re.descriptorHash);if(!q)throw new Error(`Assertion failed: The resolution (${Jn(t.configuration,Re)}) should have been registered`);let nt=N.get(q)||o.get(q);if(!nt)throw new Error(`Assertion failed: The package (${q}, resolved from ${Jn(t.configuration,Re)}) should have been registered`);if(nt.peerDependencies.size===0){te(Re,nt,new Map,{top:he,optional:ht});continue}let Le,Te,ke=new Set,Ke=new Map;Ce.push(()=>{Le=MM(Re,ue.locatorHash),Te=UM(nt,ue.locatorHash),Ee.dependencies.delete(Re.identHash),Ee.dependencies.set(Le.identHash,Le),r.set(Le.descriptorHash,Te.locatorHash),e.set(Le.descriptorHash,Le),o.set(Te.locatorHash,Te),g.push([nt,Le,Te])}),fe.push(()=>{T.set(Te.locatorHash,Ke);for(let xe of Te.peerDependencies.values()){let He=Al(me,xe.identHash,()=>{let x=Ie.get(xe.identHash)??null,I=Ee.dependencies.get(xe.identHash);return!I&&w1(ue,xe)&&(ce.identHash===ue.identHash?I=ce:(I=kn(ue,ce.range),e.set(I.descriptorHash,I),r.set(I.descriptorHash,ue.locatorHash),h.delete(I.descriptorHash),x=null)),I||(I=kn(xe,"missing:")),{subject:ue,ident:xe,provided:I,root:!x,requests:new Map,hash:`p${Ji(ue.locatorHash,xe.identHash).slice(0,5)}`}}).provided;if(He.range==="missing:"&&Te.dependencies.has(xe.identHash)){Te.peerDependencies.delete(xe.identHash);continue}Ke.set(xe.identHash,{requester:Te,descriptor:xe,meta:Te.peerDependenciesMeta.get(rn(xe)),children:new Map}),Te.dependencies.set(xe.identHash,He),Sf(He)&&Jm(C,He.descriptorHash).add(Te.locatorHash),D.set(He.identHash,He),He.range==="missing:"&&ke.add(He.identHash)}Te.dependencies=new Map(Ss(Te.dependencies,([xe,tt])=>rn(tt)))}),ie.push(()=>{if(!o.has(Te.locatorHash))return;let xe=E.get(nt.locatorHash);typeof xe=="number"&&xe>=2&&U();let tt=E.get(nt.locatorHash),He=typeof tt<"u"?tt+1:1;E.set(nt.locatorHash,He),te(Le,Te,Ke,{top:he,optional:ht}),E.set(nt.locatorHash,He-1)}),Z.push(()=>{let xe=Ee.dependencies.get(Re.identHash);if(typeof xe>"u")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let tt=r.get(xe.descriptorHash);if(typeof tt>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let He=T.get(tt);if(typeof He>"u")throw new Error("Assertion failed: Expected the peer requests to be registered");for(let x of me.values()){let I=He.get(x.ident.identHash);I&&(x.requests.set(xe.descriptorHash,I),p.set(x.hash,x),x.root||Ie.get(x.ident.identHash)?.children.set(xe.descriptorHash,I))}if(o.has(Te.locatorHash))for(let x of ke)Te.dependencies.delete(x)})}for(let Re of[...Ce,...fe])Re();let Se;do{Se=!0;for(let[Re,ht,q]of g){let nt=A1(b,Re.locatorHash),Le=Ji(...[...q.dependencies.values()].map(xe=>{let tt=xe.range!=="missing:"?r.get(xe.descriptorHash):"missing:";if(typeof tt>"u")throw new Error(`Assertion failed: Expected the resolution for ${Jn(t.configuration,xe)} to have been registered`);return tt===he?`${tt} (top)`:tt}),ht.identHash),Te=nt.get(Le);if(typeof Te>"u"){nt.set(Le,ht);continue}if(Te===ht)continue;o.delete(q.locatorHash),e.delete(ht.descriptorHash),r.delete(ht.descriptorHash),a.delete(q.locatorHash);let ke=C.get(ht.descriptorHash)||[],Ke=[Ee.locatorHash,...ke];C.delete(ht.descriptorHash);for(let xe of Ke){let tt=o.get(xe);typeof tt>"u"||(tt.dependencies.get(ht.identHash).descriptorHash!==Te.descriptorHash&&(Se=!1),tt.dependencies.set(ht.identHash,Te))}for(let xe of me.values())xe.provided.descriptorHash===ht.descriptorHash&&(xe.provided=Te)}}while(!Se);for(let Re of[...ie,...Z])Re()};for(let ce of t.workspaces){let ue=ce.anchoredLocator;h.delete(ce.anchoredDescriptor.descriptorHash),te(ce.anchoredDescriptor,ue,new Map,{top:ue.locatorHash,optional:!1})}for(let ce of p.values()){if(!ce.root)continue;let ue=o.get(ce.subject.locatorHash);if(typeof ue>"u")continue;for(let he of ce.requests.values()){let De=`p${Ji(ce.subject.locatorHash,rn(ce.ident),he.requester.locatorHash).slice(0,5)}`;u.set(De,{subject:ce.subject.locatorHash,requested:ce.ident,rootRequester:he.requester.locatorHash,allRequesters:Array.from(P1(he),Ee=>Ee.requester.locatorHash)})}let Ie=[...P1(ce)];if(ce.provided.range!=="missing:"){let he=J(ce.provided),De=he.version??"0.0.0",Ee=me=>{if(me.startsWith(ci.protocol)){if(!t.tryWorkspaceByLocator(he))return null;me=me.slice(ci.protocol.length),(me==="^"||me==="~")&&(me="*")}return me},g=!0;for(let me of Ie){let Ce=Ee(me.descriptor.range);if(Ce===null){g=!1;continue}if(!nA(De,Ce)){g=!1;let fe=`p${Ji(ce.subject.locatorHash,rn(ce.ident),me.requester.locatorHash).slice(0,5)}`;A.push({type:1,subject:ue,requested:ce.ident,requester:me.requester,version:De,hash:fe,requirementCount:Ie.length})}}if(!g){let me=Ie.map(Ce=>Ee(Ce.descriptor.range));A.push({type:3,node:ce,range:me.includes(null)?null:qM(me),hash:ce.hash})}}else{let he=!0;for(let De of Ie)if(!De.meta?.optional){he=!1;let Ee=`p${Ji(ce.subject.locatorHash,rn(ce.ident),De.requester.locatorHash).slice(0,5)}`;A.push({type:0,subject:ue,requested:ce.ident,requester:De.requester,hash:Ee})}he||A.push({type:2,node:ce,hash:ce.hash})}}}function*vAt(t){let e=new Map;if("children"in t)e.set(t,t);else for(let r of t.requests.values())e.set(r,r);for(let[r,o]of e){yield{request:r,root:o};for(let a of r.children.values())e.has(a)||e.set(a,o)}}function DAt(t,e){let r=[],o=[],a=!1;for(let n of t.peerWarnings)if(!(n.type===1||n.type===0)){if(!t.tryWorkspaceByLocator(n.node.subject)){a=!0;continue}if(n.type===3){let u=t.storedResolutions.get(n.node.provided.descriptorHash);if(typeof u>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let A=t.storedPackages.get(u);if(typeof A>"u")throw new Error("Assertion failed: Expected the package to be registered");let p=eh(vAt(n.node),({request:w,root:D})=>nA(A.version??"0.0.0",w.descriptor.range)?eh.skip:w===D?Ui(t.configuration,w.requester):`${Ui(t.configuration,w.requester)} (via ${Ui(t.configuration,D.requester)})`),h=[...P1(n.node)].length>1?"and other dependencies request":"requests",E=n.range?cy(t.configuration,n.range):Ut(t.configuration,"but they have non-overlapping ranges!","redBright");r.push(`${Ui(t.configuration,n.node.ident)} is listed by your project with version ${D1(t.configuration,A.version??"0.0.0")} (${Ut(t.configuration,n.hash,Ct.CODE)}), which doesn't satisfy what ${p} ${h} (${E}).`)}if(n.type===2){let u=n.node.requests.size>1?" and other dependencies":"";o.push(`${jr(t.configuration,n.node.subject)} doesn't provide ${Ui(t.configuration,n.node.ident)} (${Ut(t.configuration,n.hash,Ct.CODE)}), requested by ${Ui(t.configuration,n.node.requests.values().next().value.requester)}${u}.`)}}e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met by your project; run ${Ut(t.configuration,"yarn explain peer-requirements ",Ct.CODE)} for details, where ${Ut(t.configuration,"",Ct.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of Ss(r,u=>ey.default(u)))e.reportWarning(60,n);for(let n of Ss(o,u=>ey.default(u)))e.reportWarning(2,n)}),a&&e.reportWarning(86,`Some peer dependencies are incorrectly met by dependencies; run ${Ut(t.configuration,"yarn explain peer-requirements",Ct.CODE)} for details.`)}var Qk,Fk,Rk,Mhe,h8,p8,g8,Tk,yAt,EAt,Nhe,CAt,IAt,wAt,yl,f8,Lk,Ohe,Qt,Uhe=It(()=>{St();St();Ol();Gt();Qk=ve("crypto");n8();Fk=et(c8()),Rk=et(lg()),Mhe=et(ni()),h8=ve("util"),p8=et(ve("v8")),g8=et(ve("zlib"));K_();W1();J_();z_();Ay();VM();Kl();The();n2();u8();Dg();A8();vx();Wl();ah();Gl();rb();a3();bf();Io();Tk=Zm(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),yAt=3,EAt=/ *, */g,Nhe=/\/$/,CAt=32,IAt=(0,h8.promisify)(g8.default.gzip),wAt=(0,h8.promisify)(g8.default.gunzip),yl=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))(yl||{}),f8={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},Lk=(a=>(a[a.NotProvided=0]="NotProvided",a[a.NotCompatible=1]="NotCompatible",a[a.NodeNotProvided=2]="NodeNotProvided",a[a.NodeNotCompatible=3]="NodeNotCompatible",a))(Lk||{}),Ohe=t=>Ji(`${yAt}`,t),Qt=class t{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.skippedBuilds=new Set;this.lockfileLastVersion=null;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.peerWarnings=[];this.peerRequirementNodes=new Map;this.linkersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){if(!e.projectCwd)throw new it(`No project found in ${r}`);let o=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,ae.existsSync(V.join(n,mr.manifest))){o=n;break}a=V.dirname(n)}let u=new t(e.projectCwd,{configuration:e});ze.telemetry?.reportProject(u.cwd),await u.setupResolutions(),await u.setupWorkspaces(),ze.telemetry?.reportWorkspaceCount(u.workspaces.length),ze.telemetry?.reportDependencyCount(u.workspaces.reduce((C,T)=>C+T.manifest.dependencies.size+T.manifest.devDependencies.size,0));let A=u.tryWorkspaceByCwd(o);if(A)return{project:u,workspace:A,locator:A.anchoredLocator};let p=await u.findLocatorForLocation(`${o}/`,{strict:!0});if(p)return{project:u,locator:p,workspace:null};let h=Ut(e,u.cwd,Ct.PATH),E=Ut(e,V.relative(u.cwd,o),Ct.PATH),w=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,D=`- If ${h} is intended to be a project, it might be that you forgot to list ${E} in its workspace configuration.`,b=`- Finally, if ${h} is fine and you intend ${E} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new it(`The nearest package directory (${Ut(e,o,Ct.PATH)}) doesn't seem to be part of the project declared in ${Ut(e,u.cwd,Ct.PATH)}. + +${[w,D,b].join(` +`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=V.join(this.cwd,mr.lockfile),r=this.configuration.get("defaultLanguageName");if(ae.existsSync(e)){let o=await ae.readFilePromise(e,"utf8");this.lockFileChecksum=Ohe(o);let a=Vi(o);if(a.__metadata){let n=a.__metadata.version,u=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${A})`);let h=Pf(p.resolution,!0),E=new _t;E.load(p,{yamlCompatibilityMode:!0});let w=E.version,D=E.languageName||r,b=p.linkType.toUpperCase(),C=p.conditions??null,T=E.dependencies,N=E.peerDependencies,U=E.dependenciesMeta,J=E.peerDependenciesMeta,te=E.bin;if(p.checksum!=null){let ce=typeof u<"u"&&!p.checksum.includes("/")?`${u}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,ce)}let le={...h,version:w,languageName:D,linkType:b,conditions:C,dependencies:T,peerDependencies:N,dependenciesMeta:U,peerDependenciesMeta:J,bin:te};this.originalPackages.set(le.locatorHash,le);for(let ce of A.split(EAt)){let ue=lh(ce);n<=6&&(ue=this.configuration.normalizeDependency(ue),ue=kn(ue,ue.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(ue.descriptorHash,ue),this.storedResolutions.set(ue.descriptorHash,h.locatorHash)}}}else o.includes("yarn lockfile v1")&&(this.lockfileLastVersion=-1)}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,r=(0,Rk.default)(4),o=async(a,n)=>{if(e.has(n))return a;e.add(n);let u=new iE(n,{project:this});await r(()=>u.setup());let A=a.then(()=>{this.addWorkspace(u)});return Array.from(u.workspacesCwds).reduce(o,A)};await o(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${Ui(this.configuration,e.anchoredLocator)}: ${Ae.fromPortablePath(e.cwd)} conflicts with ${Ae.fromPortablePath(r.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.anchoredLocator.identHash,e)}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 o of this.workspaces)V.relative(o.cwd,e).startsWith("../")||r&&r.cwd.length>=o.cwd.length||(r=o);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>"u"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${Ui(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(ci.protocol)){let o=e.range.slice(ci.protocol.length);if(o!=="^"&&o!=="~"&&o!=="*"&&!Fa(o))return this.tryWorkspaceByCwd(o)}let r=this.tryWorkspaceByIdent(e);return r===null||(Sf(e)&&(e=C1(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${Jn(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(Jc(e)&&(e=I1(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${jr(this.configuration,e)})`);return r}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if("descriptorHash"in e){let r=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let o=new Set(this.storedResolutions.values());typeof r<"u"&&!o.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,o]of this.storedResolutions)o===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[o,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(o)}for(let o of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(o,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(o.locatorHash);let n=r.get(o.locatorHash);if(n){r.delete(o.locatorHash);for(let u of n)this.deleteDescriptor(u)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,o]of e.dependencies)Sf(o)&&e.dependencies.set(r,C1(o))}getDependencyMeta(e,r){let o={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(rn(e));if(!n)return o;let u=n.get(null);if(u&&Object.assign(o,u),r===null||!Mhe.default.valid(r))return o;for(let[A,p]of n)A!==null&&A===r&&Object.assign(o,p);return o}async findLocatorForLocation(e,{strict:r=!1}={}){let o=new Ri,a=this.configuration.getLinkers(),n={project:this,report:o};for(let u of a){let A=await u.findPackageLocator(e,n);if(A){if(r&&(await u.findPackageLocation(A,n)).replace(Nhe,"")!==e.replace(Nhe,""))continue;return A}}return null}async loadUserConfig(){let e=V.join(this.cwd,".pnp.cjs");await ae.existsPromise(e)&&vf(e).setup();let r=V.join(this.cwd,"yarn.config.cjs");return await ae.existsPromise(r)?vf(r):null}async preparePackage(e,{resolver:r,resolveOptions:o}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[u,A]of n.dependencies){let p=await this.configuration.reduceHook(E=>E.reduceDependency,A,this,n,A,{resolver:r,resolveOptions:o});if(!w1(A,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,o);n.dependencies.set(u,h)}return n}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions();let r=new Map(this.originalPackages),o=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new tE(a);await n.setup(this,{report:e.report});let u=e.lockfileOnly?[new kk(a)]:[n,a],A=new Sg([new rE(a),...u]),p=new Sg([...u]),h=this.configuration.makeFetcher(),E=e.lockfileOnly?{project:this,report:e.report,resolver:A}:{project:this,report:e.report,resolver:A,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},w=new Map,D=new Map,b=new Map,C=new Map,T=new Map,N=new Map,U=this.topLevelWorkspace.anchoredLocator,J=new Set,te=[],le=IU(),ce=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(Ws.progressViaTitle(),async ie=>{let Z=async nt=>{let Le=await zm(async()=>await A.resolve(nt,E),xe=>`${jr(this.configuration,nt)}: ${xe}`);if(!B1(nt,Le))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${jr(this.configuration,nt)} to ${jr(this.configuration,Le)})`);C.set(Le.locatorHash,Le),!r.delete(Le.locatorHash)&&!this.tryWorkspaceByLocator(Le)&&o.push(Le);let ke=await this.preparePackage(Le,{resolver:A,resolveOptions:E}),Ke=Wc([...ke.dependencies.values()].map(xe=>q(xe)));return te.push(Ke),Ke.catch(()=>{}),D.set(ke.locatorHash,ke),ke},Se=async nt=>{let Le=T.get(nt.locatorHash);if(typeof Le<"u")return Le;let Te=Promise.resolve().then(()=>Z(nt));return T.set(nt.locatorHash,Te),Te},Re=async(nt,Le)=>{let Te=await q(Le);return w.set(nt.descriptorHash,nt),b.set(nt.descriptorHash,Te.locatorHash),Te},ht=async nt=>{ie.setTitle(Jn(this.configuration,nt));let Le=this.resolutionAliases.get(nt.descriptorHash);if(typeof Le<"u")return Re(nt,this.storedDescriptors.get(Le));let Te=A.getResolutionDependencies(nt,E),ke=Object.fromEntries(await Wc(Object.entries(Te).map(async([tt,He])=>{let x=A.bindDescriptor(He,U,E),I=await q(x);return J.add(I.locatorHash),[tt,I]}))),xe=(await zm(async()=>await A.getCandidates(nt,ke,E),tt=>`${Jn(this.configuration,nt)}: ${tt}`))[0];if(typeof xe>"u")throw new Jt(82,`${Jn(this.configuration,nt)}: No candidates found`);if(e.checkResolutions){let{locators:tt}=await p.getSatisfying(nt,ke,[xe],{...E,resolver:p});if(!tt.find(He=>He.locatorHash===xe.locatorHash))throw new Jt(78,`Invalid resolution ${d1(this.configuration,nt,xe)}`)}return w.set(nt.descriptorHash,nt),b.set(nt.descriptorHash,xe.locatorHash),Se(xe)},q=nt=>{let Le=N.get(nt.descriptorHash);if(typeof Le<"u")return Le;w.set(nt.descriptorHash,nt);let Te=Promise.resolve().then(()=>ht(nt));return N.set(nt.descriptorHash,Te),Te};for(let nt of this.workspaces){let Le=nt.anchoredDescriptor;te.push(q(Le))}for(;te.length>0;){let nt=[...te];te.length=0,await Wc(nt)}});let ue=ul(r.values(),ie=>this.tryWorkspaceByLocator(ie)?ul.skip:ie);if(o.length>0||ue.length>0){let ie=new Set(this.workspaces.flatMap(nt=>{let Le=D.get(nt.anchoredLocator.locatorHash);if(!Le)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(Le.dependencies.values(),Te=>{let ke=b.get(Te.descriptorHash);if(!ke)throw new Error("Assertion failed: The resolution should have been registered");return ke})})),Z=nt=>ie.has(nt.locatorHash)?"0":"1",Se=nt=>Qa(nt),Re=Ss(o,[Z,Se]),ht=Ss(ue,[Z,Se]),q=e.report.getRecommendedLength();Re.length>0&&e.report.reportInfo(85,`${Ut(this.configuration,"+",Ct.ADDED)} ${_P(this.configuration,Re,q)}`),ht.length>0&&e.report.reportInfo(85,`${Ut(this.configuration,"-",Ct.REMOVED)} ${_P(this.configuration,ht,q)}`)}let Ie=new Set(this.resolutionAliases.values()),he=new Set(D.keys()),De=new Set,Ee=new Map,g=[],me=new Map;BAt({project:this,accessibleLocators:De,volatileDescriptors:Ie,optionalBuilds:he,peerRequirements:Ee,peerWarnings:g,peerRequirementNodes:me,allDescriptors:w,allResolutions:b,allPackages:D});for(let ie of J)he.delete(ie);for(let ie of Ie)w.delete(ie),b.delete(ie);let Ce=new Set,fe=new Set;for(let ie of D.values())ie.conditions!=null&&he.has(ie.locatorHash)&&(Ex(ie,ce)||(Ex(ie,le)&&e.report.reportWarningOnce(77,`${jr(this.configuration,ie)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Ut(this.configuration,"supportedArchitectures",Ct.SETTING)} setting`),fe.add(ie.locatorHash)),Ce.add(ie.locatorHash));this.storedResolutions=b,this.storedDescriptors=w,this.storedPackages=D,this.accessibleLocators=De,this.conditionalLocators=Ce,this.disabledLocators=fe,this.originalPackages=C,this.optionalBuilds=he,this.peerRequirements=Ee,this.peerWarnings=g,this.peerRequirementNodes=me}async fetchEverything({cache:e,report:r,fetcher:o,mode:a,persistProject:n=!0}){let u={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},A=o||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:A,report:r,cacheOptions:u},h=Array.from(new Set(Ss(this.storedResolutions.values(),[C=>{let T=this.storedPackages.get(C);if(!T)throw new Error("Assertion failed: The locator should have been registered");return Qa(T)}])));a==="update-lockfile"&&(h=h.filter(C=>!this.storedChecksums.has(C)));let E=!1,w=Ws.progressViaCounter(h.length);await r.reportProgress(w);let D=(0,Rk.default)(CAt);if(await Wc(h.map(C=>D(async()=>{let T=this.storedPackages.get(C);if(!T)throw new Error("Assertion failed: The locator should have been registered");if(Jc(T))return;let N;try{N=await A.fetch(T,p)}catch(U){U.message=`${jr(this.configuration,T)}: ${U.message}`,r.reportExceptionOnce(U),E=U;return}N.checksum!=null?this.storedChecksums.set(T.locatorHash,N.checksum):this.storedChecksums.delete(T.locatorHash),N.releaseFs&&N.releaseFs()}).finally(()=>{w.tick()}))),E)throw E;let b=n&&a!=="update-lockfile"?await this.cacheCleanup({cache:e,report:r}):null;if(r.cacheMisses.size>0||b){let T=(await Promise.all([...r.cacheMisses].map(async ue=>{let Ie=this.storedPackages.get(ue),he=this.storedChecksums.get(ue)??null,De=e.getLocatorPath(Ie,he);return(await ae.statPromise(De)).size}))).reduce((ue,Ie)=>ue+Ie,0)-(b?.size??0),N=r.cacheMisses.size,U=b?.count??0,J=`${TP(N,{zero:"No new packages",one:"A package was",more:`${Ut(this.configuration,N,Ct.NUMBER)} packages were`})} added to the project`,te=`${TP(U,{zero:"none were",one:"one was",more:`${Ut(this.configuration,U,Ct.NUMBER)} were`})} removed`,le=T!==0?` (${Ut(this.configuration,T,Ct.SIZE_DIFF)})`:"",ce=U>0?N>0?`${J}, and ${te}${le}.`:`${J}, but ${te}${le}.`:`${J}${le}.`;r.reportInfo(13,ce)}}async linkEverything({cache:e,report:r,fetcher:o,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},u=o||this.configuration.makeFetcher(),A={checksums:this.storedChecksums,project:this,cache:e,fetcher:u,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},E=new Map(p.map(Ce=>{let fe=Ce.makeInstaller(h),ie=Ce.getCustomDataKey(),Z=this.linkersCustomData.get(ie);return typeof Z<"u"&&fe.attachCustomData(Z),[Ce,fe]})),w=new Map,D=new Map,b=new Map,C=new Map(await Wc([...this.accessibleLocators].map(async Ce=>{let fe=this.storedPackages.get(Ce);if(!fe)throw new Error("Assertion failed: The locator should have been registered");return[Ce,await u.fetch(fe,A)]}))),T=[],N=new Set,U=[];for(let Ce of this.accessibleLocators){let fe=this.storedPackages.get(Ce);if(typeof fe>"u")throw new Error("Assertion failed: The locator should have been registered");let ie=C.get(fe.locatorHash);if(typeof ie>"u")throw new Error("Assertion failed: The fetch result should have been registered");let Z=[],Se=ht=>{Z.push(ht)},Re=this.tryWorkspaceByLocator(fe);if(Re!==null){let ht=[],{scripts:q}=Re.manifest;for(let Le of["preinstall","install","postinstall"])q.has(Le)&&ht.push({type:0,script:Le});try{for(let[Le,Te]of E)if(Le.supportsPackage(fe,h)&&(await Te.installPackage(fe,ie,{holdFetchResult:Se})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{Z.length===0?ie.releaseFs?.():T.push(Wc(Z).catch(()=>{}).then(()=>{ie.releaseFs?.()}))}let nt=V.join(ie.packageFs.getRealPath(),ie.prefixPath);D.set(fe.locatorHash,nt),!Jc(fe)&&ht.length>0&&b.set(fe.locatorHash,{buildDirectives:ht,buildLocations:[nt]})}else{let ht=p.find(Le=>Le.supportsPackage(fe,h));if(!ht)throw new Jt(12,`${jr(this.configuration,fe)} isn't supported by any available linker`);let q=E.get(ht);if(!q)throw new Error("Assertion failed: The installer should have been registered");let nt;try{nt=await q.installPackage(fe,ie,{holdFetchResult:Se})}finally{Z.length===0?ie.releaseFs?.():T.push(Wc(Z).then(()=>{}).then(()=>{ie.releaseFs?.()}))}w.set(fe.locatorHash,ht),D.set(fe.locatorHash,nt.packageLocation),nt.buildRequest&&nt.packageLocation&&(nt.buildRequest.skipped?(N.add(fe.locatorHash),this.skippedBuilds.has(fe.locatorHash)||U.push([fe,nt.buildRequest.explain])):b.set(fe.locatorHash,{buildDirectives:nt.buildRequest.directives,buildLocations:[nt.packageLocation]}))}}let J=new Map;for(let Ce of this.accessibleLocators){let fe=this.storedPackages.get(Ce);if(!fe)throw new Error("Assertion failed: The locator should have been registered");let ie=this.tryWorkspaceByLocator(fe)!==null,Z=async(Se,Re)=>{let ht=D.get(fe.locatorHash);if(typeof ht>"u")throw new Error(`Assertion failed: The package (${jr(this.configuration,fe)}) should have been registered`);let q=[];for(let nt of fe.dependencies.values()){let Le=this.storedResolutions.get(nt.descriptorHash);if(typeof Le>"u")throw new Error(`Assertion failed: The resolution (${Jn(this.configuration,nt)}, from ${jr(this.configuration,fe)})should have been registered`);let Te=this.storedPackages.get(Le);if(typeof Te>"u")throw new Error(`Assertion failed: The package (${Le}, resolved from ${Jn(this.configuration,nt)}) should have been registered`);let ke=this.tryWorkspaceByLocator(Te)===null?w.get(Le):null;if(typeof ke>"u")throw new Error(`Assertion failed: The package (${Le}, resolved from ${Jn(this.configuration,nt)}) should have been registered`);ke===Se||ke===null?D.get(Te.locatorHash)!==null&&q.push([nt,Te]):!ie&&ht!==null&&u1(J,Le).push(ht)}ht!==null&&await Re.attachInternalDependencies(fe,q)};if(ie)for(let[Se,Re]of E)Se.supportsPackage(fe,h)&&await Z(Se,Re);else{let Se=w.get(fe.locatorHash);if(!Se)throw new Error("Assertion failed: The linker should have been found");let Re=E.get(Se);if(!Re)throw new Error("Assertion failed: The installer should have been registered");await Z(Se,Re)}}for(let[Ce,fe]of J){let ie=this.storedPackages.get(Ce);if(!ie)throw new Error("Assertion failed: The package should have been registered");let Z=w.get(ie.locatorHash);if(!Z)throw new Error("Assertion failed: The linker should have been found");let Se=E.get(Z);if(!Se)throw new Error("Assertion failed: The installer should have been registered");await Se.attachExternalDependents(ie,fe)}let te=new Map;for(let[Ce,fe]of E){let ie=await fe.finalizeInstall();for(let Z of ie?.records??[])Z.buildRequest.skipped?(N.add(Z.locator.locatorHash),this.skippedBuilds.has(Z.locator.locatorHash)||U.push([Z.locator,Z.buildRequest.explain])):b.set(Z.locator.locatorHash,{buildDirectives:Z.buildRequest.directives,buildLocations:Z.buildLocations});typeof ie?.customData<"u"&&te.set(Ce.getCustomDataKey(),ie.customData)}if(this.linkersCustomData=te,await Wc(T),a==="skip-build")return;for(let[,Ce]of Ss(U,([fe])=>Qa(fe)))Ce(r);let le=new Set(b.keys()),ce=(0,Qk.createHash)("sha512");ce.update(process.versions.node),await this.configuration.triggerHook(Ce=>Ce.globalHashGeneration,this,Ce=>{ce.update("\0"),ce.update(Ce)});let ue=ce.digest("hex"),Ie=new Map,he=Ce=>{let fe=Ie.get(Ce.locatorHash);if(typeof fe<"u")return fe;let ie=this.storedPackages.get(Ce.locatorHash);if(typeof ie>"u")throw new Error("Assertion failed: The package should have been registered");let Z=(0,Qk.createHash)("sha512");Z.update(Ce.locatorHash),Ie.set(Ce.locatorHash,"");for(let Se of ie.dependencies.values()){let Re=this.storedResolutions.get(Se.descriptorHash);if(typeof Re>"u")throw new Error(`Assertion failed: The resolution (${Jn(this.configuration,Se)}) should have been registered`);let ht=this.storedPackages.get(Re);if(typeof ht>"u")throw new Error("Assertion failed: The package should have been registered");Z.update(he(ht))}return fe=Z.digest("hex"),Ie.set(Ce.locatorHash,fe),fe},De=(Ce,fe)=>{let ie=(0,Qk.createHash)("sha512");ie.update(ue),ie.update(he(Ce));for(let Z of fe)ie.update(Z);return ie.digest("hex")},Ee=new Map,g=!1,me=Ce=>{let fe=new Set([Ce.locatorHash]);for(let ie of fe){let Z=this.storedPackages.get(ie);if(!Z)throw new Error("Assertion failed: The package should have been registered");for(let Se of Z.dependencies.values()){let Re=this.storedResolutions.get(Se.descriptorHash);if(!Re)throw new Error(`Assertion failed: The resolution (${Jn(this.configuration,Se)}) should have been registered`);if(Re!==Ce.locatorHash&&le.has(Re))return!1;let ht=this.storedPackages.get(Re);if(!ht)throw new Error("Assertion failed: The package should have been registered");let q=this.tryWorkspaceByLocator(ht);if(q){if(q.anchoredLocator.locatorHash!==Ce.locatorHash&&le.has(q.anchoredLocator.locatorHash))return!1;fe.add(q.anchoredLocator.locatorHash)}fe.add(Re)}}return!0};for(;le.size>0;){let Ce=le.size,fe=[];for(let ie of le){let Z=this.storedPackages.get(ie);if(!Z)throw new Error("Assertion failed: The package should have been registered");if(!me(Z))continue;let Se=b.get(Z.locatorHash);if(!Se)throw new Error("Assertion failed: The build directive should have been registered");let Re=De(Z,Se.buildLocations);if(this.storedBuildState.get(Z.locatorHash)===Re){Ee.set(Z.locatorHash,Re),le.delete(ie);continue}g||(await this.persistInstallStateFile(),g=!0),this.storedBuildState.has(Z.locatorHash)?r.reportInfo(8,`${jr(this.configuration,Z)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${jr(this.configuration,Z)} must be built because it never has been before or the last one failed`);let ht=Se.buildLocations.map(async q=>{if(!V.isAbsolute(q))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${q})`);for(let nt of Se.buildDirectives){let Le=`# This file contains the result of Yarn building a package (${Qa(Z)}) +`;switch(nt.type){case 0:Le+=`# Script name: ${nt.script} +`;break;case 1:Le+=`# Script code: ${nt.script} +`;break}let Te=null;if(!await ae.mktempPromise(async Ke=>{let xe=V.join(Ke,"build.log"),{stdout:tt,stderr:He}=this.configuration.getSubprocessStreams(xe,{header:Le,prefix:jr(this.configuration,Z),report:r}),x;try{switch(nt.type){case 0:x=await Db(Z,nt.script,[],{cwd:q,project:this,stdin:Te,stdout:tt,stderr:He});break;case 1:x=await n3(Z,nt.script,[],{cwd:q,project:this,stdin:Te,stdout:tt,stderr:He});break}}catch(y){He.write(y.stack),x=1}if(tt.end(),He.end(),x===0)return!0;ae.detachTemp(Ke);let I=`${jr(this.configuration,Z)} couldn't be built successfully (exit code ${Ut(this.configuration,x,Ct.NUMBER)}, logs can be found here: ${Ut(this.configuration,xe,Ct.PATH)})`,P=this.optionalBuilds.has(Z.locatorHash);return P?r.reportInfo(9,I):r.reportError(9,I),Nue&&r.reportFold(Ae.fromPortablePath(xe),ae.readFileSync(xe,"utf8")),P}))return!1}return!0});fe.push(...ht,Promise.allSettled(ht).then(q=>{le.delete(ie),q.every(nt=>nt.status==="fulfilled"&&nt.value===!0)&&Ee.set(Z.locatorHash,Re)}))}if(await Wc(fe),Ce===le.size){let ie=Array.from(le).map(Z=>{let Se=this.storedPackages.get(Z);if(!Se)throw new Error("Assertion failed: The package should have been registered");return jr(this.configuration,Se)}).join(", ");r.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ie})`);break}}this.storedBuildState=Ee,this.skippedBuilds=N}async installWithNewReport(e,r){return(await Lt.start({configuration:this.configuration,json:e.json,stdout:e.stdout,forceSectionAlignment:!0,includeLogs:!e.json&&!e.quiet,includeVersion:!0},async a=>{await this.install({...r,report:a})})).exitCode()}async install(e){let r=this.configuration.get("nodeLinker");ze.telemetry?.reportInstall(r);let o=!1;if(await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{this.configuration.get("enableOfflineMode")&&e.report.reportWarning(90,"Offline work is enabled; Yarn won't fetch packages from the remote registry if it can avoid it"),await this.configuration.triggerHook(E=>E.validateProject,this,{reportWarning:(E,w)=>{e.report.reportWarning(E,w)},reportError:(E,w)=>{e.report.reportError(E,w),o=!0}})}),o)return;let a=await this.configuration.getPackageExtensions();for(let E of a.values())for(let[,w]of E)for(let D of w)D.status="inactive";let n=V.join(this.cwd,mr.lockfile),u=null;if(e.immutable)try{u=await ae.readFilePromise(n,"utf8")}catch(E){throw E.code==="ENOENT"?new Jt(28,"The lockfile would have been created by this install, which is explicitly forbidden."):E}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{DAt(this,e.report);for(let[,E]of a)for(let[,w]of E)for(let D of w)if(D.userProvided){let b=Ut(this.configuration,D,Ct.PACKAGE_EXTENSION);switch(D.status){case"inactive":e.report.reportWarning(68,`${b}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case"redundant":e.report.reportWarning(69,`${b}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(u!==null){let E=G0(u,this.generateLockfile());if(E!==u){let w=ehe(n,n,u,E,void 0,void 0,{maxEditLength:100});if(w){e.report.reportSeparator();for(let D of w.hunks){e.report.reportInfo(null,`@@ -${D.oldStart},${D.oldLines} +${D.newStart},${D.newLines} @@`);for(let b of D.lines)b.startsWith("+")?e.report.reportError(28,Ut(this.configuration,b,Ct.ADDED)):b.startsWith("-")?e.report.reportError(28,Ut(this.configuration,b,Ct.REMOVED)):e.report.reportInfo(null,Ut(this.configuration,b,"grey"))}e.report.reportSeparator()}throw new Jt(28,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(let E of a.values())for(let[,w]of E)for(let D of w)D.userProvided&&D.status==="active"&&ze.telemetry?.reportPackageExtension(Ig(D,Ct.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let A=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(A.map(async E=>px(E,{cwd:this.cwd})));(typeof e.persistProject>"u"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode==="update-lockfile"){e.report.reportWarning(73,`Skipped due to ${Ut(this.configuration,"mode=update-lockfile",Ct.CODE)}`);return}await this.linkEverything(e);let E=await Promise.all(A.map(async w=>px(w,{cwd:this.cwd})));for(let w=0;w{await this.configuration.triggerHook(E=>E.validateProjectAfterInstall,this,{reportWarning:(E,w)=>{e.report.reportWarning(E,w)},reportError:(E,w)=>{e.report.reportError(E,w),h=!0}})}),!h&&await this.configuration.triggerHook(E=>E.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,u]of this.storedResolutions.entries()){let A=e.get(u);A||e.set(u,A=new Set),A.add(n)}let r={},{cacheKey:o}=Wr.getCacheKey(this.configuration);r.__metadata={version:Tk,cacheKey:o};for(let[n,u]of e.entries()){let A=this.originalPackages.get(n);if(!A)continue;let p=[];for(let w of u){let D=this.storedDescriptors.get(w);if(!D)throw new Error("Assertion failed: The descriptor should have been registered");p.push(D)}let h=p.map(w=>ka(w)).sort().join(", "),E=new _t;E.version=A.linkType==="HARD"?A.version:"0.0.0-use.local",E.languageName=A.languageName,E.dependencies=new Map(A.dependencies),E.peerDependencies=new Map(A.peerDependencies),E.dependenciesMeta=new Map(A.dependenciesMeta),E.peerDependenciesMeta=new Map(A.peerDependenciesMeta),E.bin=new Map(A.bin),r[h]={...E.exportTo({},{compatibilityMode:!1}),linkType:A.linkType.toLowerCase(),resolution:Qa(A),checksum:this.storedChecksums.get(A.locatorHash),conditions:A.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. +`,`# Manual changes might be lost - proceed with caution! +`].join("")} +`+Sa(r)}async persistLockfile(){let e=V.join(this.cwd,mr.lockfile),r="";try{r=await ae.readFilePromise(e,"utf8")}catch{}let o=this.generateLockfile(),a=G0(r,o);a!==r&&(await ae.writeFilePromise(e,a),this.lockFileChecksum=Ohe(a),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let u of Object.values(f8))e.push(...u);let r=(0,Fk.default)(this,e),o=p8.default.serialize(r),a=Ji(o);if(this.installStateChecksum===a)return;let n=this.configuration.get("installStatePath");await ae.mkdirPromise(V.dirname(n),{recursive:!0}),await ae.writeFilePromise(n,await IAt(o)),this.installStateChecksum=a}async restoreInstallState({restoreLinkersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:o=!0}={}){let a=this.configuration.get("installStatePath"),n;try{let u=await wAt(await ae.readFilePromise(a));n=p8.default.deserialize(u),this.installStateChecksum=Ji(u)}catch{r&&await this.applyLightResolution();return}e&&typeof n.linkersCustomData<"u"&&(this.linkersCustomData=n.linkersCustomData),o&&Object.assign(this,(0,Fk.default)(n,f8.restoreBuildState)),r&&(n.lockFileChecksum===this.lockFileChecksum?Object.assign(this,(0,Fk.default)(n,f8.restoreResolutions)):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new Ri}),await this.persistInstallStateFile()}async persist(){let e=(0,Rk.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(r=>e(()=>r.persistManifest()))])}async cacheCleanup({cache:e,report:r}){if(this.configuration.get("enableGlobalCache"))return null;let o=new Set([".gitignore"]);if(!n4(e.cwd,this.cwd)||!await ae.existsPromise(e.cwd))return null;let a=[];for(let u of await ae.readdirPromise(e.cwd)){if(o.has(u))continue;let A=V.resolve(e.cwd,u);e.markedFiles.has(A)||(e.immutable?r.reportError(56,`${Ut(this.configuration,V.basename(A),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(ae.lstatPromise(A).then(async p=>(await ae.removePromise(A),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((u,A)=>u+A,0)}}}});function SAt(t){let o=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),u=n+a,A=t.state.lastTips??o*864e5,p=A+864e5+8*36e5-t.timeZone,h=u<=t.timeNow,E=p<=t.timeNow,w=null;return(h||E||!t.state.lastUpdate||!t.state.lastTips)&&(w={},w.lastUpdate=h?t.timeNow:n,w.lastTips=A,w.blocks=h?{}:t.state.blocks,w.displayedTips=t.state.displayedTips),{nextState:w,triggerUpdate:h,triggerTips:E,nextTips:E?o*864e5:A}}var sE,_he=It(()=>{St();r2();ah();eb();Gl();bf();sE=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.nextTips=0;this.displayedTips=[];this.shouldCommitTips=!1;this.configuration=e;let o=this.getRegistryPath();this.isNew=!ae.existsSync(o),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),o=A=>A&&nn?nA(nn,A):!1,a=e.map((A,p)=>p).filter(A=>e[A]&&o(e[A]?.selector));if(a.length===0)return null;let n=a.filter(A=>!r.has(A));if(n.length===0){let A=Math.floor(a.length*.2);this.displayedTips=A>0?this.displayedTips.slice(-A):[],n=a.filter(p=>!r.has(p))}let u=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(u),this.commitTips(),e[u]}reportVersion(e){this.reportValue("version",e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue("commandName",e||"")}reportPluginName(e){this.reportValue("pluginName",e)}reportProject(e){this.reportEnumerator("projectCount",e)}reportInstall(e){this.reportHit("installCount",e)}reportPackageExtension(e){this.reportValue("packageExtension",e)}reportWorkspaceCount(e){this.reportValue("workspaceCount",String(e))}reportDependencyCount(e){this.reportValue("dependencyCount",String(e))}reportValue(e,r){Jm(this.values,e).add(r)}reportEnumerator(e,r){Jm(this.enumerators,e).add(Ji(r))}reportHit(e,r="*"){let o=A1(this.hits,e),a=Al(o,r,()=>0);o.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return V.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),o;try{o=ae.readJsonSync(r)}catch{o={}}let{nextState:a,triggerUpdate:n,triggerTips:u,nextTips:A}=SAt({state:o,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=A,this.displayedTips=o.displayedTips??[],a!==null)try{ae.mkdirSync(V.dirname(r),{recursive:!0}),ae.writeJsonSync(r,a)}catch{return!1}if(u&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=o.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,E=w=>CU(h,w,{configuration:this.configuration}).catch(()=>{});for(let[w,D]of Object.entries(o.blocks??{})){if(Object.keys(D).length===0)continue;let b=D;b.userId=w,b.reportType="primary";for(let N of Object.keys(b.enumerators??{}))b.enumerators[N]=b.enumerators[N].length;E(b);let C=new Map,T=20;for(let[N,U]of Object.entries(b.values))U.length>0&&C.set(N,U.slice(0,T));for(;C.size>0;){let N={};N.userId=w,N.reportType="secondary",N.metrics={};for(let[U,J]of C)N.metrics[U]=J.shift(),J.length===0&&C.delete(U);E(N)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=ae.readJsonSync(e)}catch{r={}}let o=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[o]=a[o]??{};for(let u of this.hits.keys()){let A=n.hits=n.hits??{},p=A[u]=A[u]??{};for(let[h,E]of this.hits.get(u))p[h]=(p[h]??0)+E}for(let u of["values","enumerators"])for(let A of this[u].keys()){let p=n[u]=n[u]??{};p[A]=[...new Set([...p[A]??[],...this[u].get(A)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),ae.mkdirSync(V.dirname(e),{recursive:!0}),ae.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var S2={};Vt(S2,{BuildDirectiveType:()=>Pk,CACHE_CHECKPOINT:()=>V_,CACHE_VERSION:()=>Sk,Cache:()=>Wr,Configuration:()=>ze,DEFAULT_RC_FILENAME:()=>PU,FormatType:()=>yce,InstallMode:()=>yl,LEGACY_PLUGINS:()=>j1,LOCKFILE_VERSION:()=>Tk,LegacyMigrationResolver:()=>tE,LightReport:()=>pA,LinkType:()=>$m,LockfileResolver:()=>rE,Manifest:()=>_t,MessageName:()=>vr,MultiFetcher:()=>py,PackageExtensionStatus:()=>sO,PackageExtensionType:()=>iO,PeerWarningType:()=>Lk,Project:()=>Qt,Report:()=>Ws,ReportError:()=>Jt,SettingsType:()=>G1,StreamReport:()=>Lt,TAG_REGEXP:()=>by,TelemetryManager:()=>sE,ThrowReport:()=>Ri,VirtualFetcher:()=>hy,WindowsLinkType:()=>ab,Workspace:()=>iE,WorkspaceFetcher:()=>gy,WorkspaceResolver:()=>ci,YarnVersion:()=>nn,execUtils:()=>Hr,folderUtils:()=>Bx,formatUtils:()=>pe,hashUtils:()=>bn,httpUtils:()=>on,miscUtils:()=>qe,nodeUtils:()=>Xi,parseMessageName:()=>jS,reportOptionDeprecations:()=>Qy,scriptUtils:()=>hn,semverUtils:()=>Ur,stringifyMessageName:()=>Ju,structUtils:()=>G,tgzUtils:()=>$i,treeUtils:()=>As});var Ve=It(()=>{nb();vx();Wl();ah();eb();Gl();rb();a3();bf();Io();_pe();Vpe();K_();W1();W1();Jpe();J_();zpe();z_();Ay();GS();YM();Uhe();Kl();n2();_he();u8();KM();JM();Dg();A8();r2();iie()});var Yhe=_((b_t,x2)=>{"use strict";var xAt=process.env.TERM_PROGRAM==="Hyper",bAt=process.platform==="win32",jhe=process.platform==="linux",d8={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"},Ghe=Object.assign({},d8,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),Whe=Object.assign({},d8,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:jhe?"\u25B8":"\u276F",pointerSmall:jhe?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});x2.exports=bAt&&!xAt?Ghe:Whe;Reflect.defineProperty(x2.exports,"common",{enumerable:!1,value:d8});Reflect.defineProperty(x2.exports,"windows",{enumerable:!1,value:Ghe});Reflect.defineProperty(x2.exports,"other",{enumerable:!1,value:Whe})});var eu=_((k_t,m8)=>{"use strict";var kAt=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),QAt=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,Vhe=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let u=n.open=`\x1B[${n.codes[0]}m`,A=n.close=`\x1B[${n.codes[1]}m`,p=n.regex=new RegExp(`\\u001b\\[${n.codes[1]}m`,"g");return n.wrap=(h,E)=>{h.includes(A)&&(h=h.replace(p,A+u));let w=u+h+A;return E?w.replace(/\r*\n/g,`${A}$&${u}`):w},n},r=(n,u,A)=>typeof n=="function"?n(u):n.wrap(u,A),o=(n,u)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let A=""+n,p=A.includes(` +`),h=u.length;for(h>0&&u.includes("unstyle")&&(u=[...new Set(["unstyle",...u])].reverse());h-- >0;)A=r(t.styles[u[h]],A,p);return A},a=(n,u,A)=>{t.styles[n]=e({name:n,codes:u}),(t.keys[A]||(t.keys[A]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=E=>o(E,h.stack);return Reflect.setPrototypeOf(h,t),h.stack=this.stack?this.stack.concat(n):[n],h}})};return a("reset",[0,0],"modifier"),a("bold",[1,22],"modifier"),a("dim",[2,22],"modifier"),a("italic",[3,23],"modifier"),a("underline",[4,24],"modifier"),a("inverse",[7,27],"modifier"),a("hidden",[8,28],"modifier"),a("strikethrough",[9,29],"modifier"),a("black",[30,39],"color"),a("red",[31,39],"color"),a("green",[32,39],"color"),a("yellow",[33,39],"color"),a("blue",[34,39],"color"),a("magenta",[35,39],"color"),a("cyan",[36,39],"color"),a("white",[37,39],"color"),a("gray",[90,39],"color"),a("grey",[90,39],"color"),a("bgBlack",[40,49],"bg"),a("bgRed",[41,49],"bg"),a("bgGreen",[42,49],"bg"),a("bgYellow",[43,49],"bg"),a("bgBlue",[44,49],"bg"),a("bgMagenta",[45,49],"bg"),a("bgCyan",[46,49],"bg"),a("bgWhite",[47,49],"bg"),a("blackBright",[90,39],"bright"),a("redBright",[91,39],"bright"),a("greenBright",[92,39],"bright"),a("yellowBright",[93,39],"bright"),a("blueBright",[94,39],"bright"),a("magentaBright",[95,39],"bright"),a("cyanBright",[96,39],"bright"),a("whiteBright",[97,39],"bright"),a("bgBlackBright",[100,49],"bgBright"),a("bgRedBright",[101,49],"bgBright"),a("bgGreenBright",[102,49],"bgBright"),a("bgYellowBright",[103,49],"bgBright"),a("bgBlueBright",[104,49],"bgBright"),a("bgMagentaBright",[105,49],"bgBright"),a("bgCyanBright",[106,49],"bgBright"),a("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=QAt,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,u)=>{let A=typeof u=="string"?t[u]:u;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:n}),t.styles[n]=A,A.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>o(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(A.stack):A.stack,p}})},t.theme=n=>{if(!kAt(n))throw new TypeError("Expected theme to be an object");for(let u of Object.keys(n))t.alias(u,n[u]);return t},t.alias("unstyle",n=>typeof n=="string"&&n!==""?(t.ansiRegex.lastIndex=0,n.replace(t.ansiRegex,"")):""),t.alias("noop",n=>n),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=Yhe(),t.define=a,t};m8.exports=Vhe();m8.exports.create=Vhe});var xo=_(an=>{"use strict";var FAt=Object.prototype.toString,ic=eu(),Khe=!1,y8=[],Jhe={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};an.longest=(t,e)=>t.reduce((r,o)=>Math.max(r,e?o[e].length:o.length),0);an.hasColor=t=>!!t&&ic.hasColor(t);var Ok=an.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);an.nativeType=t=>FAt.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");an.isAsyncFn=t=>an.nativeType(t)==="asyncfunction";an.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";an.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;an.scrollDown=(t=[])=>[...t.slice(1),t[0]];an.scrollUp=(t=[])=>[t.pop(),...t];an.reorder=(t=[])=>{let e=t.slice();return e.sort((r,o)=>r.index>o.index?1:r.index{let o=t.length,a=r===o?0:r<0?o-1:r,n=t[e];t[e]=t[a],t[a]=n};an.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};an.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};an.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:o=` +`+r,width:a=80}=e,n=(o+r).match(/[^\S\n]/g)||[];a-=n.length;let u=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,A=t.trim(),p=new RegExp(u,"g"),h=A.match(p)||[];return h=h.map(E=>E.replace(/\n$/,"")),e.padEnd&&(h=h.map(E=>E.padEnd(a," "))),e.padStart&&(h=h.map(E=>E.padStart(a," "))),r+h.join(o)};an.unmute=t=>{let e=t.stack.find(o=>ic.keys.color.includes(o));return e?ic[e]:t.stack.find(o=>o.slice(2)==="bg")?ic[e.slice(2)]:o=>o};an.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";an.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>ic.keys.color.includes(o));if(e){let o=ic["bg"+an.pascal(e)];return o?o.black:t}let r=t.stack.find(o=>o.slice(0,2)==="bg");return r?ic[r.slice(2).toLowerCase()]||t:ic.none};an.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>ic.keys.color.includes(o)),r=t.stack.find(o=>o.slice(0,2)==="bg");if(e&&!r)return ic[Jhe[e]||e];if(r){let o=r.slice(2).toLowerCase(),a=Jhe[o];return a&&ic["bg"+an.pascal(a)]||t}return ic.none};an.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),o=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+o};an.set=(t={},e="",r)=>e.split(".").reduce((o,a,n,u)=>{let A=u.length-1>n?o[a]||{}:r;return!an.isObject(A)&&n{let o=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return o??r};an.mixin=(t,e)=>{if(!Ok(t))return e;if(!Ok(e))return t;for(let r of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,r);if(o.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&Ok(o.value)){let a=Object.getOwnPropertyDescriptor(t,r);Ok(a.value)?t[r]=an.merge({},t[r],e[r]):Reflect.defineProperty(t,r,o)}else Reflect.defineProperty(t,r,o);else Reflect.defineProperty(t,r,o)}return t};an.merge=(...t)=>{let e={};for(let r of t)an.mixin(e,r);return e};an.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let o of Object.keys(r)){let a=r[o];typeof a=="function"?an.define(t,o,a.bind(e)):an.define(t,o,a)}};an.onExit=t=>{let e=(r,o)=>{Khe||(Khe=!0,y8.forEach(a=>a()),r===!0&&process.exit(128+o))};y8.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),y8.push(t)};an.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};an.defineExport=(t,e,r)=>{let o;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){o=a},get(){return o?o():r()}})}});var zhe=_(cE=>{"use strict";cE.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"};cE.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};cE.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};cE.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};cE.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 $he=_((R_t,Zhe)=>{"use strict";var Xhe=ve("readline"),RAt=zhe(),TAt=/^(?:\x1b)([a-zA-Z0-9])$/,LAt=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,NAt={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 OAt(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function MAt(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var Mk=(t="",e={})=>{let r,o={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="\x1B"+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=o.sequence||""),o.sequence=o.sequence||t||o.name,t==="\r")o.raw=void 0,o.name="return";else if(t===` +`)o.name="enter";else if(t===" ")o.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")o.name="backspace",o.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")o.name="escape",o.meta=t.length===2;else if(t===" "||t==="\x1B ")o.name="space",o.meta=t.length===2;else if(t<="")o.name=String.fromCharCode(t.charCodeAt(0)+97-1),o.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")o.name="number";else if(t.length===1&&t>="a"&&t<="z")o.name=t;else if(t.length===1&&t>="A"&&t<="Z")o.name=t.toLowerCase(),o.shift=!0;else if(r=TAt.exec(t))o.meta=!0,o.shift=/^[A-Z]$/.test(r[1]);else if(r=LAt.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(o.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),u=(r[3]||r[5]||1)-1;o.ctrl=!!(u&4),o.meta=!!(u&10),o.shift=!!(u&1),o.code=n,o.name=NAt[n],o.shift=OAt(n)||o.shift,o.ctrl=MAt(n)||o.ctrl}return o};Mk.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let o=Xhe.createInterface({terminal:!0,input:r});Xhe.emitKeypressEvents(r,o);let a=(A,p)=>e(A,Mk(A,p),o),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),o.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),o.pause(),o.close()}};Mk.action=(t,e,r)=>{let o={...RAt,...r};return e.ctrl?(e.action=o.ctrl[e.name],e):e.option&&o.option?(e.action=o.option[e.name],e):e.shift?(e.action=o.shift[e.name],e):(e.action=o.keys[e.name],e)};Zhe.exports=Mk});var t0e=_((T_t,e0e)=>{"use strict";e0e.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(e)for(let r of Object.keys(e)){let o=e[r];typeof o=="number"&&(o={interval:o}),UAt(t,r,o)}};function UAt(t,e,r={}){let o=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;o.frames=r.frames||[],o.loading=!0;let n=setInterval(()=>{o.ms=Date.now()-o.start,o.tick++,t.render()},a);return o.stop=()=>{o.loading=!1,clearInterval(n)},Reflect.defineProperty(o,"interval",{value:n}),t.once("close",()=>o.stop()),o.stop}});var n0e=_((L_t,r0e)=>{"use strict";var{define:_At,width:HAt}=xo(),E8=class{constructor(e){let r=e.options;_At(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=HAt(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={...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"}};r0e.exports=E8});var s0e=_((N_t,i0e)=>{"use strict";var C8=xo(),Vs=eu(),I8={default:Vs.noop,noop:Vs.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||C8.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||C8.complement(this.primary)},primary:Vs.cyan,success:Vs.green,danger:Vs.magenta,strong:Vs.bold,warning:Vs.yellow,muted:Vs.dim,disabled:Vs.gray,dark:Vs.dim.gray,underline:Vs.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}};I8.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(Vs.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(Vs.visible=t.styles.visible);let e=C8.merge({},I8,t.styles);delete e.merge;for(let r of Object.keys(Vs))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>Vs[r]});for(let r of Object.keys(Vs.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>Vs[r]});return e};i0e.exports=I8});var a0e=_((O_t,o0e)=>{"use strict";var w8=process.platform==="win32",Yf=eu(),qAt=xo(),B8={...Yf.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:Yf.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:Yf.symbols.question,submitted:Yf.symbols.check,cancelled:Yf.symbols.cross},separator:{pending:Yf.symbols.pointerSmall,submitted:Yf.symbols.middot,cancelled:Yf.symbols.middot},radio:{off:w8?"( )":"\u25EF",on:w8?"(*)":"\u25C9",disabled:w8?"(|)":"\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"]};B8.merge=t=>{let e=qAt.merge({},Yf.symbols,B8,t.symbols);return delete e.merge,e};o0e.exports=B8});var c0e=_((M_t,l0e)=>{"use strict";var jAt=s0e(),GAt=a0e(),WAt=xo();l0e.exports=t=>{t.options=WAt.merge({},t.options.theme,t.options),t.symbols=GAt.merge(t.options),t.styles=jAt.merge(t.options)}});var h0e=_((f0e,p0e)=>{"use strict";var u0e=process.env.TERM_PROGRAM==="Apple_Terminal",YAt=eu(),v8=xo(),tu=p0e.exports=f0e,Pi="\x1B[",A0e="\x07",D8=!1,kh=tu.code={bell:A0e,beep:A0e,beginning:`${Pi}G`,down:`${Pi}J`,esc:Pi,getPosition:`${Pi}6n`,hide:`${Pi}?25l`,line:`${Pi}2K`,lineEnd:`${Pi}K`,lineStart:`${Pi}1K`,restorePosition:Pi+(u0e?"8":"u"),savePosition:Pi+(u0e?"7":"s"),screen:`${Pi}2J`,show:`${Pi}?25h`,up:`${Pi}1J`},Yg=tu.cursor={get hidden(){return D8},hide(){return D8=!0,kh.hide},show(){return D8=!1,kh.show},forward:(t=1)=>`${Pi}${t}C`,backward:(t=1)=>`${Pi}${t}D`,nextLine:(t=1)=>`${Pi}E`.repeat(t),prevLine:(t=1)=>`${Pi}F`.repeat(t),up:(t=1)=>t?`${Pi}${t}A`:"",down:(t=1)=>t?`${Pi}${t}B`:"",right:(t=1)=>t?`${Pi}${t}C`:"",left:(t=1)=>t?`${Pi}${t}D`:"",to(t,e){return e?`${Pi}${e+1};${t+1}H`:`${Pi}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?Yg.left(-t):t>0?Yg.right(t):"",r+=e<0?Yg.up(-e):e>0?Yg.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:o,input:a,prompt:n,size:u,value:A}=t;if(o=v8.isPrimitive(o)?String(o):"",a=v8.isPrimitive(a)?String(a):"",A=v8.isPrimitive(A)?String(A):"",u){let p=tu.cursor.up(u)+tu.cursor.to(n.length),h=a.length-r;return h>0&&(p+=tu.cursor.left(h)),p}if(A||e){let p=!a&&o?-o.length:-a.length+r;return e&&(p-=e.length),a===""&&o&&!n.includes(o)&&(p+=o.length),tu.cursor.move(p)}}},S8=tu.erase={screen:kh.screen,up:kh.up,down:kh.down,line:kh.line,lineEnd:kh.lineEnd,lineStart:kh.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return S8.line+Yg.to(0);let r=n=>[...YAt.unstyle(n)].length,o=t.split(/\r?\n/),a=0;for(let n of o)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(S8.line+Yg.prevLine()).repeat(a-1)+S8.line+Yg.to(0)}});var uE=_((U_t,d0e)=>{"use strict";var VAt=ve("events"),g0e=eu(),P8=$he(),KAt=t0e(),JAt=n0e(),zAt=c0e(),Na=xo(),Vg=h0e(),x8=class t extends VAt{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,zAt(this),KAt(this),this.state=new JAt(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=ZAt(this.options.margin),this.setMaxListeners(0),XAt(this)}async keypress(e,r={}){this.keypressed=!0;let o=P8.action(e,P8(e,r),this.options.actions);this.state.keypress=o,this.emit("keypress",e,o),this.emit("state",this.state.clone());let a=this.options[o.action]||this[o.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,o);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Vg.code.beep)}cursorHide(){this.stdout.write(Vg.cursor.hide()),Na.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Vg.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(Vg.cursor.down(e)+Vg.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:o}=this.sections(),{cursor:a,initial:n="",input:u="",value:A=""}=this,p=this.state.size=o.length,h={after:r,cursor:a,initial:n,input:u,prompt:e,size:p,value:A},E=Vg.cursor.restore(h);E&&this.stdout.write(E)}sections(){let{buffer:e,input:r,prompt:o}=this.state;o=g0e.unstyle(o);let a=g0e.unstyle(e),n=a.indexOf(o),u=a.slice(0,n),p=a.slice(n).split(` +`),h=p[0],E=p[p.length-1],D=(o+(r?" "+r:"")).length,b=De.call(this,this.value),this.result=()=>o.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 a=r.onSubmit.bind(this),n=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await a(this.name,this.value,this),n())}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,o){let{options:a,state:n,symbols:u,timers:A}=this,p=A&&A[e];n.timer=p;let h=a[e]||n[e]||u[e],E=r&&r[e]!=null?r[e]:await h;if(E==="")return E;let w=await this.resolve(E,n,r,o);return!w&&r&&r[e]?this.resolve(h,n,r,o):w}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,o=this.state;return o.timer=r,Na.isObject(e)&&(e=e[o.status]||e.pending),Na.hasColor(e)?e:(this.styles[o.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return Na.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,o=this.state;o.timer=r;let a=e[o.status]||e.pending||o.separator,n=await this.resolve(a,o);return Na.isObject(n)&&(n=n[o.status]||n.pending),Na.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let o=await this.element("pointer",e,r);if(typeof o=="string"&&Na.hasColor(o))return o;if(o){let a=this.styles,n=this.index===r,u=n?a.primary:h=>h,A=await this.resolve(o[n?"on":"off"]||o,this.state),p=Na.hasColor(A)?A:u(A);return n?p:" ".repeat(A.length)}}async indicator(e,r){let o=await this.element("indicator",e,r);if(typeof o=="string"&&Na.hasColor(o))return o;if(o){let a=this.styles,n=e.enabled===!0,u=n?a.success:a.dark,A=o[n?"on":"off"]||o;return Na.hasColor(A)?A:u(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 Na.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 Na.resolve(this,e,...r)}get base(){return t.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||Na.height(this.stdout,25)}get width(){return this.options.columns||Na.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,o=[r,e].find(this.isValue.bind(this));return this.isValue(o)?o:this.initial}static get prompt(){return e=>new this(e).run()}};function XAt(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],o=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let a of Object.keys(t.options)){if(r.includes(a)||/^on[A-Z]/.test(a))continue;let n=t.options[a];typeof n=="function"&&e(a)?o.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function ZAt(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` +`:" ",o=[];for(let a=0;a<4;a++){let n=r(a);e[a]?o.push(n.repeat(e[a])):o.push("")}return o}d0e.exports=x8});var E0e=_((__t,y0e)=>{"use strict";var $At=xo(),m0e={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 m0e.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}};y0e.exports=(t,e={})=>{let r=$At.merge({},m0e,e.roles);return r[t]||r.default}});var b2=_((H_t,w0e)=>{"use strict";var eft=eu(),tft=uE(),rft=E0e(),Uk=xo(),{reorder:b8,scrollUp:nft,scrollDown:ift,isObject:C0e,swap:sft}=Uk,k8=class extends tft{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,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:o,suggest:a}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(n=>n.enabled=!1),typeof a!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");C0e(r)&&(r=Object.keys(r)),Array.isArray(r)?(o!=null&&(this.index=this.findIndex(o)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(o!=null&&(r=o),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 o=[],a=0,n=async(u,A)=>{typeof u=="function"&&(u=await u.call(this)),u instanceof Promise&&(u=await u);for(let p=0;p(this.state.loadingChoices=!1,u))}async toChoice(e,r,o){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 a=e.value;if(e=rft(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,Uk.define(e,"parent",o),e.level=o?o.level+1:1,e.indent==null&&(e.indent=o?o.indent+" ":e.indent||""),e.path=o?o.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,eft.unstyle(e.message).length));let u={...e};return e.reset=(A=u.input,p=u.value)=>{for(let h of Object.keys(u))e[h]=u[h];e.input=A,e.value=p},a==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,o){let a=await this.toChoice(e,r,o);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,o){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,o);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.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(a=>this.toggle(a,r));let o=e.parent;for(;o;){let a=o.choices.filter(n=>this.isDisabled(n));o.enabled=a.every(n=>n.enabled===!0),o=o.parent}return I0e(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=o=>{let a=Number(o);if(a>this.choices.length-1)return this.alert();let n=this.focused,u=this.choices.find(A=>a===A.index);if(!u.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(u)===-1){let A=b8(this.choices),p=A.indexOf(u);if(n.index>p){let h=A.slice(p,p+this.limit),E=A.filter(w=>!h.includes(w));this.choices=h.concat(E)}else{let h=p-this.limit+1;this.choices=A.slice(h).concat(A.slice(0,h))}}return this.index=this.choices.indexOf(u),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(o=>{let a=this.choices.length,n=this.num,u=(A=!1,p)=>{clearTimeout(this.numberTimeout),A&&(p=r(n)),this.num="",o(p)};if(n==="0"||n.length===1&&+(n+"0")>a)return u(!0);if(Number(n)>a)return u(!1,this.alert());this.numberTimeout=setTimeout(()=>u(!0),this.delay)})}home(){return this.choices=b8(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=b8(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,o=this.index;return this.options.scroll===!1&&o===0?this.alert():e>r&&o===0?this.scrollUp():(this.index=(o-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===r-1?this.alert():e>r&&o===r-1?this.scrollDown():(this.index=(o+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=nft(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=ift(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){sft(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(o=>e[o]===!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(o=>!this.isDisabled(o));return e.enabled&&r.every(o=>this.isEnabled(o))}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((o,a)=>(o[a]=this.find(a,r),o),{})}filter(e,r){let a=typeof e=="function"?e:(A,p)=>[A.name,p].includes(e),u=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?u.map(A=>A[r]):u}find(e,r){if(C0e(e))return r?e[r]:e;let a=typeof e=="function"?e:(u,A)=>[u.name,A].includes(e),n=this.choices.find(a);if(n)return r?n[r]:n}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(u=>u.newChoice))return this.alert();let{reorder:r,sort:o}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&o!==!0&&(n=Uk.reorder(n)),this.value=a?n.map(u=>u.name):n.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(o=>o.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 o=this.find(r);o&&(this.initial=o.index,this.focus(o,!0))}}}get choices(){return I0e(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:o}=this,a=e.limit||this._limit||r.limit||o.length;return Math.min(a,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 I0e(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(Uk.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let o=r.choices.filter(a=>!t.isDisabled(a));r.enabled=o.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}w0e.exports=k8});var Qh=_((q_t,B0e)=>{"use strict";var oft=b2(),Q8=xo(),F8=class extends oft{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 o=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!Q8.hasColor(o)&&(o=this.styles.strong(o)),this.resolve(o,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),u=await this.resolve(e.hint,this.state,e,r);u&&!Q8.hasColor(u)&&(u=this.styles.muted(u));let A=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],A+a+n,p,this.margin[1],u].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(Q8.hasColor(p)||(p=this.styles.disabled(p)),h()):(o&&(p=this.styles.em(p)),h())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(n,u)=>await this.renderChoice(n,u)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let o=this.margin[0]+r.join(` +`),a;return this.options.choicesHeader&&(a=await this.resolve(this.options.choicesHeader,this.state)),[a,o].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,o="",a=await this.header(),n=await this.prefix(),u=await this.separator(),A=await this.message();this.options.promptLine!==!1&&(o=[n,A,u,""].join(" "),this.state.prompt=o);let p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),w=await this.footer();p&&(o+=p),h&&!o.includes(h)&&(o+=" "+h),e&&!p&&!E.trim()&&this.multiple&&this.emptyError!=null&&(o+=this.styles.danger(this.emptyError)),this.clear(r),this.write([a,o,E,w].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};B0e.exports=F8});var D0e=_((j_t,v0e)=>{"use strict";var aft=Qh(),lft=(t,e)=>{let r=t.toLowerCase();return o=>{let n=o.toLowerCase().indexOf(r),u=e(o.slice(n,n+r.length));return n>=0?o.slice(0,n)+u+o.slice(n+r.length):o}},R8=class extends aft{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:o}=this.state;return this.input=o.slice(0,r)+e+o.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 o=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(o))}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=lft(this.input,e),o=this.choices;this.choices=o.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=o}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};v0e.exports=R8});var L8=_((G_t,S0e)=>{"use strict";var T8=xo();S0e.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:o="",pos:a,showCursor:n=!0,color:u}=e,A=u||t.styles.placeholder,p=T8.inverse(t.styles.primary),h=T=>p(t.styles.black(T)),E=r,w=" ",D=h(w);if(t.blink&&t.blink.off===!0&&(h=T=>T,D=""),n&&a===0&&o===""&&r==="")return h(w);if(n&&a===0&&(r===o||r===""))return h(o[0])+A(o.slice(1));o=T8.isPrimitive(o)?`${o}`:"",r=T8.isPrimitive(r)?`${r}`:"";let b=o&&o.startsWith(r)&&o!==r,C=b?h(o[r.length]):D;if(a!==r.length&&n===!0&&(E=r.slice(0,a)+h(r[a])+r.slice(a+1),C=""),n===!1&&(C=""),b){let T=t.styles.unstyle(E+C);return E+C+A(o.slice(T.length))}return E+C}});var _k=_((W_t,P0e)=>{"use strict";var cft=eu(),uft=Qh(),Aft=L8(),N8=class extends uft{constructor(e){super({...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:o,input:a}=r;return r.value=r.input=a.slice(0,o)+e+a.slice(o),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:o}=e;return e.value=e.input=o.slice(0,r-1)+o.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:o}=e;if(o[r]===void 0)return this.alert();let a=`${o}`.slice(0,r)+`${o}`.slice(r+1);return e.value=e.input=a,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:o}=e;return r&&r.startsWith(o)&&o!==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 o=await this.resolve(e.separator,this.state,e,r)||":";return o?" "+this.styles.disabled(o):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:o,styles:a}=this,{cursor:n,initial:u="",name:A,hint:p,input:h=""}=e,{muted:E,submitted:w,primary:D,danger:b}=a,C=p,T=this.index===r,N=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),J=e.message;this.align==="right"&&(J=J.padStart(this.longest+1," ")),this.align==="left"&&(J=J.padEnd(this.longest+1," "));let te=this.values[A]=h||u,le=h?"success":"dark";await N.call(e,te,this.state)!==!0&&(le="danger");let ce=a[le],ue=ce(await this.indicator(e,r))+(e.pad||""),Ie=this.indent(e),he=()=>[Ie,ue,J+U,h,C].filter(Boolean).join(" ");if(o.submitted)return J=cft.unstyle(J),h=w(h),C="",he();if(e.format)h=await e.format.call(this,h,e,r);else{let De=this.styles.muted;h=Aft(this,{input:h,initial:u,pos:n,showCursor:T,color:De})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[A]=await e.result.call(this,te,e,r)),T&&(J=D(J)),e.error?h+=(h?" ":"")+b(e.error.trim()):e.hint&&(h+=(h?" ":"")+E(e.hint.trim())),he()}async submit(){return this.value=this.values,super.base.submit.call(this)}};P0e.exports=N8});var O8=_((Y_t,b0e)=>{"use strict";var fft=_k(),pft=()=>{throw new Error("expected prompt to have a custom authenticate method")},x0e=(t=pft)=>{class e extends fft{constructor(o){super(o)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(o){return x0e(o)}}return e};b0e.exports=x0e()});var F0e=_((V_t,Q0e)=>{"use strict";var hft=O8();function gft(t,e){return t.username===this.options.username&&t.password===this.options.password}var k0e=(t=gft)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(o){return this.options.showPassword?o:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(o.length))}}];class r extends hft.create(t){constructor(a){super({...a,choices:e})}static create(a){return k0e(a)}}return r};Q0e.exports=k0e()});var Hk=_((K_t,R0e)=>{"use strict";var dft=uE(),{isPrimitive:mft,hasColor:yft}=xo(),M8=class extends dft{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:o}=this;return o.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 mft(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return yft(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=this.styles.muted(this.default),A=[o,n,u,a].filter(Boolean).join(" ");this.state.prompt=A;let p=await this.header(),h=this.value=this.cast(e),E=await this.format(h),w=await this.error()||await this.hint(),D=await this.footer();w&&!A.includes(w)&&(E+=" "+w),A+=" "+E,this.clear(r),this.write([p,A,D].filter(Boolean).join(` +`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};R0e.exports=M8});var L0e=_((J_t,T0e)=>{"use strict";var Eft=Hk(),U8=class extends Eft{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};T0e.exports=U8});var O0e=_((z_t,N0e)=>{"use strict";var Cft=Qh(),Ift=_k(),AE=Ift.prototype,_8=class extends Cft{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let o=this.focused,a=o.parent||{};return!o.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():AE.dispatch.call(this,e,r)}append(e,r){return AE.append.call(this,e,r)}delete(e,r){return AE.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?AE.next.call(this):super.next()}prev(){return this.focused.editable?AE.prev.call(this):super.prev()}async indicator(e,r){let o=e.indicator||"",a=e.editable?o:super.indicator(e,r);return await this.resolve(a,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?AE.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 o=r.parent?this.value[r.parent.name]:this.value;if(r.editable?o=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(o=r.enabled===!0),e=await r.validate(o,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)}};N0e.exports=_8});var Kg=_((X_t,M0e)=>{"use strict";var wft=uE(),Bft=L8(),{isPrimitive:vft}=xo(),H8=class extends wft{constructor(e){super(e),this.initial=vft(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let o=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!o||o.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:o}=this.state;this.input=`${o}`.slice(0,r)+e+`${o}`.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),o=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=o,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):Bft(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),o=await this.separator(),a=await this.message(),n=[r,a,o].filter(Boolean).join(" ");this.state.prompt=n;let u=await this.header(),A=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!A.includes(p)&&(A+=" "+p),n+=" "+A,this.clear(e),this.write([u,n,h].filter(Boolean).join(` +`)),this.restore()}};M0e.exports=H8});var _0e=_((Z_t,U0e)=>{"use strict";var Dft=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),qk=t=>Dft(t).filter(Boolean);U0e.exports=(t,e={},r="")=>{let{past:o=[],present:a=""}=e,n,u;switch(t){case"prev":case"undo":return n=o.slice(0,o.length-1),u=o[o.length-1]||"",{past:qk([r,...n]),present:u};case"next":case"redo":return n=o.slice(1),u=o[0]||"",{past:qk([...n,r]),present:u};case"save":return{past:qk([...o,r]),present:""};case"remove":return u=qk(o.filter(A=>A!==r)),a="",u.length&&(a=u.pop()),{past:u,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var j8=_(($_t,q0e)=>{"use strict";var Sft=Kg(),H0e=_0e(),q8=class extends Sft{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let o=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:o},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=H0e(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=H0e("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};q0e.exports=q8});var G0e=_((e8t,j0e)=>{"use strict";var Pft=Kg(),G8=class extends Pft{format(){return""}};j0e.exports=G8});var Y0e=_((t8t,W0e)=>{"use strict";var xft=Kg(),W8=class extends xft{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()}};W0e.exports=W8});var K0e=_((r8t,V0e)=>{"use strict";var bft=Qh(),Y8=class extends bft{constructor(e){super({...e,multiple:!0})}};V0e.exports=Y8});var K8=_((n8t,J0e)=>{"use strict";var kft=Kg(),V8=class extends kft{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,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,o=this.toNumber(this.input);return o>this.max+r?this.alert():(this.input=`${o+r}`,this.render())}down(e){let r=e||this.minor,o=this.toNumber(this.input);return othis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};J0e.exports=V8});var X0e=_((i8t,z0e)=>{z0e.exports=K8()});var $0e=_((s8t,Z0e)=>{"use strict";var Qft=Kg(),J8=class extends Qft{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)):""}};Z0e.exports=J8});var rge=_((o8t,tge)=>{"use strict";var Fft=eu(),Rft=b2(),ege=xo(),z8=class extends Rft{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((o,a)=>({name:a+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 o=0;o=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(){return this.scaleKey===!1||this.state.submitted?"":["",...this.scale.map(o=>` ${o.name} - ${o.message}`)].map(o=>this.styles.muted(o)).join(` +`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let o=this.scaleLength-r.join("").length,a=Math.round(o/(r.length-1)),u=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),A=" ".repeat(this.widths[0]);return this.margin[3]+A+this.margin[1]+u}scaleIndicator(e,r,o){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,o);let a=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):a?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let o=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return o.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!ege.hasColor(n)&&(n=this.styles.muted(n));let u=C=>this.margin[3]+C.replace(/\s+$/,"").padEnd(this.widths[0]," "),A=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),E=await this.renderScale(e,r),w=this.margin[1]+this.margin[3];this.scaleLength=Fft.unstyle(E).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-w.length);let b=ege.wordWrap(h,{width:this.widths[0],newline:A}).split(` +`).map(C=>u(C)+this.margin[1]);return o&&(E=this.styles.info(E),b=b.map(C=>this.styles.info(C))),b[0]+=E,this.linebreak&&b.push(""),[p+a,b.join(` +`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(a,n)=>await this.renderChoice(a,n)),r=await Promise.all(e),o=await this.renderScaleHeading();return this.margin[0]+[o,...r.map(a=>a.join(" "))].join(` +`)}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u="";this.options.promptLine!==!1&&(u=[o,n,a,""].join(" "),this.state.prompt=u);let A=await this.header(),p=await this.format(),h=await this.renderScaleKey(),E=await this.error()||await this.hint(),w=await this.renderChoices(),D=await this.footer(),b=this.emptyError;p&&(u+=p),E&&!u.includes(E)&&(u+=" "+E),e&&!p&&!w.trim()&&this.multiple&&b!=null&&(u+=this.styles.danger(b)),this.clear(r),this.write([A,u,h,w,D].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)}};tge.exports=z8});var sge=_((a8t,ige)=>{"use strict";var nge=eu(),Tft=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",Z8=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=Tft(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},Lft=async(t={},e={},r=o=>o)=>{let o=new Set,a=t.fields||[],n=t.template,u=[],A=[],p=[],h=1;typeof n=="function"&&(n=await n());let E=-1,w=()=>n[++E],D=()=>n[E+1],b=C=>{C.line=h,u.push(C)};for(b({type:"bos",value:""});Ele.name===U.key);U.field=a.find(le=>le.name===U.key),te||(te=new Z8(U),A.push(te)),te.lines.push(U.line-1);continue}let T=u[u.length-1];T.type==="text"&&T.line===h?T.value+=C:b({type:"text",value:C})}return b({type:"eos",value:""}),{input:n,tabstops:u,unique:o,keys:p,items:A}};ige.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),o={...e.values,...e.initial},{tabstops:a,items:n,keys:u}=await Lft(e,o),A=X8("result",t,e),p=X8("format",t,e),h=X8("validate",t,e,!0),E=t.isValue.bind(t);return async(w={},D=!1)=>{let b=0;w.required=r,w.items=n,w.keys=u,w.output="";let C=async(J,te,le,ce)=>{let ue=await h(J,te,le,ce);return ue===!1?"Invalid field "+le.name:ue};for(let J of a){let te=J.value,le=J.key;if(J.type!=="template"){te&&(w.output+=te);continue}if(J.type==="template"){let ce=n.find(Ee=>Ee.name===le);e.required===!0&&w.required.add(ce.name);let ue=[ce.input,w.values[ce.value],ce.value,te].find(E),he=(ce.field||{}).message||J.inner;if(D){let Ee=await C(w.values[le],w,ce,b);if(Ee&&typeof Ee=="string"||Ee===!1){w.invalid.set(le,Ee);continue}w.invalid.delete(le);let g=await A(w.values[le],w,ce,b);w.output+=nge.unstyle(g);continue}ce.placeholder=!1;let De=te;te=await p(te,w,ce,b),ue!==te?(w.values[le]=ue,te=t.styles.typing(ue),w.missing.delete(he)):(w.values[le]=void 0,ue=`<${he}>`,te=t.styles.primary(ue),ce.placeholder=!0,w.required.has(le)&&w.missing.add(he)),w.missing.has(he)&&w.validating&&(te=t.styles.warning(ue)),w.invalid.has(le)&&w.validating&&(te=t.styles.danger(ue)),b===w.index&&(De!==te?te=t.styles.underline(te):te=t.styles.heading(nge.unstyle(te))),b++}te&&(w.output+=te)}let T=w.output.split(` +`).map(J=>" "+J),N=n.length,U=0;for(let J of n)w.invalid.has(J.name)&&J.lines.forEach(te=>{T[te][0]===" "&&(T[te]=w.styles.danger(w.symbols.bullet)+T[te].slice(1))}),t.isValue(w.values[J.name])&&U++;return w.completed=(U/N*100).toFixed(0),w.output=T.join(` +`),w.output}};function X8(t,e,r,o){return(a,n,u,A)=>typeof u.field[t]=="function"?u.field[t].call(e,a,n,u,A):[o,a].find(p=>e.isValue(p))}});var age=_((l8t,oge)=>{"use strict";var Nft=eu(),Oft=sge(),Mft=uE(),$8=class extends Mft{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await Oft(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 o=this.getItem(),a=o.input.slice(0,this.cursor),n=o.input.slice(this.cursor);this.input=o.input=`${a}${e}${n}`,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),o=e.input.slice(0,this.cursor-1);this.input=e.input=`${o}${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:o,size:a}=this.state,n=[this.options.newline,` +`].find(J=>J!=null),u=await this.prefix(),A=await this.separator(),p=await this.message(),h=[u,p,A].filter(Boolean).join(" ");this.state.prompt=h;let E=await this.header(),w=await this.error()||"",D=await this.hint()||"",b=o?"":await this.interpolate(this.state),C=this.state.key=r[e]||"",T=await this.format(C),N=await this.footer();T&&(h+=" "+T),D&&!T&&this.state.completed===0&&(h+=" "+D),this.clear(a);let U=[E,h,b,N,w.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:o,index:a}=this.state,n=r.find(u=>u.name===o[a]);return n&&n.input!=null&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:o,values:a}=this.state;if(e.size){let A="";for(let[p,h]of e)A+=`Invalid ${p}: ${h} +`;return this.state.error=A,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let u=Nft.unstyle(o).split(` +`).map(A=>A.slice(1)).join(` +`);return this.value={values:a,result:u},super.submit()}};oge.exports=$8});var cge=_((c8t,lge)=>{"use strict";var Uft="(Use + to sort)",_ft=Qh(),eH=class extends _ft{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,Uft].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let o=await super.renderChoice(e,r),a=this.symbols.identicalTo+" ",n=this.index===r&&this.sorting?this.styles.muted(a):" ";return this.options.drag===!1&&(n=""),this.options.numbered===!0?n+`${r+1} - `+o:n+o}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};lge.exports=eH});var Age=_((u8t,uge)=>{"use strict";var Hft=b2(),tH=class extends Hft{constructor(e={}){if(super(e),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(o=>this.styles.muted(o)),this.state.header=r.join(` + `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let o of r)o.scale=qft(5,this.options),o.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],o=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!o,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 o=this.index===r,a=this.term==="Hyper",n=a?9:8,u=a?"":" ",A=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=te=>(te?this.styles.success("\u25C9"):"\u25EF")+u,E=r+1+".",w=o?this.styles.heading:this.styles.noop,D=await this.resolve(e.message,this.state,e,r),b=this.indent(e),C=b+e.scale.map((te,le)=>h(le===e.scaleIdx)).join(A),T=te=>te===e.scaleIdx?w(te):te,N=b+e.scale.map((te,le)=>T(le)).join(p),U=()=>[E,D].filter(Boolean).join(" "),J=()=>[U(),C,N," "].filter(Boolean).join(` +`);return o&&(C=this.styles.cyan(C),N=this.styles.cyan(N)),J()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(o,a)=>await this.renderChoice(o,a)),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,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=[o,n,a].filter(Boolean).join(" ");this.state.prompt=u;let A=await this.header(),p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),w=await this.footer();(p||!h)&&(u+=" "+p),h&&!u.includes(h)&&(u+=" "+h),e&&!p&&!E&&this.multiple&&this.type!=="form"&&(u+=this.styles.danger(this.emptyError)),this.clear(r),this.write([u,A,E,w].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 qft(t,e={}){if(Array.isArray(e.scale))return e.scale.map(o=>({...o}));let r=[];for(let o=1;o{fge.exports=j8()});var gge=_((f8t,hge)=>{"use strict";var jft=Hk(),rH=class extends jft{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=o=>this.styles.primary.underline(o);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(),o=await this.prefix(),a=await this.separator(),n=await this.message(),u=await this.format(),A=await this.error()||await this.hint(),p=await this.footer(),h=[o,n,a,u].join(" ");this.state.prompt=h,A&&!h.includes(A)&&(h+=" "+A),this.clear(e),this.write([r,h,p].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};hge.exports=rH});var mge=_((p8t,dge)=>{"use strict";var Gft=Qh(),nH=class extends Gft{constructor(e){if(super(e),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 o=await super.toChoices(e,r);if(o.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>o.length)throw new Error("Please specify the index of the correct answer from the list of choices");return o}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)}}};dge.exports=nH});var Ege=_(iH=>{"use strict";var yge=xo(),fs=(t,e)=>{yge.defineExport(iH,t,e),yge.defineExport(iH,t.toLowerCase(),e)};fs("AutoComplete",()=>D0e());fs("BasicAuth",()=>F0e());fs("Confirm",()=>L0e());fs("Editable",()=>O0e());fs("Form",()=>_k());fs("Input",()=>j8());fs("Invisible",()=>G0e());fs("List",()=>Y0e());fs("MultiSelect",()=>K0e());fs("Numeral",()=>X0e());fs("Password",()=>$0e());fs("Scale",()=>rge());fs("Select",()=>Qh());fs("Snippet",()=>age());fs("Sort",()=>cge());fs("Survey",()=>Age());fs("Text",()=>pge());fs("Toggle",()=>gge());fs("Quiz",()=>mge())});var Ige=_((g8t,Cge)=>{Cge.exports={ArrayPrompt:b2(),AuthPrompt:O8(),BooleanPrompt:Hk(),NumberPrompt:K8(),StringPrompt:Kg()}});var Q2=_((d8t,Bge)=>{"use strict";var wge=ve("assert"),oH=ve("events"),Fh=xo(),ru=class extends oH{constructor(e,r){super(),this.options=Fh.merge({},e),this.answers={...r}}register(e,r){if(Fh.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}wge.equal(typeof r,"function","expected a function");let o=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[o]=r:this.prompts[o]=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(Fh.merge({},this.options,r))}catch(o){return Promise.reject(o)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=Fh.merge({},this.options,e),{type:o,name:a}=e,{set:n,get:u}=Fh;if(typeof o=="function"&&(o=await o.call(this,e,this.answers)),!o)return this.answers[a];wge(this.prompts[o],`Prompt "${o}" is not registered`);let A=new this.prompts[o](r),p=u(this.answers,a);A.state.answers=this.answers,A.enquirer=this,a&&A.on("submit",E=>{this.emit("answer",a,E,A),n(this.answers,a,E)});let h=A.emit.bind(A);return A.emit=(...E)=>(this.emit.call(this,...E),h(...E)),this.emit("prompt",A,this),r.autofill&&p!=null?(A.value=A.input=p,r.autofill==="show"&&await A.submit()):p=A.value=await A.run(),p}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||uE()}static get prompts(){return Ege()}static get types(){return Ige()}static get prompt(){let e=(r,...o)=>{let a=new this(...o),n=a.emit.bind(a);return a.emit=(...u)=>(e.emit(...u),n(...u)),a.prompt(r)};return Fh.mixinEmitter(e,new oH),e}};Fh.mixinEmitter(ru,new oH);var sH=ru.prompts;for(let t of Object.keys(sH)){let e=t.toLowerCase(),r=o=>new sH[t](o).run();ru.prompt[e]=r,ru[e]=r,ru[t]||Reflect.defineProperty(ru,t,{get:()=>sH[t]})}var k2=t=>{Fh.defineExport(ru,t,()=>ru.types[t])};k2("ArrayPrompt");k2("AuthPrompt");k2("BooleanPrompt");k2("NumberPrompt");k2("StringPrompt");Bge.exports=ru});var L2=_((Z8t,kge)=>{var zft=bk();function Xft(t,e,r){var o=t==null?void 0:zft(t,e);return o===void 0?r:o}kge.exports=Xft});var Rge=_((iHt,Fge)=>{function Zft(t,e){for(var r=-1,o=t==null?0:t.length;++r{var $ft=Eg(),ept=PP();function tpt(t,e){return t&&$ft(e,ept(e),t)}Tge.exports=tpt});var Oge=_((oHt,Nge)=>{var rpt=Eg(),npt=Km();function ipt(t,e){return t&&rpt(e,npt(e),t)}Nge.exports=ipt});var Uge=_((aHt,Mge)=>{var spt=Eg(),opt=IP();function apt(t,e){return spt(t,opt(t),e)}Mge.exports=apt});var fH=_((lHt,_ge)=>{var lpt=CP(),cpt=FP(),upt=IP(),Apt=bN(),fpt=Object.getOwnPropertySymbols,ppt=fpt?function(t){for(var e=[];t;)lpt(e,upt(t)),t=cpt(t);return e}:Apt;_ge.exports=ppt});var qge=_((cHt,Hge)=>{var hpt=Eg(),gpt=fH();function dpt(t,e){return hpt(t,gpt(t),e)}Hge.exports=dpt});var pH=_((uHt,jge)=>{var mpt=xN(),ypt=fH(),Ept=Km();function Cpt(t){return mpt(t,Ept,ypt)}jge.exports=Cpt});var Wge=_((AHt,Gge)=>{var Ipt=Object.prototype,wpt=Ipt.hasOwnProperty;function Bpt(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&wpt.call(t,"index")&&(r.index=t.index,r.input=t.input),r}Gge.exports=Bpt});var Vge=_((fHt,Yge)=>{var vpt=kP();function Dpt(t,e){var r=e?vpt(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}Yge.exports=Dpt});var Jge=_((pHt,Kge)=>{var Spt=/\w*$/;function Ppt(t){var e=new t.constructor(t.source,Spt.exec(t));return e.lastIndex=t.lastIndex,e}Kge.exports=Ppt});var ede=_((hHt,$ge)=>{var zge=dg(),Xge=zge?zge.prototype:void 0,Zge=Xge?Xge.valueOf:void 0;function xpt(t){return Zge?Object(Zge.call(t)):{}}$ge.exports=xpt});var rde=_((gHt,tde)=>{var bpt=kP(),kpt=Vge(),Qpt=Jge(),Fpt=ede(),Rpt=jN(),Tpt="[object Boolean]",Lpt="[object Date]",Npt="[object Map]",Opt="[object Number]",Mpt="[object RegExp]",Upt="[object Set]",_pt="[object String]",Hpt="[object Symbol]",qpt="[object ArrayBuffer]",jpt="[object DataView]",Gpt="[object Float32Array]",Wpt="[object Float64Array]",Ypt="[object Int8Array]",Vpt="[object Int16Array]",Kpt="[object Int32Array]",Jpt="[object Uint8Array]",zpt="[object Uint8ClampedArray]",Xpt="[object Uint16Array]",Zpt="[object Uint32Array]";function $pt(t,e,r){var o=t.constructor;switch(e){case qpt:return bpt(t);case Tpt:case Lpt:return new o(+t);case jpt:return kpt(t,r);case Gpt:case Wpt:case Ypt:case Vpt:case Kpt:case Jpt:case zpt:case Xpt:case Zpt:return Rpt(t,r);case Npt:return new o;case Opt:case _pt:return new o(t);case Mpt:return Qpt(t);case Upt:return new o;case Hpt:return Fpt(t)}}tde.exports=$pt});var ide=_((dHt,nde)=>{var eht=a1(),tht=Zu(),rht="[object Map]";function nht(t){return tht(t)&&eht(t)==rht}nde.exports=nht});var lde=_((mHt,ade)=>{var iht=ide(),sht=BP(),sde=vP(),ode=sde&&sde.isMap,oht=ode?sht(ode):iht;ade.exports=oht});var ude=_((yHt,cde)=>{var aht=a1(),lht=Zu(),cht="[object Set]";function uht(t){return lht(t)&&aht(t)==cht}cde.exports=uht});var hde=_((EHt,pde)=>{var Aht=ude(),fht=BP(),Ade=vP(),fde=Ade&&Ade.isSet,pht=fde?fht(fde):Aht;pde.exports=pht});var hH=_((CHt,yde)=>{var hht=yP(),ght=Rge(),dht=RP(),mht=Lge(),yht=Oge(),Eht=qN(),Cht=QP(),Iht=Uge(),wht=qge(),Bht=RN(),vht=pH(),Dht=a1(),Sht=Wge(),Pht=rde(),xht=GN(),bht=jl(),kht=r1(),Qht=lde(),Fht=cl(),Rht=hde(),Tht=PP(),Lht=Km(),Nht=1,Oht=2,Mht=4,gde="[object Arguments]",Uht="[object Array]",_ht="[object Boolean]",Hht="[object Date]",qht="[object Error]",dde="[object Function]",jht="[object GeneratorFunction]",Ght="[object Map]",Wht="[object Number]",mde="[object Object]",Yht="[object RegExp]",Vht="[object Set]",Kht="[object String]",Jht="[object Symbol]",zht="[object WeakMap]",Xht="[object ArrayBuffer]",Zht="[object DataView]",$ht="[object Float32Array]",e0t="[object Float64Array]",t0t="[object Int8Array]",r0t="[object Int16Array]",n0t="[object Int32Array]",i0t="[object Uint8Array]",s0t="[object Uint8ClampedArray]",o0t="[object Uint16Array]",a0t="[object Uint32Array]",Ai={};Ai[gde]=Ai[Uht]=Ai[Xht]=Ai[Zht]=Ai[_ht]=Ai[Hht]=Ai[$ht]=Ai[e0t]=Ai[t0t]=Ai[r0t]=Ai[n0t]=Ai[Ght]=Ai[Wht]=Ai[mde]=Ai[Yht]=Ai[Vht]=Ai[Kht]=Ai[Jht]=Ai[i0t]=Ai[s0t]=Ai[o0t]=Ai[a0t]=!0;Ai[qht]=Ai[dde]=Ai[zht]=!1;function Gk(t,e,r,o,a,n){var u,A=e&Nht,p=e&Oht,h=e&Mht;if(r&&(u=a?r(t,o,a,n):r(t)),u!==void 0)return u;if(!Fht(t))return t;var E=bht(t);if(E){if(u=Sht(t),!A)return Cht(t,u)}else{var w=Dht(t),D=w==dde||w==jht;if(kht(t))return Eht(t,A);if(w==mde||w==gde||D&&!a){if(u=p||D?{}:xht(t),!A)return p?wht(t,yht(u,t)):Iht(t,mht(u,t))}else{if(!Ai[w])return a?t:{};u=Pht(t,w,A)}}n||(n=new hht);var b=n.get(t);if(b)return b;n.set(t,u),Rht(t)?t.forEach(function(N){u.add(Gk(N,e,r,N,t,n))}):Qht(t)&&t.forEach(function(N,U){u.set(U,Gk(N,e,r,U,t,n))});var C=h?p?vht:Bht:p?Lht:Tht,T=E?void 0:C(t);return ght(T||t,function(N,U){T&&(U=N,N=t[U]),dht(u,U,Gk(N,e,r,U,t,n))}),u}yde.exports=Gk});var gH=_((IHt,Ede)=>{var l0t=hH(),c0t=1,u0t=4;function A0t(t){return l0t(t,c0t|u0t)}Ede.exports=A0t});var dH=_((wHt,Cde)=>{var f0t=o8();function p0t(t,e,r){return t==null?t:f0t(t,e,r)}Cde.exports=p0t});var Dde=_((xHt,vde)=>{var h0t=Object.prototype,g0t=h0t.hasOwnProperty;function d0t(t,e){return t!=null&&g0t.call(t,e)}vde.exports=d0t});var Pde=_((bHt,Sde)=>{var m0t=Dde(),y0t=a8();function E0t(t,e){return t!=null&&y0t(t,e,m0t)}Sde.exports=E0t});var bde=_((kHt,xde)=>{function C0t(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}xde.exports=C0t});var Qde=_((QHt,kde)=>{var I0t=bk(),w0t=XU();function B0t(t,e){return e.length<2?t:I0t(t,w0t(e,0,-1))}kde.exports=B0t});var yH=_((FHt,Fde)=>{var v0t=Wg(),D0t=bde(),S0t=Qde(),P0t=nE();function x0t(t,e){return e=v0t(e,t),t=S0t(t,e),t==null||delete t[P0t(D0t(e))]}Fde.exports=x0t});var EH=_((RHt,Rde)=>{var b0t=yH();function k0t(t,e){return t==null?!0:b0t(t,e)}Rde.exports=k0t});var Mde=_((l6t,R0t)=>{R0t.exports={name:"@yarnpkg/cli",version:"4.7.0",license:"BSD-2-Clause",main:"./sources/index.ts",exports:{".":"./sources/index.ts","./polyfills":"./sources/polyfills.ts","./package.json":"./package.json"},dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-constraints":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-exec":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-interactive-tools":"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/plugin-stage":"workspace:^","@yarnpkg/plugin-typescript":"workspace:^","@yarnpkg/plugin-version":"workspace:^","@yarnpkg/plugin-workspace-tools":"workspace:^","@yarnpkg/shell":"workspace:^","ci-info":"^4.0.0",clipanion:"^4.0.0-rc.2",semver:"^7.1.2",tslib:"^2.4.0",typanion:"^3.14.0"},devDependencies:{"@types/semver":"^7.1.0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^"},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",bin:null,exports:{".":"./lib/index.js","./package.json":"./package.json"}},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@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","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]}},repository:{type:"git",url:"git+https://github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var xH=_((UGt,zde)=>{"use strict";zde.exports=function(e,r){r===!0&&(r=0);var o="";if(typeof e=="string")try{o=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(o=e.protocol);var a=o.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var Zde=_((_Gt,Xde)=>{"use strict";var $0t=xH();function egt(t){var e={protocols:[],protocol:null,port:null,resource:"",host:"",user:"",password:"",pathname:"",hash:"",search:"",href:t,query:{},parse_failed:!1};try{var r=new URL(t);e.protocols=$0t(r),e.protocol=e.protocols[0],e.port=r.port,e.resource=r.hostname,e.host=r.host,e.user=r.username||"",e.password=r.password||"",e.pathname=r.pathname,e.hash=r.hash.slice(1),e.search=r.search.slice(1),e.href=r.href,e.query=Object.fromEntries(r.searchParams)}catch{e.protocols=["file"],e.protocol=e.protocols[0],e.port="",e.resource="",e.user="",e.pathname="",e.hash="",e.search="",e.href=t,e.query={},e.parse_failed=!0}return e}Xde.exports=egt});var tme=_((HGt,eme)=>{"use strict";var tgt=Zde();function rgt(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var ngt=rgt(tgt),igt="text/plain",sgt="us-ascii",$de=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),ogt=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:o,data:a,hash:n}=r.groups,u=o.split(";");n=e?"":n;let A=!1;u[u.length-1]==="base64"&&(u.pop(),A=!0);let p=(u.shift()||"").toLowerCase(),E=[...u.map(w=>{let[D,b=""]=w.split("=").map(C=>C.trim());return D==="charset"&&(b=b.toLowerCase(),b===sgt)?"":`${D}${b?`=${b}`:""}`}).filter(Boolean)];return A&&E.push("base64"),(E.length>0||p&&p!==igt)&&E.unshift(p),`data:${E.join(";")},${A?a.trim():a}${n?`#${n}`:""}`};function agt(t,e){if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},t=t.trim(),/^data:/i.test(t))return ogt(t,e);if(/^view-source:/i.test(t))throw new Error("`view-source:` is not supported as it is a non-standard protocol");let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new URL(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash?a.hash="":e.stripTextFragment&&(a.hash=a.hash.replace(/#?:~:text.*?$/i,"")),a.pathname){let u=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,A=0,p="";for(;;){let E=u.exec(a.pathname);if(!E)break;let w=E[0],D=E.index,b=a.pathname.slice(A,D);p+=b.replace(/\/{2,}/g,"/"),p+=w,A=D+w.length}let h=a.pathname.slice(A,a.pathname.length);p+=h.replace(/\/{2,}/g,"/"),a.pathname=p}if(a.pathname)try{a.pathname=decodeURI(a.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let u=a.pathname.split("/"),A=u[u.length-1];$de(A,e.removeDirectoryIndex)&&(u=u.slice(0,-1),a.pathname=u.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let u of[...a.searchParams.keys()])$de(u,e.removeQueryParameters)&&a.searchParams.delete(u);if(e.removeQueryParameters===!0&&(a.search=""),e.sortQueryParameters){a.searchParams.sort();try{a.search=decodeURIComponent(a.search)}catch{}}e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,""));let n=t;return t=a.toString(),!e.removeSingleSlash&&a.pathname==="/"&&!n.endsWith("/")&&a.hash===""&&(t=t.replace(/\/$/,"")),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&e.removeSingleSlash&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t}var bH=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,o=n=>{let u=new Error(n);throw u.subject_url=t,u};(typeof t!="string"||!t.trim())&&o("Invalid url."),t.length>bH.MAX_INPUT_LENGTH&&o("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=agt(t,e));let a=ngt.default(t);if(a.parse_failed){let n=a.href.match(r);n?(a.protocols=["ssh"],a.protocol="ssh",a.resource=n[2],a.host=n[2],a.user=n[1],a.pathname=`/${n[3]}`,a.parse_failed=!1):o("URL parsing failed.")}return a};bH.MAX_INPUT_LENGTH=2048;eme.exports=bH});var ime=_((qGt,nme)=>{"use strict";var lgt=xH();function rme(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=lgt(t);if(t=t.substring(t.indexOf("://")+3),rme(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var cgt=tme(),sme=ime();function ugt(t){var e=cgt(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),sme(e.protocols)||e.protocols.length===0&&sme(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}ome.exports=ugt});var cme=_((GGt,lme)=>{"use strict";var Agt=ame();function kH(t){if(typeof t!="string")throw new Error("The url must be a string.");var e=/^([a-z\d-]{1,39})\/([-\.\w]{1,100})$/i;e.test(t)&&(t="https://github.com/"+t);var r=Agt(t),o=r.resource.split("."),a=null;switch(r.toString=function(N){return kH.stringify(this,N)},r.source=o.length>2?o.slice(1-o.length).join("."):r.source=r.resource,r.git_suffix=/\.git$/.test(r.pathname),r.name=decodeURIComponent((r.pathname||r.href).replace(/(^\/)|(\/$)/g,"").replace(/\.git$/,"")),r.owner=decodeURIComponent(r.user),r.source){case"git.cloudforge.com":r.owner=r.user,r.organization=o[0],r.source="cloudforge.com";break;case"visualstudio.com":if(r.resource==="vs-ssh.visualstudio.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3],r.full_name=a[2]+"/"+a[3]);break}else{a=r.name.split("/"),a.length===2?(r.owner=a[1],r.name=a[1],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name);break}case"dev.azure.com":case"azure.com":if(r.resource==="ssh.dev.azure.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3]);break}else{a=r.name.split("/"),a.length===5?(r.organization=a[0],r.owner=a[1],r.name=a[4],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name),r.query&&r.query.path&&(r.filepath=r.query.path.replace(/^\/+/g,"")),r.query&&r.query.version&&(r.ref=r.query.version.replace(/^GB/,""));break}default:a=r.name.split("/");var n=a.length-1;if(a.length>=2){var u=a.indexOf("-",2),A=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),E=a.indexOf("src",2),w=a.indexOf("raw",2),D=a.indexOf("edit",2);n=u>0?u-1:A>0?A-1:p>0?p-1:h>0?h-1:E>0?E-1:w>0?w-1:D>0?D-1:n,r.owner=a.slice(0,n).join("/"),r.name=a[n],h&&(r.commit=a[n+2])}r.ref="",r.filepathtype="",r.filepath="";var b=a.length>n&&a[n+1]==="-"?n+1:n;a.length>b+2&&["raw","src","blob","tree","edit"].indexOf(a[b+1])>=0&&(r.filepathtype=a[b+1],r.ref=a[b+2],a.length>b+3&&(r.filepath=a.slice(b+3).join("/"))),r.organization=r.owner;break}r.full_name||(r.full_name=r.owner,r.name&&(r.full_name&&(r.full_name+="/"),r.full_name+=r.name)),r.owner.startsWith("scm/")&&(r.source="bitbucket-server",r.owner=r.owner.replace("scm/",""),r.organization=r.owner,r.full_name=r.owner+"/"+r.name);var C=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,T=C.exec(r.pathname);return T!=null&&(r.source="bitbucket-server",T[1]==="users"?r.owner="~"+T[2]:r.owner=T[2],r.organization=r.owner,r.name=T[3],a=T[4].split("/"),a.length>1&&(["raw","browse"].indexOf(a[1])>=0?(r.filepathtype=a[1],a.length>2&&(r.filepath=a.slice(2).join("/"))):a[1]==="commits"&&a.length>2&&(r.commit=a[2])),r.full_name=r.owner+"/"+r.name,r.query.at?r.ref=r.query.at:r.ref=""),r}kH.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",o=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+o+"@"+t.resource+r+"/"+t.full_name+a:o+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+o+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?fgt(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+pgt(t)+a;default:return t.href}};function fgt(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function pgt(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}lme.exports=kH});var Dme=_((B9t,vme)=>{var vgt=Cb(),Dgt=QP(),Sgt=jl(),Pgt=fy(),xgt=s8(),bgt=nE(),kgt=t2();function Qgt(t){return Sgt(t)?vgt(t,bgt):Pgt(t)?[t]:Dgt(xgt(kgt(t)))}vme.exports=Qgt});function Lgt(t,e){return e===1&&Tgt.has(t[0])}function q2(t){let e=Array.isArray(t)?t:(0,xme.default)(t);return e.map((o,a)=>Fgt.test(o)?`[${o}]`:Rgt.test(o)&&!Lgt(e,a)?`.${o}`:`[${JSON.stringify(o)}]`).join("").replace(/^\./,"")}function Ngt(t,e){let r=[];if(e.methodName!==null&&r.push(pe.pretty(t,e.methodName,pe.Type.CODE)),e.file!==null){let o=[];o.push(pe.pretty(t,e.file,pe.Type.PATH)),e.line!==null&&(o.push(pe.pretty(t,e.line,pe.Type.NUMBER)),e.column!==null&&o.push(pe.pretty(t,e.column,pe.Type.NUMBER))),r.push(`(${o.join(pe.pretty(t,":","grey"))})`)}return r.join(" ")}function Kk(t,{manifestUpdates:e,reportedErrors:r},{fix:o}={}){let a=new Map,n=new Map,u=[...r.keys()].map(A=>[A,new Map]);for(let[A,p]of[...u,...e]){let h=r.get(A)?.map(b=>({text:b,fixable:!1}))??[],E=!1,w=t.getWorkspaceByCwd(A),D=w.manifest.exportTo({});for(let[b,C]of p){if(C.size>1){let T=[...C].map(([N,U])=>{let J=pe.pretty(t.configuration,N,pe.Type.INSPECT),te=U.size>0?Ngt(t.configuration,U.values().next().value):null;return te!==null?` +${J} at ${te}`:` +${J}`}).join("");h.push({text:`Conflict detected in constraint targeting ${pe.pretty(t.configuration,b,pe.Type.CODE)}; conflicting values are:${T}`,fixable:!1})}else{let[[T]]=C,N=(0,Sme.default)(D,b);if(JSON.stringify(N)===JSON.stringify(T))continue;if(!o){let U=typeof N>"u"?`Missing field ${pe.pretty(t.configuration,b,pe.Type.CODE)}; expected ${pe.pretty(t.configuration,T,pe.Type.INSPECT)}`:typeof T>"u"?`Extraneous field ${pe.pretty(t.configuration,b,pe.Type.CODE)} currently set to ${pe.pretty(t.configuration,N,pe.Type.INSPECT)}`:`Invalid field ${pe.pretty(t.configuration,b,pe.Type.CODE)}; expected ${pe.pretty(t.configuration,T,pe.Type.INSPECT)}, found ${pe.pretty(t.configuration,N,pe.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof T>"u"?(0,bme.default)(D,b):(0,Pme.default)(D,b,T),E=!0}E&&a.set(w,D)}h.length>0&&n.set(w,h)}return{changedWorkspaces:a,remainingErrors:n}}function kme(t,{configuration:e}){let r={children:[]};for(let[o,a]of t){let n=[];for(let A of a){let p=A.text.split(/\n/);A.fixable&&(p[0]=`${pe.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:pe.tuple(pe.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:pe.tuple(pe.Type.NO_HINT,h)}))})}let u={value:pe.tuple(pe.Type.LOCATOR,o.anchoredLocator),children:qe.sortMap(n,A=>A.value[1])};r.children.push(u)}return r.children=qe.sortMap(r.children,o=>o.value[1]),r}var Sme,Pme,xme,bme,ZE,Fgt,Rgt,Tgt,j2=It(()=>{Ve();Sme=et(L2()),Pme=et(dH()),xme=et(Dme()),bme=et(EH()),ZE=class{constructor(e){this.indexedFields=e;this.items=[];this.indexes={};this.clear()}clear(){this.items=[];for(let e of this.indexedFields)this.indexes[e]=new Map}insert(e){this.items.push(e);for(let r of this.indexedFields){let o=Object.hasOwn(e,r)?e[r]:void 0;if(typeof o>"u")continue;qe.getArrayWithDefault(this.indexes[r],o).push(e)}return e}find(e){if(typeof e>"u")return this.items;let r=Object.entries(e);if(r.length===0)return this.items;let o=[],a;for(let[u,A]of r){let p=u,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){o.push([p,A]);continue}let E=new Set(h.get(A)??[]);if(E.size===0)return[];if(typeof a>"u")a=E;else for(let w of a)E.has(w)||a.delete(w);if(a.size===0)break}let n=[...a??[]];return o.length>0&&(n=n.filter(u=>{for(let[A,p]of o)if(!(typeof p<"u"?Object.hasOwn(u,A)&&u[A]===p:Object.hasOwn(u,A)===!1))return!1;return!0})),n}},Fgt=/^[0-9]+$/,Rgt=/^[a-zA-Z0-9_]+$/,Tgt=new Set(["scripts",..._t.allDependencies])});var Qme=_((L9t,GH)=>{var Ogt;(function(t){var e=function(){return{"append/2":[new t.type.Rule(new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("L")]),new t.type.Term("foldl",[new t.type.Term("append",[]),new t.type.Var("X"),new t.type.Term("[]",[]),new t.type.Var("L")]))],"append/3":[new t.type.Rule(new t.type.Term("append",[new t.type.Term("[]",[]),new t.type.Var("X"),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("append",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("append",[new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("S")]))],"member/2":[new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("_")])]),null),new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")])]),new t.type.Term("member",[new t.type.Var("X"),new t.type.Var("Xs")]))],"permutation/2":[new t.type.Rule(new t.type.Term("permutation",[new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("permutation",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("permutation",[new t.type.Var("T"),new t.type.Var("P")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("P")]),new t.type.Term("append",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("Y")]),new t.type.Var("S")])])]))],"maplist/2":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("X")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("Xs")])]))],"maplist/3":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs")])]))],"maplist/4":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs")])]))],"maplist/5":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds")])]))],"maplist/6":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es")])]))],"maplist/7":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs")])]))],"maplist/8":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")]),new t.type.Term(".",[new t.type.Var("G"),new t.type.Var("Gs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F"),new t.type.Var("G")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs"),new t.type.Var("Gs")])]))],"include/3":[new t.type.Rule(new t.type.Term("include",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("include",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("A")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("A"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("F"),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("F")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("L"),new t.type.Var("S")])]),new t.type.Term("include",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("S")])])])])]))],"exclude/3":[new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("E")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("Q")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("R"),new t.type.Var("Q")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("!",[]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("E")])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("E")])])])])])])]))],"foldl/4":[new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Var("I"),new t.type.Var("I")]),null),new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("I"),new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("I"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])])])]),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P2"),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P2")]),new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("R")])])])])]))],"select/3":[new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Xs")]),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term("select",[new t.type.Var("E"),new t.type.Var("Xs"),new t.type.Var("Ys")]))],"sum_list/2":[new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term("[]",[]),new t.type.Num(0,!1)]),null),new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("sum_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("+",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"max_list/2":[new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("max_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"min_list/2":[new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("min_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("=<",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"prod_list/2":[new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term("[]",[]),new t.type.Num(1,!1)]),null),new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("prod_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("*",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"last/2":[new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")]),new t.type.Var("X")]),new t.type.Term("last",[new t.type.Var("Xs"),new t.type.Var("X")]))],"prefix/2":[new t.type.Rule(new t.type.Term("prefix",[new t.type.Var("Part"),new t.type.Var("Whole")]),new t.type.Term("append",[new t.type.Var("Part"),new t.type.Var("_"),new t.type.Var("Whole")]))],"nth0/3":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth1/3":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth0/4":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth1/4":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth/5":[new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("N"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("X"),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("O"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("Y"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term(",",[new t.type.Term("is",[new t.type.Var("M"),new t.type.Term("+",[new t.type.Var("N"),new t.type.Num(1,!1)])]),new t.type.Term("nth",[new t.type.Var("M"),new t.type.Var("O"),new t.type.Var("Xs"),new t.type.Var("Y"),new t.type.Var("Ys")])]))],"length/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(!t.type.is_variable(A)&&!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(t.type.is_integer(A)&&A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else{var p=new t.type.Term("length",[u,new t.type.Num(0,!1),A]);t.type.is_integer(A)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),o.prepend([new t.type.State(a.goal.replace(p),a.substitution,a)])}},"length/3":[new t.type.Rule(new t.type.Term("length",[new t.type.Term("[]",[]),new t.type.Var("N"),new t.type.Var("N")]),null),new t.type.Rule(new t.type.Term("length",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("X")]),new t.type.Var("A"),new t.type.Var("N")]),new t.type.Term(",",[new t.type.Term("succ",[new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("length",[new t.type.Var("X"),new t.type.Var("B"),new t.type.Var("N")])]))],"replicate/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),E=0;E0;w--)E[w].equals(E[w-1])&&E.splice(w,1);for(var D=new t.type.Term("[]"),w=E.length-1;w>=0;w--)D=new t.type.Term(".",[E[w],D]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[D,A])),a.substitution,a)])}}},"msort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h=u;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=p.sort(t.compare),w=new t.type.Term("[]"),D=E.length-1;D>=0;D--)w=new t.type.Term(".",[E[D],w]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[w,A])),a.substitution,a)])}}},"keysort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h,E=u;E.indicator==="./2";){if(h=E.args[0],t.type.is_variable(h)){o.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){o.throw_error(t.error.type("pair",h,n.indicator));return}h.args[0].pair=h.args[1],p.push(h.args[0]),E=E.args[1]}if(t.type.is_variable(E))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(E))o.throw_error(t.error.type("list",u,n.indicator));else{for(var w=p.sort(t.compare),D=new t.type.Term("[]"),b=w.length-1;b>=0;b--)D=new t.type.Term(".",[new t.type.Term("-",[w[b],w[b].pair]),D]),delete w[b].pair;o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[D,A])),a.substitution,a)])}}},"take/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],w=A;h>0&&w.indicator==="./2";)E.push(w.args[0]),w=w.args[1],h--;if(h===0){for(var D=new t.type.Term("[]"),h=E.length-1;h>=0;h--)D=new t.type.Term(".",[E[h],D]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[D,p])),a.substitution,a)])}}},"drop/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],w=A;h>0&&w.indicator==="./2";)E.push(w.args[0]),w=w.args[1],h--;h===0&&o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[w,p])),a.substitution,a)])}},"reverse/2":function(o,a,n){var u=n.args[0],A=n.args[1],p=t.type.is_instantiated_list(u),h=t.type.is_instantiated_list(A);if(t.type.is_variable(u)&&t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(u)&&!t.type.is_fully_list(u))o.throw_error(t.error.type("list",u,n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!p&&!h)o.throw_error(t.error.instantiation(n.indicator));else{for(var E=p?u:A,w=new t.type.Term("[]",[]);E.indicator==="./2";)w=new t.type.Term(".",[E.args[0],w]),E=E.args[1];o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[w,p?A:u])),a.substitution,a)])}},"list_to_set/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else{for(var p=u,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=[],w=new t.type.Term("[]",[]),D,b=0;b=0;b--)w=new t.type.Term(".",[E[b],w]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[A,w])),a.substitution,a)])}}}}},r=["append/2","append/3","member/2","permutation/2","maplist/2","maplist/3","maplist/4","maplist/5","maplist/6","maplist/7","maplist/8","include/3","exclude/3","foldl/4","sum_list/2","max_list/2","min_list/2","prod_list/2","last/2","prefix/2","nth0/3","nth1/3","nth0/4","nth1/4","length/2","replicate/3","select/3","sort/2","msort/2","keysort/2","take/3","drop/3","reverse/2","list_to_set/2"];typeof GH<"u"?GH.exports=function(o){t=o,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(Ogt)});var Yme=_(Kr=>{"use strict";var Xg=process.platform==="win32",WH="aes-256-cbc",Mgt="sha256",Tme="The current environment doesn't support interactive reading from TTY.",Xn=ve("fs"),Fme=process.binding("tty_wrap").TTY,VH=ve("child_process"),Lh=ve("path"),KH={prompt:"> ",hideEchoBack:!1,mask:"*",limit:[],limitMessage:"Input another, please.$<( [)limit(])>",defaultInput:"",trueValue:[],falseValue:[],caseSensitive:!1,keepWhitespace:!1,encoding:"utf8",bufferSize:1024,print:void 0,history:!0,cd:!1,phContent:void 0,preCheck:void 0},Vf="none",iu,eC,Rme=!1,Th,zk,YH,Ugt=0,$H="",zg=[],Xk,Lme=!1,JH=!1,G2=!1;function Nme(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(o){return"#"+o.charCodeAt(0)+";"})}return zk.concat(function(r){var o=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&o.push("--"+a):r[a]==="string"&&t[a]&&o.push("--"+a,e(t[a]))}),o}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function _gt(t,e){function r(U){var J,te="",le;for(YH=YH||ve("os").tmpdir();;){J=Lh.join(YH,U+te);try{le=Xn.openSync(J,"wx")}catch(ce){if(ce.code==="EEXIST"){te++;continue}else throw ce}Xn.closeSync(le);break}return J}var o,a,n,u={},A,p,h=r("readline-sync.stdout"),E=r("readline-sync.stderr"),w=r("readline-sync.exit"),D=r("readline-sync.done"),b=ve("crypto"),C,T,N;C=b.createHash(Mgt),C.update(""+process.pid+Ugt+++Math.random()),N=C.digest("hex"),T=b.createDecipher(WH,N),o=Nme(t),Xg?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+Th+"%Q%"+o.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+w+"%Q%%Q%) 2>%Q%"+E+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+WH+"%Q% %Q%"+N+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+D+"%Q%"]):(a="/bin/sh",n=["-c",'("'+Th+'"'+o.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+w+'") 2>"'+E+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+WH+'" "'+N+'" >"'+h+'"; echo 1 >"'+D+'"']),G2&&G2("_execFileSync",o);try{VH.spawn(a,n,e)}catch(U){u.error=new Error(U.message),u.error.method="_execFileSync - spawn",u.error.program=a,u.error.args=n}for(;Xn.readFileSync(D,{encoding:t.encoding}).trim()!=="1";);return(A=Xn.readFileSync(w,{encoding:t.encoding}).trim())==="0"?u.input=T.update(Xn.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+T.final(t.encoding):(p=Xn.readFileSync(E,{encoding:t.encoding}).trim(),u.error=new Error(Tme+(p?` +`+p:"")),u.error.method="_execFileSync",u.error.program=a,u.error.args=n,u.error.extMessage=p,u.error.exitCode=+A),Xn.unlinkSync(h),Xn.unlinkSync(E),Xn.unlinkSync(w),Xn.unlinkSync(D),u}function Hgt(t){var e,r={},o,a={env:process.env,encoding:t.encoding};if(Th||(Xg?process.env.PSModulePath?(Th="powershell.exe",zk=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(Th="cscript.exe",zk=["//nologo",__dirname+"\\read.cs.js"]):(Th="/bin/sh",zk=[__dirname+"/read.sh"])),Xg&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),VH.execFileSync){e=Nme(t),G2&&G2("execFileSync",e);try{r.input=VH.execFileSync(Th,e,a)}catch(n){o=n.stderr?(n.stderr+"").trim():"",r.error=new Error(Tme+(o?` +`+o:"")),r.error.method="execFileSync",r.error.program=Th,r.error.args=e,r.error.extMessage=o,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=_gt(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function zH(t){var e="",r=t.display,o=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=Hgt(t);if(n.error)throw n.error;return n.input}return JH&&JH(t),function(){var n,u,A;function p(){return n||(n=process.binding("fs"),u=process.binding("constants")),n}if(typeof Vf=="string")if(Vf=null,Xg){if(A=function(h){var E=h.replace(/^\D+/,"").split("."),w=0;return(E[0]=+E[0])&&(w+=E[0]*1e4),(E[1]=+E[1])&&(w+=E[1]*100),(E[2]=+E[2])&&(w+=E[2]),w}(process.version),!(A>=20302&&A<40204||A>=5e4&&A<50100||A>=50600&&A<60200)&&process.stdin.isTTY)process.stdin.pause(),Vf=process.stdin.fd,eC=process.stdin._handle;else try{Vf=p().open("CONIN$",u.O_RDWR,parseInt("0666",8)),eC=new Fme(Vf,!0)}catch{}if(process.stdout.isTTY)iu=process.stdout.fd;else{try{iu=Xn.openSync("\\\\.\\CON","w")}catch{}if(typeof iu!="number")try{iu=p().open("CONOUT$",u.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{Vf=Xn.openSync("/dev/tty","r"),eC=process.stdin._handle}catch{}}else try{Vf=Xn.openSync("/dev/tty","r"),eC=new Fme(Vf,!1)}catch{}if(process.stdout.isTTY)iu=process.stdout.fd;else try{iu=Xn.openSync("/dev/tty","w")}catch{}}}(),function(){var n,u,A=!t.hideEchoBack&&!t.keyIn,p,h,E,w,D;Xk="";function b(C){return C===Rme?!0:eC.setRawMode(C)!==0?!1:(Rme=C,!0)}if(Lme||!eC||typeof iu!="number"&&(t.display||!A)){e=a();return}if(t.display&&(Xn.writeSync(iu,t.display),t.display=""),!t.displayOnly){if(!b(!A)){e=a();return}for(h=t.keyIn?1:t.bufferSize,p=Buffer.allocUnsafe&&Buffer.alloc?Buffer.alloc(h):new Buffer(h),t.keyIn&&t.limit&&(u=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){E=0;try{E=Xn.readSync(Vf,p,0,h)}catch(C){if(C.code!=="EOF"){b(!1),e+=a();return}}if(E>0?(w=p.toString(t.encoding,0,E),Xk+=w):(w=` +`,Xk+="\0"),w&&typeof(D=(w.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(w=D,n=!0),w&&(w=w.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),w&&u&&(w=w.replace(u,"")),w&&(A||(t.hideEchoBack?t.mask&&Xn.writeSync(iu,new Array(w.length+1).join(t.mask)):Xn.writeSync(iu,w)),e+=w),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!A&&!o&&Xn.writeSync(iu,` +`),b(!1)}}(),t.print&&!o&&t.print(r+(t.displayOnly?"":(t.hideEchoBack?new Array(e.length+1).join(t.mask):e)+` +`),t.encoding),t.displayOnly?"":$H=t.keepWhitespace||t.keyIn?e:e.trim()}function qgt(t,e){var r=[];function o(a){a!=null&&(Array.isArray(a)?a.forEach(o):(!e||e(a))&&r.push(a))}return o(t),r}function e6(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function bs(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(KH),t.unshift(KH))),t.reduce(function(o,a){return a==null||(a.hasOwnProperty("noEchoBack")&&!a.hasOwnProperty("hideEchoBack")&&(a.hideEchoBack=a.noEchoBack,delete a.noEchoBack),a.hasOwnProperty("noTrim")&&!a.hasOwnProperty("keepWhitespace")&&(a.keepWhitespace=a.noTrim,delete a.noTrim),r||(e=Object.keys(a)),e.forEach(function(n){var u;if(a.hasOwnProperty(n))switch(u=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":u=u!=null?u+"":"",u&&n!=="limitMessage"&&(u=u.replace(/[\r\n]/g,"")),o[n]=u;break;case"bufferSize":!isNaN(u=parseInt(u,10))&&typeof u=="number"&&(o[n]=u);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":o[n]=!!u;break;case"limit":case"trueValue":case"falseValue":o[n]=qgt(u,function(A){var p=typeof A;return p==="string"||p==="number"||p==="function"||A instanceof RegExp}).map(function(A){return typeof A=="string"?A.replace(/[\r\n]/g,""):A});break;case"print":case"phContent":case"preCheck":o[n]=typeof u=="function"?u:void 0;break;case"prompt":case"display":o[n]=u??"";break}})),o},{})}function XH(t,e,r){return e.some(function(o){var a=typeof o;return a==="string"?r?t===o:t.toLowerCase()===o.toLowerCase():a==="number"?parseFloat(t)===o:a==="function"?o(t):o instanceof RegExp?o.test(t):!1})}function t6(t,e){var r=Lh.normalize(Xg?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=Lh.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+e6(r)+"(?=\\/|\\\\|$)",Xg?"i":""),"~")}function tC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",o=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(u,A,p,h,E,w){var D;return A||typeof(D=e(E))!="string"?p:D?(h||"")+D+(w||""):""}return t.replace(o,n).replace(a,n)}function Ome(t,e,r){var o,a=[],n=-1,u=0,A="",p;function h(E,w){return w.length>3?(E.push(w[0]+"..."+w[w.length-1]),p=!0):w.length&&(E=E.concat(w)),E}return o=t.reduce(function(E,w){return E.concat((w+"").split(""))},[]).reduce(function(E,w){var D,b;return e||(w=w.toLowerCase()),D=/^\d$/.test(w)?1:/^[A-Z]$/.test(w)?2:/^[a-z]$/.test(w)?3:0,r&&D===0?A+=w:(b=w.charCodeAt(0),D&&D===n&&b===u+1?a.push(w):(E=h(E,a),a=[w],n=D),u=b),E},[]),o=h(o,a),A&&(o.push(A),p=!0),{values:o,suppressed:p}}function Mme(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function Ume(t,e){var r,o,a={},n;if(e.phContent&&(r=e.phContent(t,e)),typeof r!="string")switch(t){case"hideEchoBack":case"mask":case"defaultInput":case"caseSensitive":case"keepWhitespace":case"encoding":case"bufferSize":case"history":case"cd":r=e.hasOwnProperty(t)?typeof e[t]=="boolean"?e[t]?"on":"off":e[t]+"":"";break;case"limit":case"trueValue":case"falseValue":o=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=Ome(o,e.caseSensitive),o=a.values):o=o.filter(function(u){var A=typeof u;return A==="string"||A==="number"}),r=Mme(o,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=$H;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=Lh.basename(r):t==="cwdHome"&&(r=t6(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(u){return u.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=zg[zg.length-n]||"")}return r}function _me(t){var e=/^(.)-(.)$/.exec(t),r="",o,a,n,u;if(!e)return null;for(o=e[1].charCodeAt(0),a=e[2].charCodeAt(0),u=o +And the length must be: $`,trueValue:null,falseValue:null,caseSensitive:!0},e,{history:!1,cd:!1,phContent:function(b){return b==="charlist"?r.text:b==="length"?o+"..."+a:null}}),u,A,p,h,E,w,D;for(e=e||{},u=tC(e.charlist?e.charlist+"":"$",_me),(isNaN(o=parseInt(e.min,10))||typeof o!="number")&&(o=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+e6(u)+"]{"+o+","+a+"}$"),r=Ome([u],n.caseSensitive,!0),r.text=Mme(r.values,r.suppressed),A=e.confirmMessage!=null?e.confirmMessage:"Reinput a same one to confirm it: ",p=e.unmatchMessage!=null?e.unmatchMessage:"It differs from first one. Hit only the Enter key if you want to retry from first one.",t==null&&(t="Input new password: "),E=n.limitMessage;!D;)n.limit=h,n.limitMessage=E,w=Kr.question(t,n),n.limit=[w,""],n.limitMessage=p,D=Kr.question(A,n);return w};function jme(t,e,r){var o;function a(n){return o=r(n),!isNaN(o)&&typeof o=="number"}return Kr.question(t,bs({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),o}Kr.questionInt=function(t,e){return jme(t,e,function(r){return parseInt(r,10)})};Kr.questionFloat=function(t,e){return jme(t,e,parseFloat)};Kr.questionPath=function(t,e){var r,o="",a=bs({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var u,A,p;n=t6(n,!0),o="";function h(E){E.split(/\/|\\/).reduce(function(w,D){var b=Lh.resolve(w+=D+Lh.sep);if(!Xn.existsSync(b))Xn.mkdirSync(b);else if(!Xn.statSync(b).isDirectory())throw new Error("Non directory already exists: "+b);return w},"")}try{if(u=Xn.existsSync(n),r=u?Xn.realpathSync(n):Lh.resolve(n),!e.hasOwnProperty("exists")&&!u||typeof e.exists=="boolean"&&e.exists!==u)return o=(u?"Already exists":"No such file or directory")+": "+r,!1;if(!u&&e.create&&(e.isDirectory?h(r):(h(Lh.dirname(r)),Xn.closeSync(Xn.openSync(r,"w"))),r=Xn.realpathSync(r)),u&&(e.min||e.max||e.isFile||e.isDirectory)){if(A=Xn.statSync(r),e.isFile&&!A.isFile())return o="Not file: "+r,!1;if(e.isDirectory&&!A.isDirectory())return o="Not directory: "+r,!1;if(e.min&&A.size<+e.min||e.max&&A.size>+e.max)return o="Size "+A.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(o=p),!1}catch(E){return o=E+"",!1}return!0},phContent:function(n){return n==="error"?o:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),Kr.question(t,a),r};function Gme(t,e){var r={},o={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(o[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=ZH(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&o.hasOwnProperty(n)?o[n].apply(a,r.args.slice(1)):o.hasOwnProperty("_")?o._.apply(a,r.args):null,{res:a,forceNext:!1}},o.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),o.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=ZH(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}Kr.promptCL=function(t,e){var r=bs({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=Gme(t,r);return r.limit=o.limit,r.preCheck=o.preCheck,Kr.prompt(r),o.args};Kr.promptLoop=function(t,e){for(var r=bs({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t(Kr.prompt(r)););};Kr.promptCLLoop=function(t,e){var r=bs({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=Gme(t,r);for(r.limit=o.limit,r.preCheck=o.preCheck;Kr.prompt(r),!o.hRes;);};Kr.promptSimShell=function(t){return Kr.prompt(bs({hideEchoBack:!1,history:!0},t,{prompt:function(){return Xg?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function Wme(t,e,r){var o;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),o=Kr.keyIn(t,bs(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof o=="boolean"?o:""}Kr.keyInYN=function(t,e){return Wme(t,e)};Kr.keyInYNStrict=function(t,e){return Wme(t,e,"yn")};Kr.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),Kr.keyIn(t,bs({limit:null},e,{hideEchoBack:!0,mask:""}))};Kr.keyInSelect=function(t,e,r){var o=bs({hideEchoBack:!1},r,{trueValue:null,falseValue:null,caseSensitive:!1,phContent:function(p){return p==="itemsCount"?t.length+"":p==="firstItem"?(t[0]+"").trim():p==="lastItem"?(t[t.length-1]+"").trim():null}}),a="",n={},u=49,A=` +`;if(!Array.isArray(t)||!t.length||t.length>35)throw"`items` must be Array (max length: 35).";return t.forEach(function(p,h){var E=String.fromCharCode(u);a+=E,n[E]=h,A+="["+E+"] "+(p+"").trim()+` +`,u=u===57?97:u+1}),(!r||r.cancel!==!1)&&(a+="0",n[0]=-1,A+="[0] "+(r&&r.cancel!=null&&typeof r.cancel!="boolean"?(r.cancel+"").trim():"CANCEL")+` +`),o.limit=a,A+=` +`,e==null&&(e="Choose one from list: "),(e+="")&&((!r||r.guide!==!1)&&(e=e.replace(/\s*:?\s*$/,"")+" [$]: "),A+=e),n[Kr.keyIn(A,o).toLowerCase()]};Kr.getRawInput=function(){return Xk};function W2(t,e){var r;return e.length&&(r={},r[t]=e[0]),Kr.setDefaultOptions(r)[t]}Kr.setPrint=function(){return W2("print",arguments)};Kr.setPrompt=function(){return W2("prompt",arguments)};Kr.setEncoding=function(){return W2("encoding",arguments)};Kr.setMask=function(){return W2("mask",arguments)};Kr.setBufferSize=function(){return W2("bufferSize",arguments)}});var r6=_((O9t,El)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(I,P,y){var R=tau_file_system.files[I];if(!R){if(y==="read")return null;R={path:I,text:"",type:P,get:function(z,X){return X===this.text.length||X>this.text.length?"end_of_file":this.text.substring(X,X+z)},put:function(z,X){return X==="end_of_file"?(this.text+=z,!0):X==="past_end_of_file"?null:(this.text=this.text.substring(0,X)+z+this.text.substring(X+z.length),!0)},get_byte:function(z){if(z==="end_of_stream")return-1;var X=Math.floor(z/2);if(this.text.length<=X)return-1;var $=n(this.text[Math.floor(z/2)],0);return z%2===0?$&255:$/256>>>0},put_byte:function(z,X){var $=X==="end_of_stream"?this.text.length:Math.floor(X/2);if(this.text.length<$)return null;var se=this.text.length===$?-1:n(this.text[Math.floor(X/2)],0);return X%2===0?(se=se/256>>>0,se=(se&255)<<8|z&255):(se=se&255,se=(z&255)<<8|se&255),this.text.length===$?this.text+=u(se):this.text=this.text.substring(0,$)+u(se)+this.text.substring($+1),!0},flush:function(){return!0},close:function(){var z=tau_file_system.files[this.path];return z?!0:null}},tau_file_system.files[I]=R}return y==="write"&&(R.text=""),R}},tau_user_input={buffer:"",get:function(I,P){for(var y;tau_user_input.buffer.length\?\@\^\~\\]+|'(?:[^']*?(?:\\(?:x?\d+)?\\)*(?:'')*(?:\\')*)*')/,number:/^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abfnrtv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/,string:/^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/,l_brace:/^(?:\[)/,r_brace:/^(?:\])/,l_bracket:/^(?:\{)/,r_bracket:/^(?:\})/,bar:/^(?:\|)/,l_paren:/^(?:\()/,r_paren:/^(?:\))/};function N(I,P){return I.get_flag("char_conversion").id==="on"?P.replace(/./g,function(y){return I.get_char_conversion(y)}):P}function U(I){this.thread=I,this.text="",this.tokens=[]}U.prototype.set_last_tokens=function(I){return this.tokens=I},U.prototype.new_text=function(I){this.text=I,this.tokens=[]},U.prototype.get_tokens=function(I){var P,y=0,R=0,z=0,X=[],$=!1;if(I){var se=this.tokens[I-1];y=se.len,P=N(this.thread,this.text.substr(se.len)),R=se.line,z=se.start}else P=this.text;if(/^\s*$/.test(P))return null;for(;P!=="";){var be=[],Fe=!1;if(/^\n/.exec(P)!==null){R++,z=0,y++,P=P.replace(/\n/,""),$=!0;continue}for(var lt in T)if(T.hasOwnProperty(lt)){var Et=T[lt].exec(P);Et&&be.push({value:Et[0],name:lt,matches:Et})}if(!be.length)return this.set_last_tokens([{value:P,matches:[],name:"lexical",line:R,start:z}]);var se=r(be,function(Sr,yr){return Sr.value.length>=yr.value.length?Sr:yr});switch(se.start=z,se.line=R,P=P.replace(se.value,""),z+=se.value.length,y+=se.value.length,se.name){case"atom":se.raw=se.value,se.value.charAt(0)==="'"&&(se.value=D(se.value.substr(1,se.value.length-2),"'"),se.value===null&&(se.name="lexical",se.value="unknown escape sequence"));break;case"number":se.float=se.value.substring(0,2)!=="0x"&&se.value.match(/[.eE]/)!==null&&se.value!=="0'.",se.value=C(se.value),se.blank=Fe;break;case"string":var qt=se.value.charAt(0);se.value=D(se.value.substr(1,se.value.length-2),qt),se.value===null&&(se.name="lexical",se.value="unknown escape sequence");break;case"whitespace":var nr=X[X.length-1];nr&&(nr.space=!0),Fe=!0;continue;case"r_bracket":X.length>0&&X[X.length-1].name==="l_bracket"&&(se=X.pop(),se.name="atom",se.value="{}",se.raw="{}",se.space=!1);break;case"r_brace":X.length>0&&X[X.length-1].name==="l_brace"&&(se=X.pop(),se.name="atom",se.value="[]",se.raw="[]",se.space=!1);break}se.len=y,X.push(se),Fe=!1}var Pt=this.set_last_tokens(X);return Pt.length===0?null:Pt};function J(I,P,y,R,z){if(!P[y])return{type:A,value:x.error.syntax(P[y-1],"expression expected",!0)};var X;if(R==="0"){var $=P[y];switch($.name){case"number":return{type:p,len:y+1,value:new x.type.Num($.value,$.float)};case"variable":return{type:p,len:y+1,value:new x.type.Var($.value)};case"string":var se;switch(I.get_flag("double_quotes").id){case"atom":se=new q($.value,[]);break;case"codes":se=new q("[]",[]);for(var be=$.value.length-1;be>=0;be--)se=new q(".",[new x.type.Num(n($.value,be),!1),se]);break;case"chars":se=new q("[]",[]);for(var be=$.value.length-1;be>=0;be--)se=new q(".",[new x.type.Term($.value.charAt(be),[]),se]);break}return{type:p,len:y+1,value:se};case"l_paren":var Pt=J(I,P,y+1,I.__get_max_priority(),!0);return Pt.type!==p?Pt:P[Pt.len]&&P[Pt.len].name==="r_paren"?(Pt.len++,Pt):{type:A,derived:!0,value:x.error.syntax(P[Pt.len]?P[Pt.len]:P[Pt.len-1],") or operator expected",!P[Pt.len])};case"l_bracket":var Pt=J(I,P,y+1,I.__get_max_priority(),!0);return Pt.type!==p?Pt:P[Pt.len]&&P[Pt.len].name==="r_bracket"?(Pt.len++,Pt.value=new q("{}",[Pt.value]),Pt):{type:A,derived:!0,value:x.error.syntax(P[Pt.len]?P[Pt.len]:P[Pt.len-1],"} or operator expected",!P[Pt.len])}}var Fe=te(I,P,y,z);return Fe.type===p||Fe.derived||(Fe=le(I,P,y),Fe.type===p||Fe.derived)?Fe:{type:A,derived:!1,value:x.error.syntax(P[y],"unexpected token")}}var lt=I.__get_max_priority(),Et=I.__get_next_priority(R),qt=y;if(P[y].name==="atom"&&P[y+1]&&(P[y].space||P[y+1].name!=="l_paren")){var $=P[y++],nr=I.__lookup_operator_classes(R,$.value);if(nr&&nr.indexOf("fy")>-1){var Pt=J(I,P,y,R,z);if(Pt.type!==A)return $.value==="-"&&!$.space&&x.type.is_number(Pt.value)?{value:new x.type.Num(-Pt.value.value,Pt.value.is_float),len:Pt.len,type:p}:{value:new x.type.Term($.value,[Pt.value]),len:Pt.len,type:p};X=Pt}else if(nr&&nr.indexOf("fx")>-1){var Pt=J(I,P,y,Et,z);if(Pt.type!==A)return{value:new x.type.Term($.value,[Pt.value]),len:Pt.len,type:p};X=Pt}}y=qt;var Pt=J(I,P,y,Et,z);if(Pt.type===p){y=Pt.len;var $=P[y];if(P[y]&&(P[y].name==="atom"&&I.__lookup_operator_classes(R,$.value)||P[y].name==="bar"&&I.__lookup_operator_classes(R,"|"))){var cn=Et,Sr=R,nr=I.__lookup_operator_classes(R,$.value);if(nr.indexOf("xf")>-1)return{value:new x.type.Term($.value,[Pt.value]),len:++Pt.len,type:p};if(nr.indexOf("xfx")>-1){var yr=J(I,P,y+1,cn,z);return yr.type===p?{value:new x.type.Term($.value,[Pt.value,yr.value]),len:yr.len,type:p}:(yr.derived=!0,yr)}else if(nr.indexOf("xfy")>-1){var yr=J(I,P,y+1,Sr,z);return yr.type===p?{value:new x.type.Term($.value,[Pt.value,yr.value]),len:yr.len,type:p}:(yr.derived=!0,yr)}else if(Pt.type!==A)for(;;){y=Pt.len;var $=P[y];if($&&$.name==="atom"&&I.__lookup_operator_classes(R,$.value)){var nr=I.__lookup_operator_classes(R,$.value);if(nr.indexOf("yf")>-1)Pt={value:new x.type.Term($.value,[Pt.value]),len:++y,type:p};else if(nr.indexOf("yfx")>-1){var yr=J(I,P,++y,cn,z);if(yr.type===A)return yr.derived=!0,yr;y=yr.len,Pt={value:new x.type.Term($.value,[Pt.value,yr.value]),len:y,type:p}}else break}else break}}else X={type:A,value:x.error.syntax(P[Pt.len-1],"operator expected")};return Pt}return Pt}function te(I,P,y,R){if(!P[y]||P[y].name==="atom"&&P[y].raw==="."&&!R&&(P[y].space||!P[y+1]||P[y+1].name!=="l_paren"))return{type:A,derived:!1,value:x.error.syntax(P[y-1],"unfounded token")};var z=P[y],X=[];if(P[y].name==="atom"&&P[y].raw!==","){if(y++,P[y-1].space)return{type:p,len:y,value:new x.type.Term(z.value,X)};if(P[y]&&P[y].name==="l_paren"){if(P[y+1]&&P[y+1].name==="r_paren")return{type:A,derived:!0,value:x.error.syntax(P[y+1],"argument expected")};var $=J(I,P,++y,"999",!0);if($.type===A)return $.derived?$:{type:A,derived:!0,value:x.error.syntax(P[y]?P[y]:P[y-1],"argument expected",!P[y])};for(X.push($.value),y=$.len;P[y]&&P[y].name==="atom"&&P[y].value===",";){if($=J(I,P,y+1,"999",!0),$.type===A)return $.derived?$:{type:A,derived:!0,value:x.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};X.push($.value),y=$.len}if(P[y]&&P[y].name==="r_paren")y++;else return{type:A,derived:!0,value:x.error.syntax(P[y]?P[y]:P[y-1],", or ) expected",!P[y])}}return{type:p,len:y,value:new x.type.Term(z.value,X)}}return{type:A,derived:!1,value:x.error.syntax(P[y],"term expected")}}function le(I,P,y){if(!P[y])return{type:A,derived:!1,value:x.error.syntax(P[y-1],"[ expected")};if(P[y]&&P[y].name==="l_brace"){var R=J(I,P,++y,"999",!0),z=[R.value],X=void 0;if(R.type===A)return P[y]&&P[y].name==="r_brace"?{type:p,len:y+1,value:new x.type.Term("[]",[])}:{type:A,derived:!0,value:x.error.syntax(P[y],"] expected")};for(y=R.len;P[y]&&P[y].name==="atom"&&P[y].value===",";){if(R=J(I,P,y+1,"999",!0),R.type===A)return R.derived?R:{type:A,derived:!0,value:x.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};z.push(R.value),y=R.len}var $=!1;if(P[y]&&P[y].name==="bar"){if($=!0,R=J(I,P,y+1,"999",!0),R.type===A)return R.derived?R:{type:A,derived:!0,value:x.error.syntax(P[y+1]?P[y+1]:P[y],"argument expected",!P[y+1])};X=R.value,y=R.len}return P[y]&&P[y].name==="r_brace"?{type:p,len:y+1,value:g(z,X)}:{type:A,derived:!0,value:x.error.syntax(P[y]?P[y]:P[y-1],$?"] expected":", or | or ] expected",!P[y])}}return{type:A,derived:!1,value:x.error.syntax(P[y],"list expected")}}function ce(I,P,y){var R=P[y].line,z=J(I,P,y,I.__get_max_priority(),!1),X=null,$;if(z.type!==A)if(y=z.len,P[y]&&P[y].name==="atom"&&P[y].raw===".")if(y++,x.type.is_term(z.value)){if(z.value.indicator===":-/2"?(X=new x.type.Rule(z.value.args[0],Ee(z.value.args[1])),$={value:X,len:y,type:p}):z.value.indicator==="-->/2"?(X=he(new x.type.Rule(z.value.args[0],z.value.args[1]),I),X.body=Ee(X.body),$={value:X,len:y,type:x.type.is_rule(X)?p:A}):(X=new x.type.Rule(z.value,null),$={value:X,len:y,type:p}),X){var se=X.singleton_variables();se.length>0&&I.throw_warning(x.warning.singleton(se,X.head.indicator,R))}return $}else return{type:A,value:x.error.syntax(P[y],"callable expected")};else return{type:A,value:x.error.syntax(P[y]?P[y]:P[y-1],". or operator expected")};return z}function ue(I,P,y){y=y||{},y.from=y.from?y.from:"$tau-js",y.reconsult=y.reconsult!==void 0?y.reconsult:!0;var R=new U(I),z={},X;R.new_text(P);var $=0,se=R.get_tokens($);do{if(se===null||!se[$])break;var be=ce(I,se,$);if(be.type===A)return new q("throw",[be.value]);if(be.value.body===null&&be.value.head.indicator==="?-/1"){var Fe=new tt(I.session);Fe.add_goal(be.value.head.args[0]),Fe.answer(function(Et){x.type.is_error(Et)?I.throw_warning(Et.args[0]):(Et===!1||Et===null)&&I.throw_warning(x.warning.failed_goal(be.value.head.args[0],be.len))}),$=be.len;var lt=!0}else if(be.value.body===null&&be.value.head.indicator===":-/1"){var lt=I.run_directive(be.value.head.args[0]);$=be.len,be.value.head.args[0].indicator==="char_conversion/2"&&(se=R.get_tokens($),$=0)}else{X=be.value.head.indicator,y.reconsult!==!1&&z[X]!==!0&&!I.is_multifile_predicate(X)&&(I.session.rules[X]=a(I.session.rules[X]||[],function(qt){return qt.dynamic}),z[X]=!0);var lt=I.add_rule(be.value,y);$=be.len}if(!lt)return lt}while(!0);return!0}function Ie(I,P){var y=new U(I);y.new_text(P);var R=0;do{var z=y.get_tokens(R);if(z===null)break;var X=J(I,z,0,I.__get_max_priority(),!1);if(X.type!==A){var $=X.len,se=$;if(z[$]&&z[$].name==="atom"&&z[$].raw===".")I.add_goal(Ee(X.value));else{var be=z[$];return new q("throw",[x.error.syntax(be||z[$-1],". or operator expected",!be)])}R=X.len+1}else return new q("throw",[X.value])}while(!0);return!0}function he(I,P){I=I.rename(P);var y=P.next_free_variable(),R=De(I.body,y,P);return R.error?R.value:(I.body=R.value,I.head.args=I.head.args.concat([y,R.variable]),I.head=new q(I.head.id,I.head.args),I)}function De(I,P,y){var R;if(x.type.is_term(I)&&I.indicator==="!/0")return{value:I,variable:P,error:!1};if(x.type.is_term(I)&&I.indicator===",/2"){var z=De(I.args[0],P,y);if(z.error)return z;var X=De(I.args[1],z.variable,y);return X.error?X:{value:new q(",",[z.value,X.value]),variable:X.variable,error:!1}}else{if(x.type.is_term(I)&&I.indicator==="{}/1")return{value:I.args[0],variable:P,error:!1};if(x.type.is_empty_list(I))return{value:new q("true",[]),variable:P,error:!1};if(x.type.is_list(I)){R=y.next_free_variable();for(var $=I,se;$.indicator==="./2";)se=$,$=$.args[1];return x.type.is_variable($)?{value:x.error.instantiation("DCG"),variable:P,error:!0}:x.type.is_empty_list($)?(se.args[1]=R,{value:new q("=",[P,I]),variable:R,error:!1}):{value:x.error.type("list",I,"DCG"),variable:P,error:!0}}else return x.type.is_callable(I)?(R=y.next_free_variable(),I.args=I.args.concat([P,R]),I=new q(I.id,I.args),{value:I,variable:R,error:!1}):{value:x.error.type("callable",I,"DCG"),variable:P,error:!0}}}function Ee(I){return x.type.is_variable(I)?new q("call",[I]):x.type.is_term(I)&&[",/2",";/2","->/2"].indexOf(I.indicator)!==-1?new q(I.id,[Ee(I.args[0]),Ee(I.args[1])]):I}function g(I,P){for(var y=P||new x.type.Term("[]",[]),R=I.length-1;R>=0;R--)y=new x.type.Term(".",[I[R],y]);return y}function me(I,P){for(var y=I.length-1;y>=0;y--)I[y]===P&&I.splice(y,1)}function Ce(I){for(var P={},y=[],R=0;R=0;P--)if(I.charAt(P)==="/")return new q("/",[new q(I.substring(0,P)),new Re(parseInt(I.substring(P+1)),!1)])}function Se(I){this.id=I}function Re(I,P){this.is_float=P!==void 0?P:parseInt(I)!==I,this.value=this.is_float?I:parseInt(I)}var ht=0;function q(I,P,y){this.ref=y||++ht,this.id=I,this.args=P||[],this.indicator=I+"/"+this.args.length}var nt=0;function Le(I,P,y,R,z,X){this.id=nt++,this.stream=I,this.mode=P,this.alias=y,this.type=R!==void 0?R:"text",this.reposition=z!==void 0?z:!0,this.eof_action=X!==void 0?X:"eof_code",this.position=this.mode==="append"?"end_of_stream":0,this.output=this.mode==="write"||this.mode==="append",this.input=this.mode==="read"}function Te(I){I=I||{},this.links=I}function ke(I,P,y){P=P||new Te,y=y||null,this.goal=I,this.substitution=P,this.parent=y}function Ke(I,P,y){this.head=I,this.body=P,this.dynamic=y||!1}function xe(I){I=I===void 0||I<=0?1e3:I,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new tt(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=I,this.streams={user_input:new Le(typeof El<"u"&&El.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Le(typeof El<"u"&&El.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof El<"u"&&El.exports?nodejs_file_system:tau_file_system,this.standard_input=this.streams.user_input,this.standard_output=this.streams.user_output,this.current_input=this.streams.user_input,this.current_output=this.streams.user_output,this.format_success=function(P){return P.substitution},this.format_error=function(P){return P.goal},this.flag={bounded:x.flag.bounded.value,max_integer:x.flag.max_integer.value,min_integer:x.flag.min_integer.value,integer_rounding_function:x.flag.integer_rounding_function.value,char_conversion:x.flag.char_conversion.value,debug:x.flag.debug.value,max_arity:x.flag.max_arity.value,unknown:x.flag.unknown.value,double_quotes:x.flag.double_quotes.value,occurs_check:x.flag.occurs_check.value,dialect:x.flag.dialect.value,version_data:x.flag.version_data.value,nodejs:x.flag.nodejs.value},this.__loaded_modules=[],this.__char_conversion={},this.__operators={1200:{":-":["fx","xfx"],"-->":["xfx"],"?-":["fx"]},1100:{";":["xfy"]},1050:{"->":["xfy"]},1e3:{",":["xfy"]},900:{"\\+":["fy"]},700:{"=":["xfx"],"\\=":["xfx"],"==":["xfx"],"\\==":["xfx"],"@<":["xfx"],"@=<":["xfx"],"@>":["xfx"],"@>=":["xfx"],"=..":["xfx"],is:["xfx"],"=:=":["xfx"],"=\\=":["xfx"],"<":["xfx"],"=<":["xfx"],">":["xfx"],">=":["xfx"]},600:{":":["xfy"]},500:{"+":["yfx"],"-":["yfx"],"/\\":["yfx"],"\\/":["yfx"]},400:{"*":["yfx"],"/":["yfx"],"//":["yfx"],rem:["yfx"],mod:["yfx"],"<<":["yfx"],">>":["yfx"]},200:{"**":["xfx"],"^":["xfy"],"-":["fy"],"+":["fy"],"\\":["fy"]}}}function tt(I){this.epoch=Date.now(),this.session=I,this.session.total_threads++,this.total_steps=0,this.cpu_time=0,this.cpu_time_last=0,this.points=[],this.debugger=!1,this.debugger_states=[],this.level="top_level/0",this.__calls=[],this.current_limit=this.session.limit,this.warnings=[]}function He(I,P,y){this.id=I,this.rules=P,this.exports=y,x.module[I]=this}He.prototype.exports_predicate=function(I){return this.exports.indexOf(I)!==-1},Se.prototype.unify=function(I,P){if(P&&e(I.variables(),this.id)!==-1&&!x.type.is_variable(I))return null;var y={};return y[this.id]=I,new Te(y)},Re.prototype.unify=function(I,P){return x.type.is_number(I)&&this.value===I.value&&this.is_float===I.is_float?new Te:null},q.prototype.unify=function(I,P){if(x.type.is_term(I)&&this.indicator===I.indicator){for(var y=new Te,R=0;R=0){var R=this.args[0].value,z=Math.floor(R/26),X=R%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[X]+(z!==0?z:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(I)+"}";case"./2":for(var $="["+this.args[0].toString(I),se=this.args[1];se.indicator==="./2";)$+=", "+se.args[0].toString(I),se=se.args[1];return se.indicator!=="[]/0"&&($+="|"+se.toString(I)),$+="]",$;case",/2":return"("+this.args[0].toString(I)+", "+this.args[1].toString(I)+")";default:var be=this.id,Fe=I.session?I.session.lookup_operator(this.id,this.args.length):null;if(I.session===void 0||I.ignore_ops||Fe===null)return I.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(be)&&be!=="{}"&&be!=="[]"&&(be="'"+b(be)+"'"),be+(this.args.length?"("+o(this.args,function(nr){return nr.toString(I)}).join(", ")+")":"");var lt=Fe.priority>P.priority||Fe.priority===P.priority&&(Fe.class==="xfy"&&this.indicator!==P.indicator||Fe.class==="yfx"&&this.indicator!==P.indicator||this.indicator===P.indicator&&Fe.class==="yfx"&&y==="right"||this.indicator===P.indicator&&Fe.class==="xfy"&&y==="left");Fe.indicator=this.indicator;var Et=lt?"(":"",qt=lt?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Fe.class)!==-1?Et+be+" "+this.args[0].toString(I,Fe)+qt:["yf","xf"].indexOf(Fe.class)!==-1?Et+this.args[0].toString(I,Fe)+" "+be+qt:Et+this.args[0].toString(I,Fe,"left")+" "+this.id+" "+this.args[1].toString(I,Fe,"right")+qt}},Le.prototype.toString=function(I){return"("+this.id+")"},Te.prototype.toString=function(I){var P="{";for(var y in this.links)this.links.hasOwnProperty(y)&&(P!=="{"&&(P+=", "),P+=y+"/"+this.links[y].toString(I));return P+="}",P},ke.prototype.toString=function(I){return this.goal===null?"<"+this.substitution.toString(I)+">":"<"+this.goal.toString(I)+", "+this.substitution.toString(I)+">"},Ke.prototype.toString=function(I){return this.body?this.head.toString(I)+" :- "+this.body.toString(I)+".":this.head.toString(I)+"."},xe.prototype.toString=function(I){for(var P="",y=0;y=0;z--)R=new q(".",[P[z],R]);return R}return new q(this.id,o(this.args,function(X){return X.apply(I)}),this.ref)},Le.prototype.apply=function(I){return this},Ke.prototype.apply=function(I){return new Ke(this.head.apply(I),this.body!==null?this.body.apply(I):null)},Te.prototype.apply=function(I){var P,y={};for(P in this.links)this.links.hasOwnProperty(P)&&(y[P]=this.links[P].apply(I));return new Te(y)},q.prototype.select=function(){for(var I=this;I.indicator===",/2";)I=I.args[0];return I},q.prototype.replace=function(I){return this.indicator===",/2"?this.args[0].indicator===",/2"?new q(",",[this.args[0].replace(I),this.args[1]]):I===null?this.args[1]:new q(",",[I,this.args[1]]):I},q.prototype.search=function(I){if(x.type.is_term(I)&&I.ref!==void 0&&this.ref===I.ref)return!0;for(var P=0;PP&&R0&&(P=this.head_point().substitution.domain());e(P,x.format_variable(this.session.rename))!==-1;)this.session.rename++;if(I.id==="_")return new Se(x.format_variable(this.session.rename));this.session.renamed_variables[I.id]=x.format_variable(this.session.rename)}return new Se(this.session.renamed_variables[I.id])},xe.prototype.next_free_variable=function(){return this.thread.next_free_variable()},tt.prototype.next_free_variable=function(){this.session.rename++;var I=[];for(this.points.length>0&&(I=this.head_point().substitution.domain());e(I,x.format_variable(this.session.rename))!==-1;)this.session.rename++;return new Se(x.format_variable(this.session.rename))},xe.prototype.is_public_predicate=function(I){return!this.public_predicates.hasOwnProperty(I)||this.public_predicates[I]===!0},tt.prototype.is_public_predicate=function(I){return this.session.is_public_predicate(I)},xe.prototype.is_multifile_predicate=function(I){return this.multifile_predicates.hasOwnProperty(I)&&this.multifile_predicates[I]===!0},tt.prototype.is_multifile_predicate=function(I){return this.session.is_multifile_predicate(I)},xe.prototype.prepend=function(I){return this.thread.prepend(I)},tt.prototype.prepend=function(I){for(var P=I.length-1;P>=0;P--)this.points.push(I[P])},xe.prototype.success=function(I,P){return this.thread.success(I,P)},tt.prototype.success=function(I,y){var y=typeof y>"u"?I:y;this.prepend([new ke(I.goal.replace(null),I.substitution,y)])},xe.prototype.throw_error=function(I){return this.thread.throw_error(I)},tt.prototype.throw_error=function(I){this.prepend([new ke(new q("throw",[I]),new Te,null,null)])},xe.prototype.step_rule=function(I,P){return this.thread.step_rule(I,P)},tt.prototype.step_rule=function(I,P){var y=P.indicator;if(I==="user"&&(I=null),I===null&&this.session.rules.hasOwnProperty(y))return this.session.rules[y];for(var R=I===null?this.session.modules:e(this.session.modules,I)===-1?[]:[I],z=0;z1)&&this.again()},xe.prototype.answers=function(I,P,y){return this.thread.answers(I,P,y)},tt.prototype.answers=function(I,P,y){var R=P||1e3,z=this;if(P<=0){y&&y();return}this.answer(function(X){I(X),X!==!1?setTimeout(function(){z.answers(I,P-1,y)},1):y&&y()})},xe.prototype.again=function(I){return this.thread.again(I)},tt.prototype.again=function(I){for(var P,y=Date.now();this.__calls.length>0;){for(this.warnings=[],I!==!1&&(this.current_limit=this.session.limit);this.current_limit>0&&this.points.length>0&&this.head_point().goal!==null&&!x.type.is_error(this.head_point().goal);)if(this.current_limit--,this.step()===!0)return;var R=Date.now();this.cpu_time_last=R-y,this.cpu_time+=this.cpu_time_last;var z=this.__calls.shift();this.current_limit<=0?z(null):this.points.length===0?z(!1):x.type.is_error(this.head_point().goal)?(P=this.session.format_error(this.points.pop()),this.points=[],z(P)):(this.debugger&&this.debugger_states.push(this.head_point()),P=this.session.format_success(this.points.pop()),z(P))}},xe.prototype.unfold=function(I){if(I.body===null)return!1;var P=I.head,y=I.body,R=y.select(),z=new tt(this),X=[];z.add_goal(R),z.step();for(var $=z.points.length-1;$>=0;$--){var se=z.points[$],be=P.apply(se.substitution),Fe=y.replace(se.goal);Fe!==null&&(Fe=Fe.apply(se.substitution)),X.push(new Ke(be,Fe))}var lt=this.rules[P.indicator],Et=e(lt,I);return X.length>0&&Et!==-1?(lt.splice.apply(lt,[Et,1].concat(X)),!0):!1},tt.prototype.unfold=function(I){return this.session.unfold(I)},Se.prototype.interpret=function(I){return x.error.instantiation(I.level)},Re.prototype.interpret=function(I){return this},q.prototype.interpret=function(I){return x.type.is_unitary_list(this)?this.args[0].interpret(I):x.operate(I,this)},Se.prototype.compare=function(I){return this.idI.id?1:0},Re.prototype.compare=function(I){if(this.value===I.value&&this.is_float===I.is_float)return 0;if(this.valueI.value)return 1},q.prototype.compare=function(I){if(this.args.lengthI.args.length||this.args.length===I.args.length&&this.id>I.id)return 1;for(var P=0;PR)return 1;if(I.constructor===Re){if(I.is_float&&P.is_float)return 0;if(I.is_float)return-1;if(P.is_float)return 1}return 0},is_substitution:function(I){return I instanceof Te},is_state:function(I){return I instanceof ke},is_rule:function(I){return I instanceof Ke},is_variable:function(I){return I instanceof Se},is_stream:function(I){return I instanceof Le},is_anonymous_var:function(I){return I instanceof Se&&I.id==="_"},is_callable:function(I){return I instanceof q},is_number:function(I){return I instanceof Re},is_integer:function(I){return I instanceof Re&&!I.is_float},is_float:function(I){return I instanceof Re&&I.is_float},is_term:function(I){return I instanceof q},is_atom:function(I){return I instanceof q&&I.args.length===0},is_ground:function(I){if(I instanceof Se)return!1;if(I instanceof q){for(var P=0;P0},is_list:function(I){return I instanceof q&&(I.indicator==="[]/0"||I.indicator==="./2")},is_empty_list:function(I){return I instanceof q&&I.indicator==="[]/0"},is_non_empty_list:function(I){return I instanceof q&&I.indicator==="./2"},is_fully_list:function(I){for(;I instanceof q&&I.indicator==="./2";)I=I.args[1];return I instanceof Se||I instanceof q&&I.indicator==="[]/0"},is_instantiated_list:function(I){for(;I instanceof q&&I.indicator==="./2";)I=I.args[1];return I instanceof q&&I.indicator==="[]/0"},is_unitary_list:function(I){return I instanceof q&&I.indicator==="./2"&&I.args[1]instanceof q&&I.args[1].indicator==="[]/0"},is_character:function(I){return I instanceof q&&(I.id.length===1||I.id.length>0&&I.id.length<=2&&n(I.id,0)>=65536)},is_character_code:function(I){return I instanceof Re&&!I.is_float&&I.value>=0&&I.value<=1114111},is_byte:function(I){return I instanceof Re&&!I.is_float&&I.value>=0&&I.value<=255},is_operator:function(I){return I instanceof q&&x.arithmetic.evaluation[I.indicator]},is_directive:function(I){return I instanceof q&&x.directive[I.indicator]!==void 0},is_builtin:function(I){return I instanceof q&&x.predicate[I.indicator]!==void 0},is_error:function(I){return I instanceof q&&I.indicator==="throw/1"},is_predicate_indicator:function(I){return I instanceof q&&I.indicator==="//2"&&I.args[0]instanceof q&&I.args[0].args.length===0&&I.args[1]instanceof Re&&I.args[1].is_float===!1},is_flag:function(I){return I instanceof q&&I.args.length===0&&x.flag[I.id]!==void 0},is_value_flag:function(I,P){if(!x.type.is_flag(I))return!1;for(var y in x.flag[I.id].allowed)if(x.flag[I.id].allowed.hasOwnProperty(y)&&x.flag[I.id].allowed[y].equals(P))return!0;return!1},is_io_mode:function(I){return x.type.is_atom(I)&&["read","write","append"].indexOf(I.id)!==-1},is_stream_option:function(I){return x.type.is_term(I)&&(I.indicator==="alias/1"&&x.type.is_atom(I.args[0])||I.indicator==="reposition/1"&&x.type.is_atom(I.args[0])&&(I.args[0].id==="true"||I.args[0].id==="false")||I.indicator==="type/1"&&x.type.is_atom(I.args[0])&&(I.args[0].id==="text"||I.args[0].id==="binary")||I.indicator==="eof_action/1"&&x.type.is_atom(I.args[0])&&(I.args[0].id==="error"||I.args[0].id==="eof_code"||I.args[0].id==="reset"))},is_stream_position:function(I){return x.type.is_integer(I)&&I.value>=0||x.type.is_atom(I)&&(I.id==="end_of_stream"||I.id==="past_end_of_stream")},is_stream_property:function(I){return x.type.is_term(I)&&(I.indicator==="input/0"||I.indicator==="output/0"||I.indicator==="alias/1"&&(x.type.is_variable(I.args[0])||x.type.is_atom(I.args[0]))||I.indicator==="file_name/1"&&(x.type.is_variable(I.args[0])||x.type.is_atom(I.args[0]))||I.indicator==="position/1"&&(x.type.is_variable(I.args[0])||x.type.is_stream_position(I.args[0]))||I.indicator==="reposition/1"&&(x.type.is_variable(I.args[0])||x.type.is_atom(I.args[0])&&(I.args[0].id==="true"||I.args[0].id==="false"))||I.indicator==="type/1"&&(x.type.is_variable(I.args[0])||x.type.is_atom(I.args[0])&&(I.args[0].id==="text"||I.args[0].id==="binary"))||I.indicator==="mode/1"&&(x.type.is_variable(I.args[0])||x.type.is_atom(I.args[0])&&(I.args[0].id==="read"||I.args[0].id==="write"||I.args[0].id==="append"))||I.indicator==="eof_action/1"&&(x.type.is_variable(I.args[0])||x.type.is_atom(I.args[0])&&(I.args[0].id==="error"||I.args[0].id==="eof_code"||I.args[0].id==="reset"))||I.indicator==="end_of_stream/1"&&(x.type.is_variable(I.args[0])||x.type.is_atom(I.args[0])&&(I.args[0].id==="at"||I.args[0].id==="past"||I.args[0].id==="not")))},is_streamable:function(I){return I.__proto__.stream!==void 0},is_read_option:function(I){return x.type.is_term(I)&&["variables/1","variable_names/1","singletons/1"].indexOf(I.indicator)!==-1},is_write_option:function(I){return x.type.is_term(I)&&(I.indicator==="quoted/1"&&x.type.is_atom(I.args[0])&&(I.args[0].id==="true"||I.args[0].id==="false")||I.indicator==="ignore_ops/1"&&x.type.is_atom(I.args[0])&&(I.args[0].id==="true"||I.args[0].id==="false")||I.indicator==="numbervars/1"&&x.type.is_atom(I.args[0])&&(I.args[0].id==="true"||I.args[0].id==="false"))},is_close_option:function(I){return x.type.is_term(I)&&I.indicator==="force/1"&&x.type.is_atom(I.args[0])&&(I.args[0].id==="true"||I.args[0].id==="false")},is_modifiable_flag:function(I){return x.type.is_flag(I)&&x.flag[I.id].changeable},is_module:function(I){return I instanceof q&&I.indicator==="library/1"&&I.args[0]instanceof q&&I.args[0].args.length===0&&x.module[I.args[0].id]!==void 0}},arithmetic:{evaluation:{"e/0":{type_args:null,type_result:!0,fn:function(I){return Math.E}},"pi/0":{type_args:null,type_result:!0,fn:function(I){return Math.PI}},"tau/0":{type_args:null,type_result:!0,fn:function(I){return 2*Math.PI}},"epsilon/0":{type_args:null,type_result:!0,fn:function(I){return Number.EPSILON}},"+/1":{type_args:null,type_result:null,fn:function(I,P){return I}},"-/1":{type_args:null,type_result:null,fn:function(I,P){return-I}},"\\/1":{type_args:!1,type_result:!1,fn:function(I,P){return~I}},"abs/1":{type_args:null,type_result:null,fn:function(I,P){return Math.abs(I)}},"sign/1":{type_args:null,type_result:null,fn:function(I,P){return Math.sign(I)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(I,P){return parseInt(I)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(I,P){return I-parseInt(I)}},"float/1":{type_args:null,type_result:!0,fn:function(I,P){return parseFloat(I)}},"floor/1":{type_args:!0,type_result:!1,fn:function(I,P){return Math.floor(I)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(I,P){return parseInt(I)}},"round/1":{type_args:!0,type_result:!1,fn:function(I,P){return Math.round(I)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(I,P){return Math.ceil(I)}},"sin/1":{type_args:null,type_result:!0,fn:function(I,P){return Math.sin(I)}},"cos/1":{type_args:null,type_result:!0,fn:function(I,P){return Math.cos(I)}},"tan/1":{type_args:null,type_result:!0,fn:function(I,P){return Math.tan(I)}},"asin/1":{type_args:null,type_result:!0,fn:function(I,P){return Math.asin(I)}},"acos/1":{type_args:null,type_result:!0,fn:function(I,P){return Math.acos(I)}},"atan/1":{type_args:null,type_result:!0,fn:function(I,P){return Math.atan(I)}},"atan2/2":{type_args:null,type_result:!0,fn:function(I,P,y){return Math.atan2(I,P)}},"exp/1":{type_args:null,type_result:!0,fn:function(I,P){return Math.exp(I)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(I,P){return Math.sqrt(I)}},"log/1":{type_args:null,type_result:!0,fn:function(I,P){return I>0?Math.log(I):x.error.evaluation("undefined",P.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(I,P,y){return I+P}},"-/2":{type_args:null,type_result:null,fn:function(I,P,y){return I-P}},"*/2":{type_args:null,type_result:null,fn:function(I,P,y){return I*P}},"//2":{type_args:null,type_result:!0,fn:function(I,P,y){return P?I/P:x.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(I,P,y){return P?parseInt(I/P):x.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(I,P,y){return Math.pow(I,P)}},"^/2":{type_args:null,type_result:null,fn:function(I,P,y){return Math.pow(I,P)}},"<>/2":{type_args:!1,type_result:!1,fn:function(I,P,y){return I>>P}},"/\\/2":{type_args:!1,type_result:!1,fn:function(I,P,y){return I&P}},"\\//2":{type_args:!1,type_result:!1,fn:function(I,P,y){return I|P}},"xor/2":{type_args:!1,type_result:!1,fn:function(I,P,y){return I^P}},"rem/2":{type_args:!1,type_result:!1,fn:function(I,P,y){return P?I%P:x.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(I,P,y){return P?I-parseInt(I/P)*P:x.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(I,P,y){return Math.max(I,P)}},"min/2":{type_args:null,type_result:null,fn:function(I,P,y){return Math.min(I,P)}}}},directive:{"dynamic/1":function(I,P){var y=P.args[0];if(x.type.is_variable(y))I.throw_error(x.error.instantiation(P.indicator));else if(!x.type.is_compound(y)||y.indicator!=="//2")I.throw_error(x.error.type("predicate_indicator",y,P.indicator));else if(x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1]))I.throw_error(x.error.instantiation(P.indicator));else if(!x.type.is_atom(y.args[0]))I.throw_error(x.error.type("atom",y.args[0],P.indicator));else if(!x.type.is_integer(y.args[1]))I.throw_error(x.error.type("integer",y.args[1],P.indicator));else{var R=P.args[0].args[0].id+"/"+P.args[0].args[1].value;I.session.public_predicates[R]=!0,I.session.rules[R]||(I.session.rules[R]=[])}},"multifile/1":function(I,P){var y=P.args[0];x.type.is_variable(y)?I.throw_error(x.error.instantiation(P.indicator)):!x.type.is_compound(y)||y.indicator!=="//2"?I.throw_error(x.error.type("predicate_indicator",y,P.indicator)):x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1])?I.throw_error(x.error.instantiation(P.indicator)):x.type.is_atom(y.args[0])?x.type.is_integer(y.args[1])?I.session.multifile_predicates[P.args[0].args[0].id+"/"+P.args[0].args[1].value]=!0:I.throw_error(x.error.type("integer",y.args[1],P.indicator)):I.throw_error(x.error.type("atom",y.args[0],P.indicator))},"set_prolog_flag/2":function(I,P){var y=P.args[0],R=P.args[1];x.type.is_variable(y)||x.type.is_variable(R)?I.throw_error(x.error.instantiation(P.indicator)):x.type.is_atom(y)?x.type.is_flag(y)?x.type.is_value_flag(y,R)?x.type.is_modifiable_flag(y)?I.session.flag[y.id]=R:I.throw_error(x.error.permission("modify","flag",y)):I.throw_error(x.error.domain("flag_value",new q("+",[y,R]),P.indicator)):I.throw_error(x.error.domain("prolog_flag",y,P.indicator)):I.throw_error(x.error.type("atom",y,P.indicator))},"use_module/1":function(I,P){var y=P.args[0];if(x.type.is_variable(y))I.throw_error(x.error.instantiation(P.indicator));else if(!x.type.is_term(y))I.throw_error(x.error.type("term",y,P.indicator));else if(x.type.is_module(y)){var R=y.args[0].id;e(I.session.modules,R)===-1&&I.session.modules.push(R)}},"char_conversion/2":function(I,P){var y=P.args[0],R=P.args[1];x.type.is_variable(y)||x.type.is_variable(R)?I.throw_error(x.error.instantiation(P.indicator)):x.type.is_character(y)?x.type.is_character(R)?y.id===R.id?delete I.session.__char_conversion[y.id]:I.session.__char_conversion[y.id]=R.id:I.throw_error(x.error.type("character",R,P.indicator)):I.throw_error(x.error.type("character",y,P.indicator))},"op/3":function(I,P){var y=P.args[0],R=P.args[1],z=P.args[2];if(x.type.is_variable(y)||x.type.is_variable(R)||x.type.is_variable(z))I.throw_error(x.error.instantiation(P.indicator));else if(!x.type.is_integer(y))I.throw_error(x.error.type("integer",y,P.indicator));else if(!x.type.is_atom(R))I.throw_error(x.error.type("atom",R,P.indicator));else if(!x.type.is_atom(z))I.throw_error(x.error.type("atom",z,P.indicator));else if(y.value<0||y.value>1200)I.throw_error(x.error.domain("operator_priority",y,P.indicator));else if(z.id===",")I.throw_error(x.error.permission("modify","operator",z,P.indicator));else if(z.id==="|"&&(y.value<1001||R.id.length!==3))I.throw_error(x.error.permission("modify","operator",z,P.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(R.id)===-1)I.throw_error(x.error.domain("operator_specifier",R,P.indicator));else{var X={prefix:null,infix:null,postfix:null};for(var $ in I.session.__operators)if(I.session.__operators.hasOwnProperty($)){var se=I.session.__operators[$][z.id];se&&(e(se,"fx")!==-1&&(X.prefix={priority:$,type:"fx"}),e(se,"fy")!==-1&&(X.prefix={priority:$,type:"fy"}),e(se,"xf")!==-1&&(X.postfix={priority:$,type:"xf"}),e(se,"yf")!==-1&&(X.postfix={priority:$,type:"yf"}),e(se,"xfx")!==-1&&(X.infix={priority:$,type:"xfx"}),e(se,"xfy")!==-1&&(X.infix={priority:$,type:"xfy"}),e(se,"yfx")!==-1&&(X.infix={priority:$,type:"yfx"}))}var be;switch(R.id){case"fy":case"fx":be="prefix";break;case"yf":case"xf":be="postfix";break;default:be="infix";break}if(((X.prefix&&be==="prefix"||X.postfix&&be==="postfix"||X.infix&&be==="infix")&&X[be].type!==R.id||X.infix&&be==="postfix"||X.postfix&&be==="infix")&&y.value!==0)I.throw_error(x.error.permission("create","operator",z,P.indicator));else return X[be]&&(me(I.session.__operators[X[be].priority][z.id],R.id),I.session.__operators[X[be].priority][z.id].length===0&&delete I.session.__operators[X[be].priority][z.id]),y.value>0&&(I.session.__operators[y.value]||(I.session.__operators[y.value.toString()]={}),I.session.__operators[y.value][z.id]||(I.session.__operators[y.value][z.id]=[]),I.session.__operators[y.value][z.id].push(R.id)),!0}}},predicate:{"op/3":function(I,P,y){x.directive["op/3"](I,y)&&I.success(P)},"current_op/3":function(I,P,y){var R=y.args[0],z=y.args[1],X=y.args[2],$=[];for(var se in I.session.__operators)for(var be in I.session.__operators[se])for(var Fe=0;Fe/2"){var R=I.points,z=I.session.format_success,X=I.session.format_error;I.session.format_success=function(Fe){return Fe.substitution},I.session.format_error=function(Fe){return Fe.goal},I.points=[new ke(y.args[0].args[0],P.substitution,P)];var $=function(Fe){I.points=R,I.session.format_success=z,I.session.format_error=X,Fe===!1?I.prepend([new ke(P.goal.replace(y.args[1]),P.substitution,P)]):x.type.is_error(Fe)?I.throw_error(Fe.args[0]):Fe===null?(I.prepend([P]),I.__calls.shift()(null)):I.prepend([new ke(P.goal.replace(y.args[0].args[1]).apply(Fe),P.substitution.apply(Fe),P)])};I.__calls.unshift($)}else{var se=new ke(P.goal.replace(y.args[0]),P.substitution,P),be=new ke(P.goal.replace(y.args[1]),P.substitution,P);I.prepend([se,be])}},"!/0":function(I,P,y){var R,z,X=[];for(R=P,z=null;R.parent!==null&&R.parent.goal.search(y);)if(z=R,R=R.parent,R.goal!==null){var $=R.goal.select();if($&&$.id==="call"&&$.search(y)){R=z;break}}for(var se=I.points.length-1;se>=0;se--){for(var be=I.points[se],Fe=be.parent;Fe!==null&&Fe!==R.parent;)Fe=Fe.parent;Fe===null&&Fe!==R.parent&&X.push(be)}I.points=X.reverse(),I.success(P)},"\\+/1":function(I,P,y){var R=y.args[0];x.type.is_variable(R)?I.throw_error(x.error.instantiation(I.level)):x.type.is_callable(R)?I.prepend([new ke(P.goal.replace(new q(",",[new q(",",[new q("call",[R]),new q("!",[])]),new q("fail",[])])),P.substitution,P),new ke(P.goal.replace(null),P.substitution,P)]):I.throw_error(x.error.type("callable",R,I.level))},"->/2":function(I,P,y){var R=P.goal.replace(new q(",",[y.args[0],new q(",",[new q("!"),y.args[1]])]));I.prepend([new ke(R,P.substitution,P)])},"fail/0":function(I,P,y){},"false/0":function(I,P,y){},"true/0":function(I,P,y){I.success(P)},"call/1":ie(1),"call/2":ie(2),"call/3":ie(3),"call/4":ie(4),"call/5":ie(5),"call/6":ie(6),"call/7":ie(7),"call/8":ie(8),"once/1":function(I,P,y){var R=y.args[0];I.prepend([new ke(P.goal.replace(new q(",",[new q("call",[R]),new q("!",[])])),P.substitution,P)])},"forall/2":function(I,P,y){var R=y.args[0],z=y.args[1];I.prepend([new ke(P.goal.replace(new q("\\+",[new q(",",[new q("call",[R]),new q("\\+",[new q("call",[z])])])])),P.substitution,P)])},"repeat/0":function(I,P,y){I.prepend([new ke(P.goal.replace(null),P.substitution,P),P])},"throw/1":function(I,P,y){x.type.is_variable(y.args[0])?I.throw_error(x.error.instantiation(I.level)):I.throw_error(y.args[0])},"catch/3":function(I,P,y){var R=I.points;I.points=[],I.prepend([new ke(y.args[0],P.substitution,P)]);var z=I.session.format_success,X=I.session.format_error;I.session.format_success=function(se){return se.substitution},I.session.format_error=function(se){return se.goal};var $=function(se){var be=I.points;if(I.points=R,I.session.format_success=z,I.session.format_error=X,x.type.is_error(se)){for(var Fe=[],lt=I.points.length-1;lt>=0;lt--){for(var nr=I.points[lt],Et=nr.parent;Et!==null&&Et!==P.parent;)Et=Et.parent;Et===null&&Et!==P.parent&&Fe.push(nr)}I.points=Fe;var qt=I.get_flag("occurs_check").indicator==="true/0",nr=new ke,Pt=x.unify(se.args[0],y.args[1],qt);Pt!==null?(nr.substitution=P.substitution.apply(Pt),nr.goal=P.goal.replace(y.args[2]).apply(Pt),nr.parent=P,I.prepend([nr])):I.throw_error(se.args[0])}else if(se!==!1){for(var cn=se===null?[]:[new ke(P.goal.apply(se).replace(null),P.substitution.apply(se),P)],Sr=[],lt=be.length-1;lt>=0;lt--){Sr.push(be[lt]);var yr=be[lt].goal!==null?be[lt].goal.select():null;if(x.type.is_term(yr)&&yr.indicator==="!/0")break}var Rr=o(Sr,function(Xr){return Xr.goal===null&&(Xr.goal=new q("true",[])),Xr=new ke(P.goal.replace(new q("catch",[Xr.goal,y.args[1],y.args[2]])),P.substitution.apply(Xr.substitution),Xr.parent),Xr.exclude=y.args[0].variables(),Xr}).reverse();I.prepend(Rr),I.prepend(cn),se===null&&(this.current_limit=0,I.__calls.shift()(null))}};I.__calls.unshift($)},"=/2":function(I,P,y){var R=I.get_flag("occurs_check").indicator==="true/0",z=new ke,X=x.unify(y.args[0],y.args[1],R);X!==null&&(z.goal=P.goal.apply(X).replace(null),z.substitution=P.substitution.apply(X),z.parent=P,I.prepend([z]))},"unify_with_occurs_check/2":function(I,P,y){var R=new ke,z=x.unify(y.args[0],y.args[1],!0);z!==null&&(R.goal=P.goal.apply(z).replace(null),R.substitution=P.substitution.apply(z),R.parent=P,I.prepend([R]))},"\\=/2":function(I,P,y){var R=I.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[0],y.args[1],R);z===null&&I.success(P)},"subsumes_term/2":function(I,P,y){var R=I.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[1],y.args[0],R);z!==null&&y.args[1].apply(z).equals(y.args[1])&&I.success(P)},"findall/3":function(I,P,y){var R=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(z))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(z))I.throw_error(x.error.type("callable",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))I.throw_error(x.error.type("list",X,y.indicator));else{var $=I.next_free_variable(),se=new q(",",[z,new q("=",[$,R])]),be=I.points,Fe=I.session.limit,lt=I.session.format_success;I.session.format_success=function(nr){return nr.substitution},I.add_goal(se,!0,P);var Et=[],qt=function(nr){if(nr!==!1&&nr!==null&&!x.type.is_error(nr))I.__calls.unshift(qt),Et.push(nr.links[$.id]),I.session.limit=I.current_limit;else if(I.points=be,I.session.limit=Fe,I.session.format_success=lt,x.type.is_error(nr))I.throw_error(nr.args[0]);else if(I.current_limit>0){for(var Pt=new q("[]"),cn=Et.length-1;cn>=0;cn--)Pt=new q(".",[Et[cn],Pt]);I.prepend([new ke(P.goal.replace(new q("=",[X,Pt])),P.substitution,P)])}};I.__calls.unshift(qt)}},"bagof/3":function(I,P,y){var R,z=y.args[0],X=y.args[1],$=y.args[2];if(x.type.is_variable(X))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))I.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable($)&&!x.type.is_list($))I.throw_error(x.error.type("list",$,y.indicator));else{var se=I.next_free_variable(),be;X.indicator==="^/2"?(be=X.args[0].variables(),X=X.args[1]):be=[],be=be.concat(z.variables());for(var Fe=X.variables().filter(function(Rr){return e(be,Rr)===-1}),lt=new q("[]"),Et=Fe.length-1;Et>=0;Et--)lt=new q(".",[new Se(Fe[Et]),lt]);var qt=new q(",",[X,new q("=",[se,new q(",",[lt,z])])]),nr=I.points,Pt=I.session.limit,cn=I.session.format_success;I.session.format_success=function(Rr){return Rr.substitution},I.add_goal(qt,!0,P);var Sr=[],yr=function(Rr){if(Rr!==!1&&Rr!==null&&!x.type.is_error(Rr)){I.__calls.unshift(yr);var Xr=!1,$n=Rr.links[se.id].args[0],Xs=Rr.links[se.id].args[1];for(var Hi in Sr)if(Sr.hasOwnProperty(Hi)){var Qs=Sr[Hi];if(Qs.variables.equals($n)){Qs.answers.push(Xs),Xr=!0;break}}Xr||Sr.push({variables:$n,answers:[Xs]}),I.session.limit=I.current_limit}else if(I.points=nr,I.session.limit=Pt,I.session.format_success=cn,x.type.is_error(Rr))I.throw_error(Rr.args[0]);else if(I.current_limit>0){for(var Zs=[],bi=0;bi=0;$s--)Fs=new q(".",[Rr[$s],Fs]);Zs.push(new ke(P.goal.replace(new q(",",[new q("=",[lt,Sr[bi].variables]),new q("=",[$,Fs])])),P.substitution,P))}I.prepend(Zs)}};I.__calls.unshift(yr)}},"setof/3":function(I,P,y){var R,z=y.args[0],X=y.args[1],$=y.args[2];if(x.type.is_variable(X))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))I.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable($)&&!x.type.is_list($))I.throw_error(x.error.type("list",$,y.indicator));else{var se=I.next_free_variable(),be;X.indicator==="^/2"?(be=X.args[0].variables(),X=X.args[1]):be=[],be=be.concat(z.variables());for(var Fe=X.variables().filter(function(Rr){return e(be,Rr)===-1}),lt=new q("[]"),Et=Fe.length-1;Et>=0;Et--)lt=new q(".",[new Se(Fe[Et]),lt]);var qt=new q(",",[X,new q("=",[se,new q(",",[lt,z])])]),nr=I.points,Pt=I.session.limit,cn=I.session.format_success;I.session.format_success=function(Rr){return Rr.substitution},I.add_goal(qt,!0,P);var Sr=[],yr=function(Rr){if(Rr!==!1&&Rr!==null&&!x.type.is_error(Rr)){I.__calls.unshift(yr);var Xr=!1,$n=Rr.links[se.id].args[0],Xs=Rr.links[se.id].args[1];for(var Hi in Sr)if(Sr.hasOwnProperty(Hi)){var Qs=Sr[Hi];if(Qs.variables.equals($n)){Qs.answers.push(Xs),Xr=!0;break}}Xr||Sr.push({variables:$n,answers:[Xs]}),I.session.limit=I.current_limit}else if(I.points=nr,I.session.limit=Pt,I.session.format_success=cn,x.type.is_error(Rr))I.throw_error(Rr.args[0]);else if(I.current_limit>0){for(var Zs=[],bi=0;bi=0;$s--)Fs=new q(".",[Rr[$s],Fs]);Zs.push(new ke(P.goal.replace(new q(",",[new q("=",[lt,Sr[bi].variables]),new q("=",[$,Fs])])),P.substitution,P))}I.prepend(Zs)}};I.__calls.unshift(yr)}},"functor/3":function(I,P,y){var R,z=y.args[0],X=y.args[1],$=y.args[2];if(x.type.is_variable(z)&&(x.type.is_variable(X)||x.type.is_variable($)))I.throw_error(x.error.instantiation("functor/3"));else if(!x.type.is_variable($)&&!x.type.is_integer($))I.throw_error(x.error.type("integer",y.args[2],"functor/3"));else if(!x.type.is_variable(X)&&!x.type.is_atomic(X))I.throw_error(x.error.type("atomic",y.args[1],"functor/3"));else if(x.type.is_integer(X)&&x.type.is_integer($)&&$.value!==0)I.throw_error(x.error.type("atom",y.args[1],"functor/3"));else if(x.type.is_variable(z)){if(y.args[2].value>=0){for(var se=[],be=0;be<$.value;be++)se.push(I.next_free_variable());var Fe=x.type.is_integer(X)?X:new q(X.id,se);I.prepend([new ke(P.goal.replace(new q("=",[z,Fe])),P.substitution,P)])}}else{var lt=x.type.is_integer(z)?z:new q(z.id,[]),Et=x.type.is_integer(z)?new Re(0,!1):new Re(z.args.length,!1),qt=new q(",",[new q("=",[lt,X]),new q("=",[Et,$])]);I.prepend([new ke(P.goal.replace(qt),P.substitution,P)])}},"arg/3":function(I,P,y){if(x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1]))I.throw_error(x.error.instantiation(y.indicator));else if(y.args[0].value<0)I.throw_error(x.error.domain("not_less_than_zero",y.args[0],y.indicator));else if(!x.type.is_compound(y.args[1]))I.throw_error(x.error.type("compound",y.args[1],y.indicator));else{var R=y.args[0].value;if(R>0&&R<=y.args[1].args.length){var z=new q("=",[y.args[1].args[R-1],y.args[2]]);I.prepend([new ke(P.goal.replace(z),P.substitution,P)])}}},"=../2":function(I,P,y){var R;if(x.type.is_variable(y.args[0])&&(x.type.is_variable(y.args[1])||x.type.is_non_empty_list(y.args[1])&&x.type.is_variable(y.args[1].args[0])))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_fully_list(y.args[1]))I.throw_error(x.error.type("list",y.args[1],y.indicator));else if(x.type.is_variable(y.args[0])){if(!x.type.is_variable(y.args[1])){var X=[];for(R=y.args[1].args[1];R.indicator==="./2";)X.push(R.args[0]),R=R.args[1];x.type.is_variable(y.args[0])&&x.type.is_variable(R)?I.throw_error(x.error.instantiation(y.indicator)):X.length===0&&x.type.is_compound(y.args[1].args[0])?I.throw_error(x.error.type("atomic",y.args[1].args[0],y.indicator)):X.length>0&&(x.type.is_compound(y.args[1].args[0])||x.type.is_number(y.args[1].args[0]))?I.throw_error(x.error.type("atom",y.args[1].args[0],y.indicator)):X.length===0?I.prepend([new ke(P.goal.replace(new q("=",[y.args[1].args[0],y.args[0]],P)),P.substitution,P)]):I.prepend([new ke(P.goal.replace(new q("=",[new q(y.args[1].args[0].id,X),y.args[0]])),P.substitution,P)])}}else{if(x.type.is_atomic(y.args[0]))R=new q(".",[y.args[0],new q("[]")]);else{R=new q("[]");for(var z=y.args[0].args.length-1;z>=0;z--)R=new q(".",[y.args[0].args[z],R]);R=new q(".",[new q(y.args[0].id),R])}I.prepend([new ke(P.goal.replace(new q("=",[R,y.args[1]])),P.substitution,P)])}},"copy_term/2":function(I,P,y){var R=y.args[0].rename(I);I.prepend([new ke(P.goal.replace(new q("=",[R,y.args[1]])),P.substitution,P.parent)])},"term_variables/2":function(I,P,y){var R=y.args[0],z=y.args[1];if(!x.type.is_fully_list(z))I.throw_error(x.error.type("list",z,y.indicator));else{var X=g(o(Ce(R.variables()),function($){return new Se($)}));I.prepend([new ke(P.goal.replace(new q("=",[z,X])),P.substitution,P)])}},"clause/2":function(I,P,y){if(x.type.is_variable(y.args[0]))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))I.throw_error(x.error.type("callable",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_callable(y.args[1]))I.throw_error(x.error.type("callable",y.args[1],y.indicator));else if(I.session.rules[y.args[0].indicator]!==void 0)if(I.is_public_predicate(y.args[0].indicator)){var R=[];for(var z in I.session.rules[y.args[0].indicator])if(I.session.rules[y.args[0].indicator].hasOwnProperty(z)){var X=I.session.rules[y.args[0].indicator][z];I.session.renamed_variables={},X=X.rename(I),X.body===null&&(X.body=new q("true"));var $=new q(",",[new q("=",[X.head,y.args[0]]),new q("=",[X.body,y.args[1]])]);R.push(new ke(P.goal.replace($),P.substitution,P))}I.prepend(R)}else I.throw_error(x.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(I,P,y){var R=y.args[0];if(!x.type.is_variable(R)&&(!x.type.is_compound(R)||R.indicator!=="//2"))I.throw_error(x.error.type("predicate_indicator",R,y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_variable(R.args[0])&&!x.type.is_atom(R.args[0]))I.throw_error(x.error.type("atom",R.args[0],y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_variable(R.args[1])&&!x.type.is_integer(R.args[1]))I.throw_error(x.error.type("integer",R.args[1],y.indicator));else{var z=[];for(var X in I.session.rules)if(I.session.rules.hasOwnProperty(X)){var $=X.lastIndexOf("/"),se=X.substr(0,$),be=parseInt(X.substr($+1,X.length-($+1))),Fe=new q("/",[new q(se),new Re(be,!1)]),lt=new q("=",[Fe,R]);z.push(new ke(P.goal.replace(lt),P.substitution,P))}I.prepend(z)}},"asserta/1":function(I,P,y){if(x.type.is_variable(y.args[0]))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))I.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var R,z;y.args[0].indicator===":-/2"?(R=y.args[0].args[0],z=Ee(y.args[0].args[1])):(R=y.args[0],z=null),x.type.is_callable(R)?z!==null&&!x.type.is_callable(z)?I.throw_error(x.error.type("callable",z,y.indicator)):I.is_public_predicate(R.indicator)?(I.session.rules[R.indicator]===void 0&&(I.session.rules[R.indicator]=[]),I.session.public_predicates[R.indicator]=!0,I.session.rules[R.indicator]=[new Ke(R,z,!0)].concat(I.session.rules[R.indicator]),I.success(P)):I.throw_error(x.error.permission("modify","static_procedure",R.indicator,y.indicator)):I.throw_error(x.error.type("callable",R,y.indicator))}},"assertz/1":function(I,P,y){if(x.type.is_variable(y.args[0]))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))I.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var R,z;y.args[0].indicator===":-/2"?(R=y.args[0].args[0],z=Ee(y.args[0].args[1])):(R=y.args[0],z=null),x.type.is_callable(R)?z!==null&&!x.type.is_callable(z)?I.throw_error(x.error.type("callable",z,y.indicator)):I.is_public_predicate(R.indicator)?(I.session.rules[R.indicator]===void 0&&(I.session.rules[R.indicator]=[]),I.session.public_predicates[R.indicator]=!0,I.session.rules[R.indicator].push(new Ke(R,z,!0)),I.success(P)):I.throw_error(x.error.permission("modify","static_procedure",R.indicator,y.indicator)):I.throw_error(x.error.type("callable",R,y.indicator))}},"retract/1":function(I,P,y){if(x.type.is_variable(y.args[0]))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))I.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var R,z;if(y.args[0].indicator===":-/2"?(R=y.args[0].args[0],z=y.args[0].args[1]):(R=y.args[0],z=new q("true")),typeof P.retract>"u")if(I.is_public_predicate(R.indicator)){if(I.session.rules[R.indicator]!==void 0){for(var X=[],$=0;$I.get_flag("max_arity").value)I.throw_error(x.error.representation("max_arity",y.indicator));else{var R=y.args[0].args[0].id+"/"+y.args[0].args[1].value;I.is_public_predicate(R)?(delete I.session.rules[R],I.success(P)):I.throw_error(x.error.permission("modify","static_procedure",R,y.indicator))}},"atom_length/2":function(I,P,y){if(x.type.is_variable(y.args[0]))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_atom(y.args[0]))I.throw_error(x.error.type("atom",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_integer(y.args[1]))I.throw_error(x.error.type("integer",y.args[1],y.indicator));else if(x.type.is_integer(y.args[1])&&y.args[1].value<0)I.throw_error(x.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var R=new Re(y.args[0].id.length,!1);I.prepend([new ke(P.goal.replace(new q("=",[R,y.args[1]])),P.substitution,P)])}},"atom_concat/3":function(I,P,y){var R,z,X=y.args[0],$=y.args[1],se=y.args[2];if(x.type.is_variable(se)&&(x.type.is_variable(X)||x.type.is_variable($)))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))I.throw_error(x.error.type("atom",X,y.indicator));else if(!x.type.is_variable($)&&!x.type.is_atom($))I.throw_error(x.error.type("atom",$,y.indicator));else if(!x.type.is_variable(se)&&!x.type.is_atom(se))I.throw_error(x.error.type("atom",se,y.indicator));else{var be=x.type.is_variable(X),Fe=x.type.is_variable($);if(!be&&!Fe)z=new q("=",[se,new q(X.id+$.id)]),I.prepend([new ke(P.goal.replace(z),P.substitution,P)]);else if(be&&!Fe)R=se.id.substr(0,se.id.length-$.id.length),R+$.id===se.id&&(z=new q("=",[X,new q(R)]),I.prepend([new ke(P.goal.replace(z),P.substitution,P)]));else if(Fe&&!be)R=se.id.substr(X.id.length),X.id+R===se.id&&(z=new q("=",[$,new q(R)]),I.prepend([new ke(P.goal.replace(z),P.substitution,P)]));else{for(var lt=[],Et=0;Et<=se.id.length;Et++){var qt=new q(se.id.substr(0,Et)),nr=new q(se.id.substr(Et));z=new q(",",[new q("=",[qt,X]),new q("=",[nr,$])]),lt.push(new ke(P.goal.replace(z),P.substitution,P))}I.prepend(lt)}}},"sub_atom/5":function(I,P,y){var R,z=y.args[0],X=y.args[1],$=y.args[2],se=y.args[3],be=y.args[4];if(x.type.is_variable(z))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))I.throw_error(x.error.type("integer",X,y.indicator));else if(!x.type.is_variable($)&&!x.type.is_integer($))I.throw_error(x.error.type("integer",$,y.indicator));else if(!x.type.is_variable(se)&&!x.type.is_integer(se))I.throw_error(x.error.type("integer",se,y.indicator));else if(x.type.is_integer(X)&&X.value<0)I.throw_error(x.error.domain("not_less_than_zero",X,y.indicator));else if(x.type.is_integer($)&&$.value<0)I.throw_error(x.error.domain("not_less_than_zero",$,y.indicator));else if(x.type.is_integer(se)&&se.value<0)I.throw_error(x.error.domain("not_less_than_zero",se,y.indicator));else{var Fe=[],lt=[],Et=[];if(x.type.is_variable(X))for(R=0;R<=z.id.length;R++)Fe.push(R);else Fe.push(X.value);if(x.type.is_variable($))for(R=0;R<=z.id.length;R++)lt.push(R);else lt.push($.value);if(x.type.is_variable(se))for(R=0;R<=z.id.length;R++)Et.push(R);else Et.push(se.value);var qt=[];for(var nr in Fe)if(Fe.hasOwnProperty(nr)){R=Fe[nr];for(var Pt in lt)if(lt.hasOwnProperty(Pt)){var cn=lt[Pt],Sr=z.id.length-R-cn;if(e(Et,Sr)!==-1&&R+cn+Sr===z.id.length){var yr=z.id.substr(R,cn);if(z.id===z.id.substr(0,R)+yr+z.id.substr(R+cn,Sr)){var Rr=new q("=",[new q(yr),be]),Xr=new q("=",[X,new Re(R)]),$n=new q("=",[$,new Re(cn)]),Xs=new q("=",[se,new Re(Sr)]),Hi=new q(",",[new q(",",[new q(",",[Xr,$n]),Xs]),Rr]);qt.push(new ke(P.goal.replace(Hi),P.substitution,P))}}}}I.prepend(qt)}},"atom_chars/2":function(I,P,y){var R=y.args[0],z=y.args[1];if(x.type.is_variable(R)&&x.type.is_variable(z))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_atom(R))I.throw_error(x.error.type("atom",R,y.indicator));else if(x.type.is_variable(R)){for(var se=z,be=x.type.is_variable(R),Fe="";se.indicator==="./2";){if(x.type.is_character(se.args[0]))Fe+=se.args[0].id;else if(x.type.is_variable(se.args[0])&&be){I.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(se.args[0])){I.throw_error(x.error.type("character",se.args[0],y.indicator));return}se=se.args[1]}x.type.is_variable(se)&&be?I.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(se)&&!x.type.is_variable(se)?I.throw_error(x.error.type("list",z,y.indicator)):I.prepend([new ke(P.goal.replace(new q("=",[new q(Fe),R])),P.substitution,P)])}else{for(var X=new q("[]"),$=R.id.length-1;$>=0;$--)X=new q(".",[new q(R.id.charAt($)),X]);I.prepend([new ke(P.goal.replace(new q("=",[z,X])),P.substitution,P)])}},"atom_codes/2":function(I,P,y){var R=y.args[0],z=y.args[1];if(x.type.is_variable(R)&&x.type.is_variable(z))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_atom(R))I.throw_error(x.error.type("atom",R,y.indicator));else if(x.type.is_variable(R)){for(var se=z,be=x.type.is_variable(R),Fe="";se.indicator==="./2";){if(x.type.is_character_code(se.args[0]))Fe+=u(se.args[0].value);else if(x.type.is_variable(se.args[0])&&be){I.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(se.args[0])){I.throw_error(x.error.representation("character_code",y.indicator));return}se=se.args[1]}x.type.is_variable(se)&&be?I.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(se)&&!x.type.is_variable(se)?I.throw_error(x.error.type("list",z,y.indicator)):I.prepend([new ke(P.goal.replace(new q("=",[new q(Fe),R])),P.substitution,P)])}else{for(var X=new q("[]"),$=R.id.length-1;$>=0;$--)X=new q(".",[new Re(n(R.id,$),!1),X]);I.prepend([new ke(P.goal.replace(new q("=",[z,X])),P.substitution,P)])}},"char_code/2":function(I,P,y){var R=y.args[0],z=y.args[1];if(x.type.is_variable(R)&&x.type.is_variable(z))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_character(R))I.throw_error(x.error.type("character",R,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_integer(z))I.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_character_code(z))I.throw_error(x.error.representation("character_code",y.indicator));else if(x.type.is_variable(z)){var X=new Re(n(R.id,0),!1);I.prepend([new ke(P.goal.replace(new q("=",[X,z])),P.substitution,P)])}else{var $=new q(u(z.value));I.prepend([new ke(P.goal.replace(new q("=",[$,R])),P.substitution,P)])}},"number_chars/2":function(I,P,y){var R,z=y.args[0],X=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(X))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))I.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))I.throw_error(x.error.type("list",X,y.indicator));else{var $=x.type.is_variable(z);if(!x.type.is_variable(X)){var se=X,be=!0;for(R="";se.indicator==="./2";){if(x.type.is_character(se.args[0]))R+=se.args[0].id;else if(x.type.is_variable(se.args[0]))be=!1;else if(!x.type.is_variable(se.args[0])){I.throw_error(x.error.type("character",se.args[0],y.indicator));return}se=se.args[1]}if(be=be&&x.type.is_empty_list(se),!x.type.is_empty_list(se)&&!x.type.is_variable(se)){I.throw_error(x.error.type("list",X,y.indicator));return}if(!be&&$){I.throw_error(x.error.instantiation(y.indicator));return}else if(be)if(x.type.is_variable(se)&&$){I.throw_error(x.error.instantiation(y.indicator));return}else{var Fe=I.parse(R),lt=Fe.value;!x.type.is_number(lt)||Fe.tokens[Fe.tokens.length-1].space?I.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):I.prepend([new ke(P.goal.replace(new q("=",[z,lt])),P.substitution,P)]);return}}if(!$){R=z.toString();for(var Et=new q("[]"),qt=R.length-1;qt>=0;qt--)Et=new q(".",[new q(R.charAt(qt)),Et]);I.prepend([new ke(P.goal.replace(new q("=",[X,Et])),P.substitution,P)])}}},"number_codes/2":function(I,P,y){var R,z=y.args[0],X=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(X))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))I.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))I.throw_error(x.error.type("list",X,y.indicator));else{var $=x.type.is_variable(z);if(!x.type.is_variable(X)){var se=X,be=!0;for(R="";se.indicator==="./2";){if(x.type.is_character_code(se.args[0]))R+=u(se.args[0].value);else if(x.type.is_variable(se.args[0]))be=!1;else if(!x.type.is_variable(se.args[0])){I.throw_error(x.error.type("character_code",se.args[0],y.indicator));return}se=se.args[1]}if(be=be&&x.type.is_empty_list(se),!x.type.is_empty_list(se)&&!x.type.is_variable(se)){I.throw_error(x.error.type("list",X,y.indicator));return}if(!be&&$){I.throw_error(x.error.instantiation(y.indicator));return}else if(be)if(x.type.is_variable(se)&&$){I.throw_error(x.error.instantiation(y.indicator));return}else{var Fe=I.parse(R),lt=Fe.value;!x.type.is_number(lt)||Fe.tokens[Fe.tokens.length-1].space?I.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):I.prepend([new ke(P.goal.replace(new q("=",[z,lt])),P.substitution,P)]);return}}if(!$){R=z.toString();for(var Et=new q("[]"),qt=R.length-1;qt>=0;qt--)Et=new q(".",[new Re(n(R,qt),!1),Et]);I.prepend([new ke(P.goal.replace(new q("=",[X,Et])),P.substitution,P)])}}},"upcase_atom/2":function(I,P,y){var R=y.args[0],z=y.args[1];x.type.is_variable(R)?I.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(R)?!x.type.is_variable(z)&&!x.type.is_atom(z)?I.throw_error(x.error.type("atom",z,y.indicator)):I.prepend([new ke(P.goal.replace(new q("=",[z,new q(R.id.toUpperCase(),[])])),P.substitution,P)]):I.throw_error(x.error.type("atom",R,y.indicator))},"downcase_atom/2":function(I,P,y){var R=y.args[0],z=y.args[1];x.type.is_variable(R)?I.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(R)?!x.type.is_variable(z)&&!x.type.is_atom(z)?I.throw_error(x.error.type("atom",z,y.indicator)):I.prepend([new ke(P.goal.replace(new q("=",[z,new q(R.id.toLowerCase(),[])])),P.substitution,P)]):I.throw_error(x.error.type("atom",R,y.indicator))},"atomic_list_concat/2":function(I,P,y){var R=y.args[0],z=y.args[1];I.prepend([new ke(P.goal.replace(new q("atomic_list_concat",[R,new q("",[]),z])),P.substitution,P)])},"atomic_list_concat/3":function(I,P,y){var R=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(z)||x.type.is_variable(R)&&x.type.is_variable(X))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_list(R))I.throw_error(x.error.type("list",R,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))I.throw_error(x.error.type("atom",X,y.indicator));else if(x.type.is_variable(X)){for(var se="",be=R;x.type.is_term(be)&&be.indicator==="./2";){if(!x.type.is_atom(be.args[0])&&!x.type.is_number(be.args[0])){I.throw_error(x.error.type("atomic",be.args[0],y.indicator));return}se!==""&&(se+=z.id),x.type.is_atom(be.args[0])?se+=be.args[0].id:se+=""+be.args[0].value,be=be.args[1]}se=new q(se,[]),x.type.is_variable(be)?I.throw_error(x.error.instantiation(y.indicator)):!x.type.is_term(be)||be.indicator!=="[]/0"?I.throw_error(x.error.type("list",R,y.indicator)):I.prepend([new ke(P.goal.replace(new q("=",[se,X])),P.substitution,P)])}else{var $=g(o(X.id.split(z.id),function(Fe){return new q(Fe,[])}));I.prepend([new ke(P.goal.replace(new q("=",[$,R])),P.substitution,P)])}},"@=/2":function(I,P,y){x.compare(y.args[0],y.args[1])>0&&I.success(P)},"@>=/2":function(I,P,y){x.compare(y.args[0],y.args[1])>=0&&I.success(P)},"compare/3":function(I,P,y){var R=y.args[0],z=y.args[1],X=y.args[2];if(!x.type.is_variable(R)&&!x.type.is_atom(R))I.throw_error(x.error.type("atom",R,y.indicator));else if(x.type.is_atom(R)&&["<",">","="].indexOf(R.id)===-1)I.throw_error(x.type.domain("order",R,y.indicator));else{var $=x.compare(z,X);$=$===0?"=":$===-1?"<":">",I.prepend([new ke(P.goal.replace(new q("=",[R,new q($,[])])),P.substitution,P)])}},"is/2":function(I,P,y){var R=y.args[1].interpret(I);x.type.is_number(R)?I.prepend([new ke(P.goal.replace(new q("=",[y.args[0],R],I.level)),P.substitution,P)]):I.throw_error(R)},"between/3":function(I,P,y){var R=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(R)||x.type.is_variable(z))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_integer(R))I.throw_error(x.error.type("integer",R,y.indicator));else if(!x.type.is_integer(z))I.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))I.throw_error(x.error.type("integer",X,y.indicator));else if(x.type.is_variable(X)){var $=[new ke(P.goal.replace(new q("=",[X,R])),P.substitution,P)];R.value=X.value&&I.success(P)},"succ/2":function(I,P,y){var R=y.args[0],z=y.args[1];x.type.is_variable(R)&&x.type.is_variable(z)?I.throw_error(x.error.instantiation(y.indicator)):!x.type.is_variable(R)&&!x.type.is_integer(R)?I.throw_error(x.error.type("integer",R,y.indicator)):!x.type.is_variable(z)&&!x.type.is_integer(z)?I.throw_error(x.error.type("integer",z,y.indicator)):!x.type.is_variable(R)&&R.value<0?I.throw_error(x.error.domain("not_less_than_zero",R,y.indicator)):!x.type.is_variable(z)&&z.value<0?I.throw_error(x.error.domain("not_less_than_zero",z,y.indicator)):(x.type.is_variable(z)||z.value>0)&&(x.type.is_variable(R)?I.prepend([new ke(P.goal.replace(new q("=",[R,new Re(z.value-1,!1)])),P.substitution,P)]):I.prepend([new ke(P.goal.replace(new q("=",[z,new Re(R.value+1,!1)])),P.substitution,P)]))},"=:=/2":function(I,P,y){var R=x.arithmetic_compare(I,y.args[0],y.args[1]);x.type.is_term(R)?I.throw_error(R):R===0&&I.success(P)},"=\\=/2":function(I,P,y){var R=x.arithmetic_compare(I,y.args[0],y.args[1]);x.type.is_term(R)?I.throw_error(R):R!==0&&I.success(P)},"/2":function(I,P,y){var R=x.arithmetic_compare(I,y.args[0],y.args[1]);x.type.is_term(R)?I.throw_error(R):R>0&&I.success(P)},">=/2":function(I,P,y){var R=x.arithmetic_compare(I,y.args[0],y.args[1]);x.type.is_term(R)?I.throw_error(R):R>=0&&I.success(P)},"var/1":function(I,P,y){x.type.is_variable(y.args[0])&&I.success(P)},"atom/1":function(I,P,y){x.type.is_atom(y.args[0])&&I.success(P)},"atomic/1":function(I,P,y){x.type.is_atomic(y.args[0])&&I.success(P)},"compound/1":function(I,P,y){x.type.is_compound(y.args[0])&&I.success(P)},"integer/1":function(I,P,y){x.type.is_integer(y.args[0])&&I.success(P)},"float/1":function(I,P,y){x.type.is_float(y.args[0])&&I.success(P)},"number/1":function(I,P,y){x.type.is_number(y.args[0])&&I.success(P)},"nonvar/1":function(I,P,y){x.type.is_variable(y.args[0])||I.success(P)},"ground/1":function(I,P,y){y.variables().length===0&&I.success(P)},"acyclic_term/1":function(I,P,y){for(var R=P.substitution.apply(P.substitution),z=y.args[0].variables(),X=0;X0?Pt[Pt.length-1]:null,Pt!==null&&(qt=J(I,Pt,0,I.__get_max_priority(),!1))}if(qt.type===p&&qt.len===Pt.length-1&&cn.value==="."){qt=qt.value.rename(I);var Sr=new q("=",[z,qt]);if(se.variables){var yr=g(o(Ce(qt.variables()),function(Rr){return new Se(Rr)}));Sr=new q(",",[Sr,new q("=",[se.variables,yr])])}if(se.variable_names){var yr=g(o(Ce(qt.variables()),function(Xr){var $n;for($n in I.session.renamed_variables)if(I.session.renamed_variables.hasOwnProperty($n)&&I.session.renamed_variables[$n]===Xr)break;return new q("=",[new q($n,[]),new Se(Xr)])}));Sr=new q(",",[Sr,new q("=",[se.variable_names,yr])])}if(se.singletons){var yr=g(o(new Ke(qt,null).singleton_variables(),function(Xr){var $n;for($n in I.session.renamed_variables)if(I.session.renamed_variables.hasOwnProperty($n)&&I.session.renamed_variables[$n]===Xr)break;return new q("=",[new q($n,[]),new Se(Xr)])}));Sr=new q(",",[Sr,new q("=",[se.singletons,yr])])}I.prepend([new ke(P.goal.replace(Sr),P.substitution,P)])}else qt.type===p?I.throw_error(x.error.syntax(Pt[qt.len],"unexpected token",!1)):I.throw_error(qt.value)}}},"write/1":function(I,P,y){var R=y.args[0];I.prepend([new ke(P.goal.replace(new q(",",[new q("current_output",[new Se("S")]),new q("write",[new Se("S"),R])])),P.substitution,P)])},"write/2":function(I,P,y){var R=y.args[0],z=y.args[1];I.prepend([new ke(P.goal.replace(new q("write_term",[R,z,new q(".",[new q("quoted",[new q("false",[])]),new q(".",[new q("ignore_ops",[new q("false")]),new q(".",[new q("numbervars",[new q("true")]),new q("[]",[])])])])])),P.substitution,P)])},"writeq/1":function(I,P,y){var R=y.args[0];I.prepend([new ke(P.goal.replace(new q(",",[new q("current_output",[new Se("S")]),new q("writeq",[new Se("S"),R])])),P.substitution,P)])},"writeq/2":function(I,P,y){var R=y.args[0],z=y.args[1];I.prepend([new ke(P.goal.replace(new q("write_term",[R,z,new q(".",[new q("quoted",[new q("true",[])]),new q(".",[new q("ignore_ops",[new q("false")]),new q(".",[new q("numbervars",[new q("true")]),new q("[]",[])])])])])),P.substitution,P)])},"write_canonical/1":function(I,P,y){var R=y.args[0];I.prepend([new ke(P.goal.replace(new q(",",[new q("current_output",[new Se("S")]),new q("write_canonical",[new Se("S"),R])])),P.substitution,P)])},"write_canonical/2":function(I,P,y){var R=y.args[0],z=y.args[1];I.prepend([new ke(P.goal.replace(new q("write_term",[R,z,new q(".",[new q("quoted",[new q("true",[])]),new q(".",[new q("ignore_ops",[new q("true")]),new q(".",[new q("numbervars",[new q("false")]),new q("[]",[])])])])])),P.substitution,P)])},"write_term/2":function(I,P,y){var R=y.args[0],z=y.args[1];I.prepend([new ke(P.goal.replace(new q(",",[new q("current_output",[new Se("S")]),new q("write_term",[new Se("S"),R,z])])),P.substitution,P)])},"write_term/3":function(I,P,y){var R=y.args[0],z=y.args[1],X=y.args[2],$=x.type.is_stream(R)?R:I.get_stream_by_alias(R.id);if(x.type.is_variable(R)||x.type.is_variable(X))I.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_list(X))I.throw_error(x.error.type("list",X,y.indicator));else if(!x.type.is_stream(R)&&!x.type.is_atom(R))I.throw_error(x.error.domain("stream_or_alias",R,y.indicator));else if(!x.type.is_stream($)||$.stream===null)I.throw_error(x.error.existence("stream",R,y.indicator));else if($.input)I.throw_error(x.error.permission("output","stream",R,y.indicator));else if($.type==="binary")I.throw_error(x.error.permission("output","binary_stream",R,y.indicator));else if($.position==="past_end_of_stream"&&$.eof_action==="error")I.throw_error(x.error.permission("output","past_end_of_stream",R,y.indicator));else{for(var se={},be=X,Fe;x.type.is_term(be)&&be.indicator==="./2";){if(Fe=be.args[0],x.type.is_variable(Fe)){I.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_write_option(Fe)){I.throw_error(x.error.domain("write_option",Fe,y.indicator));return}se[Fe.id]=Fe.args[0].id==="true",be=be.args[1]}if(be.indicator!=="[]/0"){x.type.is_variable(be)?I.throw_error(x.error.instantiation(y.indicator)):I.throw_error(x.error.type("list",X,y.indicator));return}else{se.session=I.session;var lt=z.toString(se);$.stream.put(lt,$.position),typeof $.position=="number"&&($.position+=lt.length),I.success(P)}}},"halt/0":function(I,P,y){I.points=[]},"halt/1":function(I,P,y){var R=y.args[0];x.type.is_variable(R)?I.throw_error(x.error.instantiation(y.indicator)):x.type.is_integer(R)?I.points=[]:I.throw_error(x.error.type("integer",R,y.indicator))},"current_prolog_flag/2":function(I,P,y){var R=y.args[0],z=y.args[1];if(!x.type.is_variable(R)&&!x.type.is_atom(R))I.throw_error(x.error.type("atom",R,y.indicator));else if(!x.type.is_variable(R)&&!x.type.is_flag(R))I.throw_error(x.error.domain("prolog_flag",R,y.indicator));else{var X=[];for(var $ in x.flag)if(x.flag.hasOwnProperty($)){var se=new q(",",[new q("=",[new q($),R]),new q("=",[I.get_flag($),z])]);X.push(new ke(P.goal.replace(se),P.substitution,P))}I.prepend(X)}},"set_prolog_flag/2":function(I,P,y){var R=y.args[0],z=y.args[1];x.type.is_variable(R)||x.type.is_variable(z)?I.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(R)?x.type.is_flag(R)?x.type.is_value_flag(R,z)?x.type.is_modifiable_flag(R)?(I.session.flag[R.id]=z,I.success(P)):I.throw_error(x.error.permission("modify","flag",R)):I.throw_error(x.error.domain("flag_value",new q("+",[R,z]),y.indicator)):I.throw_error(x.error.domain("prolog_flag",R,y.indicator)):I.throw_error(x.error.type("atom",R,y.indicator))}},flag:{bounded:{allowed:[new q("true"),new q("false")],value:new q("true"),changeable:!1},max_integer:{allowed:[new Re(Number.MAX_SAFE_INTEGER)],value:new Re(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new Re(Number.MIN_SAFE_INTEGER)],value:new Re(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new q("down"),new q("toward_zero")],value:new q("toward_zero"),changeable:!1},char_conversion:{allowed:[new q("on"),new q("off")],value:new q("on"),changeable:!0},debug:{allowed:[new q("on"),new q("off")],value:new q("off"),changeable:!0},max_arity:{allowed:[new q("unbounded")],value:new q("unbounded"),changeable:!1},unknown:{allowed:[new q("error"),new q("fail"),new q("warning")],value:new q("error"),changeable:!0},double_quotes:{allowed:[new q("chars"),new q("codes"),new q("atom")],value:new q("codes"),changeable:!0},occurs_check:{allowed:[new q("false"),new q("true")],value:new q("false"),changeable:!0},dialect:{allowed:[new q("tau")],value:new q("tau"),changeable:!1},version_data:{allowed:[new q("tau",[new Re(t.major,!1),new Re(t.minor,!1),new Re(t.patch,!1),new q(t.status)])],value:new q("tau",[new Re(t.major,!1),new Re(t.minor,!1),new Re(t.patch,!1),new q(t.status)]),changeable:!1},nodejs:{allowed:[new q("yes"),new q("no")],value:new q(typeof El<"u"&&El.exports?"yes":"no"),changeable:!1}},unify:function(I,P,y){y=y===void 0?!1:y;for(var R=[{left:I,right:P}],z={};R.length!==0;){var X=R.pop();if(I=X.left,P=X.right,x.type.is_term(I)&&x.type.is_term(P)){if(I.indicator!==P.indicator)return null;for(var $=0;$z.value?1:0:z}else return R},operate:function(I,P){if(x.type.is_operator(P)){for(var y=x.type.is_operator(P),R=[],z,X=!1,$=0;$I.get_flag("max_integer").value||z0?I.start+I.matches[0].length:I.start,z=y?new q("token_not_found"):new q("found",[new q(I.value.toString())]),X=new q(".",[new q("line",[new Re(I.line+1)]),new q(".",[new q("column",[new Re(R+1)]),new q(".",[z,new q("[]",[])])])]);return new q("error",[new q("syntax_error",[new q(P)]),X])},syntax_by_predicate:function(I,P){return new q("error",[new q("syntax_error",[new q(I)]),Z(P)])}},warning:{singleton:function(I,P,y){for(var R=new q("[]"),z=I.length-1;z>=0;z--)R=new q(".",[new Se(I[z]),R]);return new q("warning",[new q("singleton_variables",[R,Z(P)]),new q(".",[new q("line",[new Re(y,!1)]),new q("[]")])])},failed_goal:function(I,P){return new q("warning",[new q("failed_goal",[I]),new q(".",[new q("line",[new Re(P,!1)]),new q("[]")])])}},format_variable:function(I){return"_"+I},format_answer:function(I,P,R){P instanceof xe&&(P=P.thread);var R=R||{};if(R.session=P?P.session:void 0,x.type.is_error(I))return"uncaught exception: "+I.args[0].toString();if(I===!1)return"false.";if(I===null)return"limit exceeded ;";var z=0,X="";if(x.type.is_substitution(I)){var $=I.domain(!0);I=I.filter(function(Fe,lt){return!x.type.is_variable(lt)||$.indexOf(lt.id)!==-1&&Fe!==lt.id})}for(var se in I.links)I.links.hasOwnProperty(se)&&(z++,X!==""&&(X+=", "),X+=se.toString(R)+" = "+I.links[se].toString(R));var be=typeof P>"u"||P.points.length>0?" ;":".";return z===0?"true"+be:X+be},flatten_error:function(I){if(!x.type.is_error(I))return null;I=I.args[0];var P={};return P.type=I.args[0].id,P.thrown=P.type==="syntax_error"?null:I.args[1].id,P.expected=null,P.found=null,P.representation=null,P.existence=null,P.existence_type=null,P.line=null,P.column=null,P.permission_operation=null,P.permission_type=null,P.evaluation_type=null,P.type==="type_error"||P.type==="domain_error"?(P.expected=I.args[0].args[0].id,P.found=I.args[0].args[1].toString()):P.type==="syntax_error"?I.args[1].indicator==="./2"?(P.expected=I.args[0].args[0].id,P.found=I.args[1].args[1].args[1].args[0],P.found=P.found.id==="token_not_found"?P.found.id:P.found.args[0].id,P.line=I.args[1].args[0].args[0].value,P.column=I.args[1].args[1].args[0].args[0].value):P.thrown=I.args[1].id:P.type==="permission_error"?(P.found=I.args[0].args[2].toString(),P.permission_operation=I.args[0].args[0].id,P.permission_type=I.args[0].args[1].id):P.type==="evaluation_error"?P.evaluation_type=I.args[0].args[0].id:P.type==="representation_error"?P.representation=I.args[0].args[0].id:P.type==="existence_error"&&(P.existence=I.args[0].args[1].toString(),P.existence_type=I.args[0].args[0].id),P},create:function(I){return new x.type.Session(I)}};typeof El<"u"?El.exports=x:window.pl=x})()});function Vme(t,e,r){t.prepend(r.map(o=>new Oa.default.type.State(e.goal.replace(o),e.substitution,e)))}function n6(t){let e=Jme.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function zme(t,e){Jme.set(t,e),t.consult(`:- use_module(library(${Wgt.id})).`)}var i6,Oa,Kme,Nh,jgt,Ggt,Jme,Wgt,Xme=It(()=>{Ve();i6=et(L2()),Oa=et(r6()),Kme=et(ve("vm")),{is_atom:Nh,is_variable:jgt,is_instantiated_list:Ggt}=Oa.default.type;Jme=new WeakMap;Wgt=new Oa.default.type.Module("constraints",{"project_workspaces_by_descriptor/3":(t,e,r)=>{let[o,a,n]=r.args;if(!Nh(o)||!Nh(a)){t.throw_error(Oa.default.error.instantiation(r.indicator));return}let u=G.parseIdent(o.id),A=G.makeDescriptor(u,a.id),h=n6(t).tryWorkspaceByDescriptor(A);jgt(n)&&h!==null&&Vme(t,e,[new Oa.default.type.Term("=",[n,new Oa.default.type.Term(String(h.relativeCwd))])]),Nh(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},"workspace_field/3":(t,e,r)=>{let[o,a,n]=r.args;if(!Nh(o)||!Nh(a)){t.throw_error(Oa.default.error.instantiation(r.indicator));return}let A=n6(t).tryWorkspaceByCwd(o.id);if(A==null)return;let p=(0,i6.default)(A.manifest.raw,a.id);typeof p>"u"||Vme(t,e,[new Oa.default.type.Term("=",[n,new Oa.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},"workspace_field_test/3":(t,e,r)=>{let[o,a,n]=r.args;t.prepend([new Oa.default.type.State(e.goal.replace(new Oa.default.type.Term("workspace_field_test",[o,a,n,new Oa.default.type.Term("[]",[])])),e.substitution,e)])},"workspace_field_test/4":(t,e,r)=>{let[o,a,n,u]=r.args;if(!Nh(o)||!Nh(a)||!Nh(n)||!Ggt(u)){t.throw_error(Oa.default.error.instantiation(r.indicator));return}let p=n6(t).tryWorkspaceByCwd(o.id);if(p==null)return;let h=(0,i6.default)(p.manifest.raw,a.id);if(typeof h>"u")return;let E={$$:h};for(let[D,b]of u.toJavaScript().entries())E[`$${D}`]=b;Kme.default.runInNewContext(n.id,E)&&t.success(e)}},["project_workspaces_by_descriptor/3","workspace_field/3","workspace_field_test/3","workspace_field_test/4"])});var Y2={};Vt(Y2,{Constraints:()=>o6,DependencyType:()=>tye});function Ks(t){if(t instanceof rC.default.type.Num)return t.value;if(t instanceof rC.default.type.Term)switch(t.indicator){case"throw/1":return Ks(t.args[0]);case"error/1":return Ks(t.args[0]);case"error/2":if(t.args[0]instanceof rC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(Ks(t.args[0]),...Ks(t.args[1]));{let e=Ks(t.args[0]);return e.message+=` (in ${Ks(t.args[1])})`,e}case"syntax_error/1":return new Jt(43,`Syntax error: ${Ks(t.args[0])}`);case"existence_error/2":return new Jt(44,`Existence error: ${Ks(t.args[0])} ${Ks(t.args[1])} not found`);case"instantiation_error/0":return new Jt(75,"Instantiation error: an argument is variable when an instantiated argument was expected");case"line/1":return{line:Ks(t.args[0])};case"column/1":return{column:Ks(t.args[0])};case"found/1":return{found:Ks(t.args[0])};case"./2":return[Ks(t.args[0])].concat(Ks(t.args[1]));case"//2":return`${Ks(t.args[0])}/${Ks(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function $me(t){let e;try{e=Ks(t)}catch(r){throw typeof r=="string"?new Jt(42,`Unknown error: ${t} (note: ${r})`):r}return typeof e.line<"u"&&typeof e.column<"u"&&(e.message+=` at line ${e.line}, column ${e.column}`),e}function Zg(t){return t.id==="null"?null:`${t.toJavaScript()}`}function Ygt(t){if(t.id==="null")return null;{let e=t.toJavaScript();if(typeof e!="string")return JSON.stringify(e);try{return JSON.stringify(JSON.parse(e))}catch{return JSON.stringify(e)}}}function Oh(t){return typeof t=="string"?`'${t}'`:"[]"}var eye,rC,tye,Zme,s6,o6,V2=It(()=>{Ve();Ve();St();eye=et(Qme()),rC=et(r6());j2();Xme();(0,eye.default)(rC.default);tye=(o=>(o.Dependencies="dependencies",o.DevDependencies="devDependencies",o.PeerDependencies="peerDependencies",o))(tye||{}),Zme=["dependencies","devDependencies","peerDependencies"];s6=class{constructor(e,r){let o=1e3*e.workspaces.length;this.session=rC.default.create(o),zme(this.session,e),this.session.consult(":- use_module(library(lists))."),this.session.consult(r)}fetchNextAnswer(){return new Promise(e=>{this.session.answer(r=>{e(r)})})}async*makeQuery(e){let r=this.session.query(e);if(r!==!0)throw $me(r);for(;;){let o=await this.fetchNextAnswer();if(o===null)throw new Jt(79,"Resolution limit exceeded");if(!o)break;if(o.id==="throw")throw $me(o);yield o}}};o6=class t{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");ae.existsSync(r)&&(this.source=ae.readFileSync(r,"utf8"))}static async find(e){return new t(e)}getProjectDatabase(){let e="";for(let r of Zme)e+=`dependency_type(${r}). +`;for(let r of this.project.workspacesByCwd.values()){let o=r.relativeCwd;e+=`workspace(${Oh(o)}). +`,e+=`workspace_ident(${Oh(o)}, ${Oh(G.stringifyIdent(r.anchoredLocator))}). +`,e+=`workspace_version(${Oh(o)}, ${Oh(r.manifest.version)}). +`;for(let a of Zme)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${Oh(o)}, ${Oh(G.stringifyIdent(n))}, ${Oh(n.range)}, ${a}). +`}return e+=`workspace(_) :- false. +`,e+=`workspace_ident(_, _) :- false. +`,e+=`workspace_version(_, _) :- false. +`,e+=`workspace_has_dependency(_, _, _, _) :- false. +`,e}getDeclarations(){let e="";return e+=`gen_enforced_dependency(_, _, _, _) :- false. +`,e+=`gen_enforced_field(_, _, _) :- false. +`,e}get fullSource(){return`${this.getProjectDatabase()} +${this.source} +${this.getDeclarations()}`}createSession(){return new s6(this.project,this.fullSource)}async processClassic(){let e=this.createSession();return{enforcedDependencies:await this.genEnforcedDependencies(e),enforcedFields:await this.genEnforcedFields(e)}}async process(){let{enforcedDependencies:e,enforcedFields:r}=await this.processClassic(),o=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:u,dependencyType:A}of e){let p=q2([A,G.stringifyIdent(n)]),h=qe.getMapWithDefault(o,a.cwd);qe.getMapWithDefault(h,p).set(u??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:u}of r){let A=q2(n),p=qe.getMapWithDefault(o,a.cwd);qe.getMapWithDefault(p,A).set(JSON.parse(u)??void 0,new Set)}return{manifestUpdates:o,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=V.resolve(this.project.cwd,Zg(o.links.WorkspaceCwd)),n=Zg(o.links.DependencyIdent),u=Zg(o.links.DependencyRange),A=Zg(o.links.DependencyType);if(a===null||n===null)throw new Error("Invalid rule");let p=this.project.getWorkspaceByCwd(a),h=G.parseIdent(n);r.push({workspace:p,dependencyIdent:h,dependencyRange:u,dependencyType:A})}return qe.sortMap(r,[({dependencyRange:o})=>o!==null?"0":"1",({workspace:o})=>G.stringifyIdent(o.anchoredLocator),({dependencyIdent:o})=>G.stringifyIdent(o)])}async genEnforcedFields(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=V.resolve(this.project.cwd,Zg(o.links.WorkspaceCwd)),n=Zg(o.links.FieldPath),u=Ygt(o.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let A=this.project.getWorkspaceByCwd(a);r.push({workspace:A,fieldPath:n,fieldValue:u})}return qe.sortMap(r,[({workspace:o})=>G.stringifyIdent(o.anchoredLocator),({fieldPath:o})=>o])}async*query(e){let r=this.createSession();for await(let o of r.makeQuery(e)){let a={};for(let[n,u]of Object.entries(o.links))n!=="_"&&(a[n]=Zg(u));yield a}}}});var uye=_(tQ=>{"use strict";Object.defineProperty(tQ,"__esModule",{value:!0});function lB(t){let e=[...t.caches],r=e.shift();return r===void 0?cye():{get(o,a,n={miss:()=>Promise.resolve()}){return r.get(o,a,n).catch(()=>lB({caches:e}).get(o,a,n))},set(o,a){return r.set(o,a).catch(()=>lB({caches:e}).set(o,a))},delete(o){return r.delete(o).catch(()=>lB({caches:e}).delete(o))},clear(){return r.clear().catch(()=>lB({caches:e}).clear())}}}function cye(){return{get(t,e,r={miss:()=>Promise.resolve()}){return e().then(a=>Promise.all([a,r.miss(a)])).then(([a])=>a)},set(t,e){return Promise.resolve(e)},delete(t){return Promise.resolve()},clear(){return Promise.resolve()}}}tQ.createFallbackableCache=lB;tQ.createNullCache=cye});var fye=_((pYt,Aye)=>{Aye.exports=uye()});var pye=_(C6=>{"use strict";Object.defineProperty(C6,"__esModule",{value:!0});function Adt(t={serializable:!0}){let e={};return{get(r,o,a={miss:()=>Promise.resolve()}){let n=JSON.stringify(r);if(n in e)return Promise.resolve(t.serializable?JSON.parse(e[n]):e[n]);let u=o(),A=a&&a.miss||(()=>Promise.resolve());return u.then(p=>A(p)).then(()=>u)},set(r,o){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}C6.createInMemoryCache=Adt});var gye=_((gYt,hye)=>{hye.exports=pye()});var mye=_(su=>{"use strict";Object.defineProperty(su,"__esModule",{value:!0});function fdt(t,e,r){let o={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===I6.WithinHeaders?o:{}},queryParameters(){return t===I6.WithinQueryParameters?o:{}}}}function pdt(t){let e=0,r=()=>(e++,new Promise(o=>{setTimeout(()=>{o(t(r))},Math.min(100*e,1e3))}));return t(r)}function dye(t,e=(r,o)=>Promise.resolve()){return Object.assign(t,{wait(r){return dye(t.then(o=>Promise.all([e(o,r),o])).then(o=>o[1]))}})}function hdt(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),o=t[e];t[e]=t[r],t[r]=o}return t}function gdt(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function ddt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var mdt="4.22.1",ydt=t=>()=>t.transporter.requester.destroy(),I6={WithinQueryParameters:0,WithinHeaders:1};su.AuthMode=I6;su.addMethods=gdt;su.createAuth=fdt;su.createRetryablePromise=pdt;su.createWaitablePromise=dye;su.destroy=ydt;su.encode=ddt;su.shuffle=hdt;su.version=mdt});var cB=_((mYt,yye)=>{yye.exports=mye()});var Eye=_(w6=>{"use strict";Object.defineProperty(w6,"__esModule",{value:!0});var Edt={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};w6.MethodEnum=Edt});var uB=_((EYt,Cye)=>{Cye.exports=Eye()});var Lye=_(Ti=>{"use strict";Object.defineProperty(Ti,"__esModule",{value:!0});var wye=uB();function B6(t,e){let r=t||{},o=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(o[a]=r[a])}),{data:Object.entries(o).length>0?o:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var AB={Read:1,Write:2,Any:3},fC={Up:1,Down:2,Timeouted:3},Bye=2*60*1e3;function D6(t,e=fC.Up){return{...t,status:e,lastUpdate:Date.now()}}function vye(t){return t.status===fC.Up||Date.now()-t.lastUpdate>Bye}function Dye(t){return t.status===fC.Timeouted&&Date.now()-t.lastUpdate<=Bye}function S6(t){return typeof t=="string"?{protocol:"https",url:t,accept:AB.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||AB.Any}}function Cdt(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(D6(r))))).then(r=>{let o=r.filter(A=>vye(A)),a=r.filter(A=>Dye(A)),n=[...o,...a],u=n.length>0?n.map(A=>S6(A)):e;return{getTimeout(A,p){return(a.length===0&&A===0?1:a.length+3+A)*p},statelessHosts:u}})}var Idt=({isTimedOut:t,status:e})=>!t&&~~e===0,wdt=t=>{let e=t.status;return t.isTimedOut||Idt(t)||~~(e/100)!==2&&~~(e/100)!==4},Bdt=({status:t})=>~~(t/100)===2,vdt=(t,e)=>wdt(t)?e.onRetry(t):Bdt(t)?e.onSuccess(t):e.onFail(t);function Iye(t,e,r,o){let a=[],n=kye(r,o),u=Qye(t,o),A=r.method,p=r.method!==wye.MethodEnum.Get?{}:{...r.data,...o.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...o.queryParameters},E=0,w=(D,b)=>{let C=D.pop();if(C===void 0)throw Tye(v6(a));let T={data:n,headers:u,method:A,url:xye(C,r.path,h),connectTimeout:b(E,t.timeouts.connect),responseTimeout:b(E,o.timeout)},N=J=>{let te={request:T,response:J,host:C,triesLeft:D.length};return a.push(te),te},U={onSuccess:J=>Sye(J),onRetry(J){let te=N(J);return J.isTimedOut&&E++,Promise.all([t.logger.info("Retryable failure",P6(te)),t.hostsCache.set(C,D6(C,J.isTimedOut?fC.Timeouted:fC.Down))]).then(()=>w(D,b))},onFail(J){throw N(J),Pye(J,v6(a))}};return t.requester.send(T).then(J=>vdt(J,U))};return Cdt(t.hostsCache,e).then(D=>w([...D.statelessHosts].reverse(),D.getTimeout))}function Ddt(t){let{hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,hosts:p,queryParameters:h,headers:E}=t,w={hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,headers:E,queryParameters:h,hosts:p.map(D=>S6(D)),read(D,b){let C=B6(b,w.timeouts.read),T=()=>Iye(w,w.hosts.filter(J=>(J.accept&AB.Read)!==0),D,C);if((C.cacheable!==void 0?C.cacheable:D.cacheable)!==!0)return T();let U={request:D,mappedRequestOptions:C,transporter:{queryParameters:w.queryParameters,headers:w.headers}};return w.responsesCache.get(U,()=>w.requestsCache.get(U,()=>w.requestsCache.set(U,T()).then(J=>Promise.all([w.requestsCache.delete(U),J]),J=>Promise.all([w.requestsCache.delete(U),Promise.reject(J)])).then(([J,te])=>te)),{miss:J=>w.responsesCache.set(U,J)})},write(D,b){return Iye(w,w.hosts.filter(C=>(C.accept&AB.Write)!==0),D,B6(b,w.timeouts.write))}};return w}function Sdt(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let o=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(o)===-1&&(e.value=`${e.value}${o}`),e}};return e}function Sye(t){try{return JSON.parse(t.content)}catch(e){throw Rye(e.message,t)}}function Pye({content:t,status:e},r){let o=t;try{o=JSON.parse(t).message}catch{}return Fye(o,e,r)}function Pdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function xye(t,e,r){let o=bye(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return o.length&&(a+=`?${o}`),a}function bye(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>Pdt("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function kye(t,e){if(t.method===wye.MethodEnum.Get||t.data===void 0&&e.data===void 0)return;let r=Array.isArray(t.data)?t.data:{...t.data,...e.data};return JSON.stringify(r)}function Qye(t,e){let r={...t.headers,...e.headers},o={};return Object.keys(r).forEach(a=>{let n=r[a];o[a.toLowerCase()]=n}),o}function v6(t){return t.map(e=>P6(e))}function P6(t){let e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...t,request:{...t.request,headers:{...t.request.headers,...e}}}}function Fye(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function Rye(t,e){return{name:"DeserializationError",message:t,response:e}}function Tye(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Ti.CallEnum=AB;Ti.HostStatusEnum=fC;Ti.createApiError=Fye;Ti.createDeserializationError=Rye;Ti.createMappedRequestOptions=B6;Ti.createRetryError=Tye;Ti.createStatefulHost=D6;Ti.createStatelessHost=S6;Ti.createTransporter=Ddt;Ti.createUserAgent=Sdt;Ti.deserializeFailure=Pye;Ti.deserializeSuccess=Sye;Ti.isStatefulHostTimeouted=Dye;Ti.isStatefulHostUp=vye;Ti.serializeData=kye;Ti.serializeHeaders=Qye;Ti.serializeQueryParameters=bye;Ti.serializeUrl=xye;Ti.stackFrameWithoutCredentials=P6;Ti.stackTraceWithoutCredentials=v6});var fB=_((IYt,Nye)=>{Nye.exports=Lye()});var Oye=_(Mh=>{"use strict";Object.defineProperty(Mh,"__esModule",{value:!0});var pC=cB(),xdt=fB(),pB=uB(),bdt=t=>{let e=t.region||"us",r=pC.createAuth(pC.AuthMode.WithinHeaders,t.appId,t.apiKey),o=xdt.createTransporter({hosts:[{url:`analytics.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a=t.appId;return pC.addMethods({appId:a,transporter:o},t.methods)},kdt=t=>(e,r)=>t.transporter.write({method:pB.MethodEnum.Post,path:"2/abtests",data:e},r),Qdt=t=>(e,r)=>t.transporter.write({method:pB.MethodEnum.Delete,path:pC.encode("2/abtests/%s",e)},r),Fdt=t=>(e,r)=>t.transporter.read({method:pB.MethodEnum.Get,path:pC.encode("2/abtests/%s",e)},r),Rdt=t=>e=>t.transporter.read({method:pB.MethodEnum.Get,path:"2/abtests"},e),Tdt=t=>(e,r)=>t.transporter.write({method:pB.MethodEnum.Post,path:pC.encode("2/abtests/%s/stop",e)},r);Mh.addABTest=kdt;Mh.createAnalyticsClient=bdt;Mh.deleteABTest=Qdt;Mh.getABTest=Fdt;Mh.getABTests=Rdt;Mh.stopABTest=Tdt});var Uye=_((BYt,Mye)=>{Mye.exports=Oye()});var Hye=_(hB=>{"use strict";Object.defineProperty(hB,"__esModule",{value:!0});var x6=cB(),Ldt=fB(),_ye=uB(),Ndt=t=>{let e=t.region||"us",r=x6.createAuth(x6.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Ldt.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return x6.addMethods({appId:t.appId,transporter:o},t.methods)},Odt=t=>e=>t.transporter.read({method:_ye.MethodEnum.Get,path:"1/strategies/personalization"},e),Mdt=t=>(e,r)=>t.transporter.write({method:_ye.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);hB.createPersonalizationClient=Ndt;hB.getPersonalizationStrategy=Odt;hB.setPersonalizationStrategy=Mdt});var jye=_((DYt,qye)=>{qye.exports=Hye()});var nEe=_(Rt=>{"use strict";Object.defineProperty(Rt,"__esModule",{value:!0});var Wt=cB(),Ma=fB(),Dr=uB(),Udt=ve("crypto");function rQ(t){let e=r=>t.request(r).then(o=>{if(t.batch!==void 0&&t.batch(o.hits),!t.shouldStop(o))return o.cursor?e({cursor:o.cursor}):e({page:(r.page||0)+1})});return e({})}var _dt=t=>{let e=t.appId,r=Wt.createAuth(t.authMode!==void 0?t.authMode:Wt.AuthMode.WithinHeaders,e,t.apiKey),o=Ma.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:Ma.CallEnum.Read},{url:`${e}.algolia.net`,accept:Ma.CallEnum.Write}].concat(Wt.shuffle([{url:`${e}-1.algolianet.com`},{url:`${e}-2.algolianet.com`},{url:`${e}-3.algolianet.com`}])),...t,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a={transporter:o,appId:e,addAlgoliaAgent(n,u){o.userAgent.add({segment:n,version:u})},clearCache(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(()=>{})}};return Wt.addMethods(a,t.methods)};function Gye(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function Wye(){return{name:"ObjectNotFoundError",message:"Object not found."}}function Yye(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Hdt=t=>(e,r)=>{let{queryParameters:o,...a}=r||{},n={acl:e,...o!==void 0?{queryParameters:o}:{}},u=(A,p)=>Wt.createRetryablePromise(h=>gB(t)(A.key,p).catch(E=>{if(E.status!==404)throw E;return h()}));return Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:"1/keys",data:n},a),u)},qdt=t=>(e,r,o)=>{let a=Ma.createMappedRequestOptions(o);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Dr.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},jdt=t=>(e,r,o)=>t.transporter.write({method:Dr.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},o),Gdt=t=>(e,r)=>Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(o,a)=>hC(t)(o.taskID,a)),nQ=t=>(e,r,o)=>{let a=(n,u)=>dB(t)(e,{methods:{waitTask:es}}).waitTask(n.taskID,u);return Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},o),a)},Wdt=t=>(e,r,o)=>nQ(t)(e,r,{...o,scope:[sQ.Rules]}),Ydt=t=>(e,r,o)=>nQ(t)(e,r,{...o,scope:[sQ.Settings]}),Vdt=t=>(e,r,o)=>nQ(t)(e,r,{...o,scope:[sQ.Synonyms]}),Kdt=t=>(e,r)=>e.method===Dr.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),Jdt=t=>(e,r)=>{let o=(a,n)=>Wt.createRetryablePromise(u=>gB(t)(e,n).then(u).catch(A=>{if(A.status!==404)throw A}));return Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Delete,path:Wt.encode("1/keys/%s",e)},r),o)},zdt=t=>(e,r,o)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>hC(t)(n.taskID,u))},Xdt=()=>(t,e)=>{let r=Ma.serializeQueryParameters(e),o=Udt.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(o+r).toString("base64")},gB=t=>(e,r)=>t.transporter.read({method:Dr.MethodEnum.Get,path:Wt.encode("1/keys/%s",e)},r),Vye=t=>(e,r)=>t.transporter.read({method:Dr.MethodEnum.Get,path:Wt.encode("1/task/%s",e.toString())},r),Zdt=t=>e=>t.transporter.read({method:Dr.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),$dt=t=>e=>t.transporter.read({method:Dr.MethodEnum.Get,path:"1/logs"},e),emt=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,o=e.match(r);if(o===null)throw Yye();return parseInt(o[1],10)-Math.round(new Date().getTime()/1e3)},tmt=t=>e=>t.transporter.read({method:Dr.MethodEnum.Get,path:"1/clusters/mapping/top"},e),rmt=t=>(e,r)=>t.transporter.read({method:Dr.MethodEnum.Get,path:Wt.encode("1/clusters/mapping/%s",e)},r),nmt=t=>e=>{let{retrieveMappings:r,...o}=e||{};return r===!0&&(o.getClusters=!0),t.transporter.read({method:Dr.MethodEnum.Get,path:"1/clusters/mapping/pending"},o)},dB=t=>(e,r={})=>{let o={transporter:t.transporter,appId:t.appId,indexName:e};return Wt.addMethods(o,r.methods)},imt=t=>e=>t.transporter.read({method:Dr.MethodEnum.Get,path:"1/keys"},e),smt=t=>e=>t.transporter.read({method:Dr.MethodEnum.Get,path:"1/clusters"},e),omt=t=>e=>t.transporter.read({method:Dr.MethodEnum.Get,path:"1/indexes"},e),amt=t=>e=>t.transporter.read({method:Dr.MethodEnum.Get,path:"1/clusters/mapping"},e),lmt=t=>(e,r,o)=>{let a=(n,u)=>dB(t)(e,{methods:{waitTask:es}}).waitTask(n.taskID,u);return Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},o),a)},cmt=t=>(e,r)=>{let o=(a,n)=>Promise.all(Object.keys(a.taskID).map(u=>dB(t)(u,{methods:{waitTask:es}}).waitTask(a.taskID[u],n)));return Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),o)},umt=t=>(e,r)=>t.transporter.read({method:Dr.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),Amt=t=>(e,r)=>{let o=e.map(a=>({...a,params:Ma.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:Dr.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},r)},fmt=t=>(e,r)=>Promise.all(e.map(o=>{let{facetName:a,facetQuery:n,...u}=o.params;return dB(t)(o.indexName,{methods:{searchForFacetValues:eEe}}).searchForFacetValues(a,n,{...r,...u})})),pmt=t=>(e,r)=>{let o=Ma.createMappedRequestOptions(r);return o.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Dr.MethodEnum.Delete,path:"1/clusters/mapping"},o)},hmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},o),(n,u)=>hC(t)(n.taskID,u))},gmt=t=>(e,r)=>{let o=(a,n)=>Wt.createRetryablePromise(u=>gB(t)(e,n).catch(A=>{if(A.status!==404)throw A;return u()}));return Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("1/keys/%s/restore",e)},r),o)},dmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>hC(t)(n.taskID,u))},mmt=t=>(e,r,o)=>t.transporter.read({method:Dr.MethodEnum.Post,path:Wt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},o),ymt=t=>(e,r)=>t.transporter.read({method:Dr.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),Emt=t=>(e,r)=>Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(o,a)=>hC(t)(o.taskID,a)),Cmt=t=>(e,r)=>{let o=Object.assign({},r),{queryParameters:a,...n}=r||{},u=a?{queryParameters:a}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=E=>Object.keys(o).filter(w=>A.indexOf(w)!==-1).every(w=>{if(Array.isArray(E[w])&&Array.isArray(o[w])){let D=E[w];return D.length===o[w].length&&D.every((b,C)=>b===o[w][C])}else return E[w]===o[w]}),h=(E,w)=>Wt.createRetryablePromise(D=>gB(t)(e,w).then(b=>p(b)?Promise.resolve():D()));return Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Put,path:Wt.encode("1/keys/%s",e),data:u},n),h)},hC=t=>(e,r)=>Wt.createRetryablePromise(o=>Vye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),Kye=t=>(e,r)=>{let o=(a,n)=>es(t)(a.taskID,n);return Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),o)},Imt=t=>e=>rQ({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),wmt=t=>e=>{let r={hitsPerPage:1e3,...e};return rQ({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Bmt=t=>e=>{let r={hitsPerPage:1e3,...e};return rQ({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},iQ=t=>(e,r,o)=>{let{batchSize:a,...n}=o||{},u={taskIDs:[],objectIDs:[]},A=(p=0)=>{let h=[],E;for(E=p;E({action:r,body:w})),n).then(w=>(u.objectIDs=u.objectIDs.concat(w.objectIDs),u.taskIDs.push(w.taskID),E++,A(E)))};return Wt.createWaitablePromise(A(),(p,h)=>Promise.all(p.taskIDs.map(E=>es(t)(E,h))))},vmt=t=>e=>Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/clear",t.indexName)},e),(r,o)=>es(t)(r.taskID,o)),Dmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Ma.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,u)=>es(t)(n.taskID,u))},Smt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Ma.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,u)=>es(t)(n.taskID,u))},Pmt=t=>(e,r)=>Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(o,a)=>es(t)(o.taskID,a)),xmt=t=>e=>Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Delete,path:Wt.encode("1/indexes/%s",t.indexName)},e),(r,o)=>es(t)(r.taskID,o)),bmt=t=>(e,r)=>Wt.createWaitablePromise(Jye(t)([e],r).then(o=>({taskID:o.taskIDs[0]})),(o,a)=>es(t)(o.taskID,a)),Jye=t=>(e,r)=>{let o=e.map(a=>({objectID:a}));return iQ(t)(o,ed.DeleteObject,r)},kmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Ma.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Delete,path:Wt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(u,A)=>es(t)(u.taskID,A))},Qmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Ma.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Delete,path:Wt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(u,A)=>es(t)(u.taskID,A))},Fmt=t=>e=>zye(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),Rmt=t=>(e,r,o)=>t.transporter.read({method:Dr.MethodEnum.Post,path:Wt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},o),Tmt=t=>(e,r)=>{let{query:o,paginate:a,...n}=r||{},u=0,A=()=>$ye(t)(o||"",{...n,page:u}).then(p=>{for(let[h,E]of Object.entries(p.hits))if(e(E))return{object:E,position:parseInt(h,10),page:u};if(u++,a===!1||u>=p.nbPages)throw Wye();return A()});return A()},Lmt=t=>(e,r)=>t.transporter.read({method:Dr.MethodEnum.Get,path:Wt.encode("1/indexes/%s/%s",t.indexName,e)},r),Nmt=()=>(t,e)=>{for(let[r,o]of Object.entries(t.hits))if(o.objectID===e)return parseInt(r,10);return-1},Omt=t=>(e,r)=>{let{attributesToRetrieve:o,...a}=r||{},n=e.map(u=>({indexName:t.indexName,objectID:u,...o?{attributesToRetrieve:o}:{}}));return t.transporter.read({method:Dr.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},Mmt=t=>(e,r)=>t.transporter.read({method:Dr.MethodEnum.Get,path:Wt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),zye=t=>e=>t.transporter.read({method:Dr.MethodEnum.Get,path:Wt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),Umt=t=>(e,r)=>t.transporter.read({method:Dr.MethodEnum.Get,path:Wt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),Xye=t=>(e,r)=>t.transporter.read({method:Dr.MethodEnum.Get,path:Wt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),_mt=t=>(e,r)=>Wt.createWaitablePromise(Zye(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>es(t)(o.taskID,a)),Zye=t=>(e,r)=>{let{createIfNotExists:o,...a}=r||{},n=o?ed.PartialUpdateObject:ed.PartialUpdateObjectNoCreate;return iQ(t)(e,n,a)},Hmt=t=>(e,r)=>{let{safe:o,autoGenerateObjectIDIfNotExist:a,batchSize:n,...u}=r||{},A=(C,T,N,U)=>Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/operation",C),data:{operation:N,destination:T}},U),(J,te)=>es(t)(J.taskID,te)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,E=b6({appId:t.appId,transporter:t.transporter,indexName:h}),w=[],D=A(t.indexName,h,"copy",{...u,scope:["settings","synonyms","rules"]});w.push(D);let b=(o?D.wait(u):D).then(()=>{let C=E(e,{...u,autoGenerateObjectIDIfNotExist:a,batchSize:n});return w.push(C),o?C.wait(u):C}).then(()=>{let C=A(h,t.indexName,"move",u);return w.push(C),o?C.wait(u):C}).then(()=>Promise.all(w)).then(([C,T,N])=>({objectIDs:T.objectIDs,taskIDs:[C.taskID,...T.taskIDs,N.taskID]}));return Wt.createWaitablePromise(b,(C,T)=>Promise.all(w.map(N=>N.wait(T))))},qmt=t=>(e,r)=>k6(t)(e,{...r,clearExistingRules:!0}),jmt=t=>(e,r)=>Q6(t)(e,{...r,clearExistingSynonyms:!0}),Gmt=t=>(e,r)=>Wt.createWaitablePromise(b6(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>es(t)(o.taskID,a)),b6=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:o,...a}=r||{},n=o?ed.AddObject:ed.UpdateObject;if(n===ed.UpdateObject){for(let u of e)if(u.objectID===void 0)return Wt.createWaitablePromise(Promise.reject(Gye()))}return iQ(t)(e,n,a)},Wmt=t=>(e,r)=>k6(t)([e],r),k6=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingRules:a,...n}=r||{},u=Ma.createMappedRequestOptions(n);return o&&(u.queryParameters.forwardToReplicas=1),a&&(u.queryParameters.clearExistingRules=1),Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},u),(A,p)=>es(t)(A.taskID,p))},Ymt=t=>(e,r)=>Q6(t)([e],r),Q6=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingSynonyms:a,replaceExistingSynonyms:n,...u}=r||{},A=Ma.createMappedRequestOptions(u);return o&&(A.queryParameters.forwardToReplicas=1),(n||a)&&(A.queryParameters.replaceExistingSynonyms=1),Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},A),(p,h)=>es(t)(p.taskID,h))},$ye=t=>(e,r)=>t.transporter.read({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),eEe=t=>(e,r,o)=>t.transporter.read({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},o),tEe=t=>(e,r)=>t.transporter.read({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),rEe=t=>(e,r)=>t.transporter.read({method:Dr.MethodEnum.Post,path:Wt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),Vmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Ma.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(t.transporter.write({method:Dr.MethodEnum.Put,path:Wt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(u,A)=>es(t)(u.taskID,A))},es=t=>(e,r)=>Wt.createRetryablePromise(o=>Xye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),Kmt={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",Inference:"inference",ListIndexes:"listIndexes",Logs:"logs",Personalization:"personalization",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},ed={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},sQ={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},Jmt={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},zmt={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Rt.ApiKeyACLEnum=Kmt;Rt.BatchActionEnum=ed;Rt.ScopeEnum=sQ;Rt.StrategyEnum=Jmt;Rt.SynonymEnum=zmt;Rt.addApiKey=Hdt;Rt.assignUserID=qdt;Rt.assignUserIDs=jdt;Rt.batch=Kye;Rt.browseObjects=Imt;Rt.browseRules=wmt;Rt.browseSynonyms=Bmt;Rt.chunkedBatch=iQ;Rt.clearDictionaryEntries=Gdt;Rt.clearObjects=vmt;Rt.clearRules=Dmt;Rt.clearSynonyms=Smt;Rt.copyIndex=nQ;Rt.copyRules=Wdt;Rt.copySettings=Ydt;Rt.copySynonyms=Vdt;Rt.createBrowsablePromise=rQ;Rt.createMissingObjectIDError=Gye;Rt.createObjectNotFoundError=Wye;Rt.createSearchClient=_dt;Rt.createValidUntilNotFoundError=Yye;Rt.customRequest=Kdt;Rt.deleteApiKey=Jdt;Rt.deleteBy=Pmt;Rt.deleteDictionaryEntries=zdt;Rt.deleteIndex=xmt;Rt.deleteObject=bmt;Rt.deleteObjects=Jye;Rt.deleteRule=kmt;Rt.deleteSynonym=Qmt;Rt.exists=Fmt;Rt.findAnswers=Rmt;Rt.findObject=Tmt;Rt.generateSecuredApiKey=Xdt;Rt.getApiKey=gB;Rt.getAppTask=Vye;Rt.getDictionarySettings=Zdt;Rt.getLogs=$dt;Rt.getObject=Lmt;Rt.getObjectPosition=Nmt;Rt.getObjects=Omt;Rt.getRule=Mmt;Rt.getSecuredApiKeyRemainingValidity=emt;Rt.getSettings=zye;Rt.getSynonym=Umt;Rt.getTask=Xye;Rt.getTopUserIDs=tmt;Rt.getUserID=rmt;Rt.hasPendingMappings=nmt;Rt.initIndex=dB;Rt.listApiKeys=imt;Rt.listClusters=smt;Rt.listIndices=omt;Rt.listUserIDs=amt;Rt.moveIndex=lmt;Rt.multipleBatch=cmt;Rt.multipleGetObjects=umt;Rt.multipleQueries=Amt;Rt.multipleSearchForFacetValues=fmt;Rt.partialUpdateObject=_mt;Rt.partialUpdateObjects=Zye;Rt.removeUserID=pmt;Rt.replaceAllObjects=Hmt;Rt.replaceAllRules=qmt;Rt.replaceAllSynonyms=jmt;Rt.replaceDictionaryEntries=hmt;Rt.restoreApiKey=gmt;Rt.saveDictionaryEntries=dmt;Rt.saveObject=Gmt;Rt.saveObjects=b6;Rt.saveRule=Wmt;Rt.saveRules=k6;Rt.saveSynonym=Ymt;Rt.saveSynonyms=Q6;Rt.search=$ye;Rt.searchDictionaryEntries=mmt;Rt.searchForFacetValues=eEe;Rt.searchRules=tEe;Rt.searchSynonyms=rEe;Rt.searchUserIDs=ymt;Rt.setDictionarySettings=Emt;Rt.setSettings=Vmt;Rt.updateApiKey=Cmt;Rt.waitAppTask=hC;Rt.waitTask=es});var sEe=_((PYt,iEe)=>{iEe.exports=nEe()});var oEe=_(oQ=>{"use strict";Object.defineProperty(oQ,"__esModule",{value:!0});function Xmt(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var Zmt={Debug:1,Info:2,Error:3};oQ.LogLevelEnum=Zmt;oQ.createNullLogger=Xmt});var lEe=_((bYt,aEe)=>{aEe.exports=oEe()});var fEe=_(F6=>{"use strict";Object.defineProperty(F6,"__esModule",{value:!0});var cEe=ve("http"),uEe=ve("https"),$mt=ve("url"),AEe={keepAlive:!0},eyt=new cEe.Agent(AEe),tyt=new uEe.Agent(AEe);function ryt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:o={}}={}){let a=e||t||eyt,n=r||t||tyt;return{send(u){return new Promise(A=>{let p=$mt.parse(u.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,E={...o,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:u.method,headers:{...o&&o.headers?o.headers:{},...u.headers},...p.port!==void 0?{port:p.port||""}:{}},w=(p.protocol==="https:"?uEe:cEe).request(E,T=>{let N=[];T.on("data",U=>{N=N.concat(U)}),T.on("end",()=>{clearTimeout(b),clearTimeout(C),A({status:T.statusCode||0,content:Buffer.concat(N).toString(),isTimedOut:!1})})}),D=(T,N)=>setTimeout(()=>{w.abort(),A({status:0,content:N,isTimedOut:!0})},T*1e3),b=D(u.connectTimeout,"Connection timeout"),C;w.on("error",T=>{clearTimeout(b),clearTimeout(C),A({status:0,content:T.message,isTimedOut:!1})}),w.once("response",()=>{clearTimeout(b),C=D(u.responseTimeout,"Socket timeout")}),u.data!==void 0&&w.write(u.data),w.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}F6.createNodeHttpRequester=ryt});var hEe=_((QYt,pEe)=>{pEe.exports=fEe()});var yEe=_((FYt,mEe)=>{"use strict";var gEe=fye(),nyt=gye(),gC=Uye(),T6=cB(),R6=jye(),Ht=sEe(),iyt=lEe(),syt=hEe(),oyt=fB();function dEe(t,e,r){let o={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:syt.createNodeHttpRequester(),logger:iyt.createNullLogger(),responsesCache:gEe.createNullCache(),requestsCache:gEe.createNullCache(),hostsCache:nyt.createInMemoryCache(),userAgent:oyt.createUserAgent(T6.version).add({segment:"Node.js",version:process.versions.node})},a={...o,...r},n=()=>u=>R6.createPersonalizationClient({...o,...u,methods:{getPersonalizationStrategy:R6.getPersonalizationStrategy,setPersonalizationStrategy:R6.setPersonalizationStrategy}});return Ht.createSearchClient({...a,methods:{search:Ht.multipleQueries,searchForFacetValues:Ht.multipleSearchForFacetValues,multipleBatch:Ht.multipleBatch,multipleGetObjects:Ht.multipleGetObjects,multipleQueries:Ht.multipleQueries,copyIndex:Ht.copyIndex,copySettings:Ht.copySettings,copyRules:Ht.copyRules,copySynonyms:Ht.copySynonyms,moveIndex:Ht.moveIndex,listIndices:Ht.listIndices,getLogs:Ht.getLogs,listClusters:Ht.listClusters,multipleSearchForFacetValues:Ht.multipleSearchForFacetValues,getApiKey:Ht.getApiKey,addApiKey:Ht.addApiKey,listApiKeys:Ht.listApiKeys,updateApiKey:Ht.updateApiKey,deleteApiKey:Ht.deleteApiKey,restoreApiKey:Ht.restoreApiKey,assignUserID:Ht.assignUserID,assignUserIDs:Ht.assignUserIDs,getUserID:Ht.getUserID,searchUserIDs:Ht.searchUserIDs,listUserIDs:Ht.listUserIDs,getTopUserIDs:Ht.getTopUserIDs,removeUserID:Ht.removeUserID,hasPendingMappings:Ht.hasPendingMappings,generateSecuredApiKey:Ht.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Ht.getSecuredApiKeyRemainingValidity,destroy:T6.destroy,clearDictionaryEntries:Ht.clearDictionaryEntries,deleteDictionaryEntries:Ht.deleteDictionaryEntries,getDictionarySettings:Ht.getDictionarySettings,getAppTask:Ht.getAppTask,replaceDictionaryEntries:Ht.replaceDictionaryEntries,saveDictionaryEntries:Ht.saveDictionaryEntries,searchDictionaryEntries:Ht.searchDictionaryEntries,setDictionarySettings:Ht.setDictionarySettings,waitAppTask:Ht.waitAppTask,customRequest:Ht.customRequest,initIndex:u=>A=>Ht.initIndex(u)(A,{methods:{batch:Ht.batch,delete:Ht.deleteIndex,findAnswers:Ht.findAnswers,getObject:Ht.getObject,getObjects:Ht.getObjects,saveObject:Ht.saveObject,saveObjects:Ht.saveObjects,search:Ht.search,searchForFacetValues:Ht.searchForFacetValues,waitTask:Ht.waitTask,setSettings:Ht.setSettings,getSettings:Ht.getSettings,partialUpdateObject:Ht.partialUpdateObject,partialUpdateObjects:Ht.partialUpdateObjects,deleteObject:Ht.deleteObject,deleteObjects:Ht.deleteObjects,deleteBy:Ht.deleteBy,clearObjects:Ht.clearObjects,browseObjects:Ht.browseObjects,getObjectPosition:Ht.getObjectPosition,findObject:Ht.findObject,exists:Ht.exists,saveSynonym:Ht.saveSynonym,saveSynonyms:Ht.saveSynonyms,getSynonym:Ht.getSynonym,searchSynonyms:Ht.searchSynonyms,browseSynonyms:Ht.browseSynonyms,deleteSynonym:Ht.deleteSynonym,clearSynonyms:Ht.clearSynonyms,replaceAllObjects:Ht.replaceAllObjects,replaceAllSynonyms:Ht.replaceAllSynonyms,searchRules:Ht.searchRules,getRule:Ht.getRule,deleteRule:Ht.deleteRule,saveRule:Ht.saveRule,saveRules:Ht.saveRules,replaceAllRules:Ht.replaceAllRules,browseRules:Ht.browseRules,clearRules:Ht.clearRules}}),initAnalytics:()=>u=>gC.createAnalyticsClient({...o,...u,methods:{addABTest:gC.addABTest,getABTest:gC.getABTest,getABTests:gC.getABTests,stopABTest:gC.stopABTest,deleteABTest:gC.deleteABTest}}),initPersonalization:n,initRecommendation:()=>u=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(u))}})}dEe.version=T6.version;mEe.exports=dEe});var N6=_((RYt,L6)=>{var EEe=yEe();L6.exports=EEe;L6.exports.default=EEe});var U6=_((LYt,wEe)=>{"use strict";var IEe=Object.getOwnPropertySymbols,lyt=Object.prototype.hasOwnProperty,cyt=Object.prototype.propertyIsEnumerable;function uyt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function Ayt(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var o=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(o.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(n){a[n]=n}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}wEe.exports=Ayt()?Object.assign:function(t,e){for(var r,o=uyt(t),a,n=1;n{"use strict";var H6=U6(),dC=60103,DEe=60106;Cn.Fragment=60107;Cn.StrictMode=60108;Cn.Profiler=60114;var SEe=60109,PEe=60110,xEe=60112;Cn.Suspense=60113;var bEe=60115,kEe=60116;typeof Symbol=="function"&&Symbol.for&&(sc=Symbol.for,dC=sc("react.element"),DEe=sc("react.portal"),Cn.Fragment=sc("react.fragment"),Cn.StrictMode=sc("react.strict_mode"),Cn.Profiler=sc("react.profiler"),SEe=sc("react.provider"),PEe=sc("react.context"),xEe=sc("react.forward_ref"),Cn.Suspense=sc("react.suspense"),bEe=sc("react.memo"),kEe=sc("react.lazy"));var sc,BEe=typeof Symbol=="function"&&Symbol.iterator;function fyt(t){return t===null||typeof t!="object"?null:(t=BEe&&t[BEe]||t["@@iterator"],typeof t=="function"?t:null)}function mB(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;r{"use strict";UEe.exports=MEe()});var V6=_((MYt,Y6)=>{"use strict";var gn=Y6.exports;Y6.exports.default=gn;var Gn="\x1B[",yB="\x1B]",yC="\x07",cQ=";",_Ee=process.env.TERM_PROGRAM==="Apple_Terminal";gn.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Gn+(t+1)+"G":Gn+(e+1)+";"+(t+1)+"H"};gn.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Gn+-t+"D":t>0&&(r+=Gn+t+"C"),e<0?r+=Gn+-e+"A":e>0&&(r+=Gn+e+"B"),r};gn.cursorUp=(t=1)=>Gn+t+"A";gn.cursorDown=(t=1)=>Gn+t+"B";gn.cursorForward=(t=1)=>Gn+t+"C";gn.cursorBackward=(t=1)=>Gn+t+"D";gn.cursorLeft=Gn+"G";gn.cursorSavePosition=_Ee?"\x1B7":Gn+"s";gn.cursorRestorePosition=_Ee?"\x1B8":Gn+"u";gn.cursorGetPosition=Gn+"6n";gn.cursorNextLine=Gn+"E";gn.cursorPrevLine=Gn+"F";gn.cursorHide=Gn+"?25l";gn.cursorShow=Gn+"?25h";gn.eraseLines=t=>{let e="";for(let r=0;r[yB,"8",cQ,cQ,e,yC,t,yB,"8",cQ,cQ,yC].join("");gn.image=(t,e={})=>{let r=`${yB}1337;File=inline=1`;return e.width&&(r+=`;width=${e.width}`),e.height&&(r+=`;height=${e.height}`),e.preserveAspectRatio===!1&&(r+=";preserveAspectRatio=0"),r+":"+t.toString("base64")+yC};gn.iTerm={setCwd:(t=process.cwd())=>`${yB}50;CurrentDir=${t}${yC}`,annotation:(t,e={})=>{let r=`${yB}1337;`,o=typeof e.x<"u",a=typeof e.y<"u";if((o||a)&&!(o&&a&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(o?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+yC}}});var qEe=_((UYt,K6)=>{"use strict";var HEe=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};K6.exports=HEe;K6.exports.default=HEe});var GEe=_((_Yt,AQ)=>{"use strict";var myt=qEe(),uQ=new WeakMap,jEe=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,o=0,a=t.displayName||t.name||"",n=function(...u){if(uQ.set(n,++o),o===1)r=t.apply(this,u),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return myt(n,t),uQ.set(n,o),n};AQ.exports=jEe;AQ.exports.default=jEe;AQ.exports.callCount=t=>{if(!uQ.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return uQ.get(t)}});var WEe=_((HYt,fQ)=>{fQ.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&fQ.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&fQ.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var X6=_((qYt,IC)=>{var wi=global.process,td=function(t){return t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function"};td(wi)?(YEe=ve("assert"),EC=WEe(),VEe=/^win/i.test(wi.platform),EB=ve("events"),typeof EB!="function"&&(EB=EB.EventEmitter),wi.__signal_exit_emitter__?ks=wi.__signal_exit_emitter__:(ks=wi.__signal_exit_emitter__=new EB,ks.count=0,ks.emitted={}),ks.infinite||(ks.setMaxListeners(1/0),ks.infinite=!0),IC.exports=function(t,e){if(!td(global.process))return function(){};YEe.equal(typeof t,"function","a callback must be provided for exit handler"),CC===!1&&J6();var r="exit";e&&e.alwaysLast&&(r="afterexit");var o=function(){ks.removeListener(r,t),ks.listeners("exit").length===0&&ks.listeners("afterexit").length===0&&pQ()};return ks.on(r,t),o},pQ=function(){!CC||!td(global.process)||(CC=!1,EC.forEach(function(e){try{wi.removeListener(e,hQ[e])}catch{}}),wi.emit=gQ,wi.reallyExit=z6,ks.count-=1)},IC.exports.unload=pQ,rd=function(e,r,o){ks.emitted[e]||(ks.emitted[e]=!0,ks.emit(e,r,o))},hQ={},EC.forEach(function(t){hQ[t]=function(){if(td(global.process)){var r=wi.listeners(t);r.length===ks.count&&(pQ(),rd("exit",null,t),rd("afterexit",null,t),VEe&&t==="SIGHUP"&&(t="SIGINT"),wi.kill(wi.pid,t))}}}),IC.exports.signals=function(){return EC},CC=!1,J6=function(){CC||!td(global.process)||(CC=!0,ks.count+=1,EC=EC.filter(function(e){try{return wi.on(e,hQ[e]),!0}catch{return!1}}),wi.emit=JEe,wi.reallyExit=KEe)},IC.exports.load=J6,z6=wi.reallyExit,KEe=function(e){td(global.process)&&(wi.exitCode=e||0,rd("exit",wi.exitCode,null),rd("afterexit",wi.exitCode,null),z6.call(wi,wi.exitCode))},gQ=wi.emit,JEe=function(e,r){if(e==="exit"&&td(global.process)){r!==void 0&&(wi.exitCode=r);var o=gQ.apply(this,arguments);return rd("exit",wi.exitCode,null),rd("afterexit",wi.exitCode,null),o}else return gQ.apply(this,arguments)}):IC.exports=function(){return function(){}};var YEe,EC,VEe,EB,ks,pQ,rd,hQ,CC,J6,z6,KEe,gQ,JEe});var XEe=_((jYt,zEe)=>{"use strict";var yyt=GEe(),Eyt=X6();zEe.exports=yyt(()=>{Eyt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var Z6=_(wC=>{"use strict";var Cyt=XEe(),dQ=!1;wC.show=(t=process.stderr)=>{t.isTTY&&(dQ=!1,t.write("\x1B[?25h"))};wC.hide=(t=process.stderr)=>{t.isTTY&&(Cyt(),dQ=!0,t.write("\x1B[?25l"))};wC.toggle=(t,e)=>{t!==void 0&&(dQ=t),dQ?wC.show(e):wC.hide(e)}});var tCe=_(CB=>{"use strict";var eCe=CB&&CB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(CB,"__esModule",{value:!0});var ZEe=eCe(V6()),$Ee=eCe(Z6()),Iyt=(t,{showCursor:e=!1}={})=>{let r=0,o="",a=!1,n=u=>{!e&&!a&&($Ee.default.hide(),a=!0);let A=u+` +`;A!==o&&(o=A,t.write(ZEe.default.eraseLines(r)+A),r=A.split(` +`).length)};return n.clear=()=>{t.write(ZEe.default.eraseLines(r)),o="",r=0},n.done=()=>{o="",r=0,e||($Ee.default.show(),a=!1)},n};CB.default={create:Iyt}});var rCe=_((YYt,wyt)=>{wyt.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 sCe=_(Cl=>{"use strict";var iCe=rCe(),gA=process.env;Object.defineProperty(Cl,"_vendors",{value:iCe.map(function(t){return t.constant})});Cl.name=null;Cl.isPR=null;iCe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(o){return nCe(o)});if(Cl[t.constant]=r,r)switch(Cl.name=t.name,typeof t.pr){case"string":Cl.isPR=!!gA[t.pr];break;case"object":"env"in t.pr?Cl.isPR=t.pr.env in gA&&gA[t.pr.env]!==t.pr.ne:"any"in t.pr?Cl.isPR=t.pr.any.some(function(o){return!!gA[o]}):Cl.isPR=nCe(t.pr);break;default:Cl.isPR=null}});Cl.isCI=!!(gA.CI||gA.CONTINUOUS_INTEGRATION||gA.BUILD_NUMBER||gA.RUN_ID||Cl.name);function nCe(t){return typeof t=="string"?!!gA[t]:Object.keys(t).every(function(e){return gA[e]===t[e]})}});var aCe=_((KYt,oCe)=>{"use strict";oCe.exports=sCe().isCI});var cCe=_((JYt,lCe)=>{"use strict";var Byt=t=>{let e=new Set;do for(let r of Reflect.ownKeys(t))e.add([t,r]);while((t=Reflect.getPrototypeOf(t))&&t!==Object.prototype);return e};lCe.exports=(t,{include:e,exclude:r}={})=>{let o=a=>{let n=u=>typeof u=="string"?a===u:u.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of Byt(t.constructor.prototype)){if(n==="constructor"||!o(n))continue;let u=Reflect.getOwnPropertyDescriptor(a,n);u&&typeof u.value=="function"&&(t[n]=t[n].bind(t))}return t}});var gCe=_(Hn=>{"use strict";var vC,BB,CQ,sq;typeof performance=="object"&&typeof performance.now=="function"?(uCe=performance,Hn.unstable_now=function(){return uCe.now()}):($6=Date,ACe=$6.now(),Hn.unstable_now=function(){return $6.now()-ACe});var uCe,$6,ACe;typeof window>"u"||typeof MessageChannel!="function"?(BC=null,eq=null,tq=function(){if(BC!==null)try{var t=Hn.unstable_now();BC(!0,t),BC=null}catch(e){throw setTimeout(tq,0),e}},vC=function(t){BC!==null?setTimeout(vC,0,t):(BC=t,setTimeout(tq,0))},BB=function(t,e){eq=setTimeout(t,e)},CQ=function(){clearTimeout(eq)},Hn.unstable_shouldYield=function(){return!1},sq=Hn.unstable_forceFrameRate=function(){}):(fCe=window.setTimeout,pCe=window.clearTimeout,typeof console<"u"&&(hCe=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof hCe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),IB=!1,wB=null,mQ=-1,rq=5,nq=0,Hn.unstable_shouldYield=function(){return Hn.unstable_now()>=nq},sq=function(){},Hn.unstable_forceFrameRate=function(t){0>t||125>>1,a=t[o];if(a!==void 0&&0EQ(u,r))p!==void 0&&0>EQ(p,u)?(t[o]=p,t[A]=r,o=A):(t[o]=u,t[n]=r,o=n);else if(p!==void 0&&0>EQ(p,r))t[o]=p,t[A]=r,o=A;else break e}}return e}return null}function EQ(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var dA=[],Uh=[],vyt=1,oc=null,bo=3,wQ=!1,nd=!1,vB=!1;function aq(t){for(var e=ou(Uh);e!==null;){if(e.callback===null)IQ(Uh);else if(e.startTime<=t)IQ(Uh),e.sortIndex=e.expirationTime,oq(dA,e);else break;e=ou(Uh)}}function lq(t){if(vB=!1,aq(t),!nd)if(ou(dA)!==null)nd=!0,vC(cq);else{var e=ou(Uh);e!==null&&BB(lq,e.startTime-t)}}function cq(t,e){nd=!1,vB&&(vB=!1,CQ()),wQ=!0;var r=bo;try{for(aq(e),oc=ou(dA);oc!==null&&(!(oc.expirationTime>e)||t&&!Hn.unstable_shouldYield());){var o=oc.callback;if(typeof o=="function"){oc.callback=null,bo=oc.priorityLevel;var a=o(oc.expirationTime<=e);e=Hn.unstable_now(),typeof a=="function"?oc.callback=a:oc===ou(dA)&&IQ(dA),aq(e)}else IQ(dA);oc=ou(dA)}if(oc!==null)var n=!0;else{var u=ou(Uh);u!==null&&BB(lq,u.startTime-e),n=!1}return n}finally{oc=null,bo=r,wQ=!1}}var Dyt=sq;Hn.unstable_IdlePriority=5;Hn.unstable_ImmediatePriority=1;Hn.unstable_LowPriority=4;Hn.unstable_NormalPriority=3;Hn.unstable_Profiling=null;Hn.unstable_UserBlockingPriority=2;Hn.unstable_cancelCallback=function(t){t.callback=null};Hn.unstable_continueExecution=function(){nd||wQ||(nd=!0,vC(cq))};Hn.unstable_getCurrentPriorityLevel=function(){return bo};Hn.unstable_getFirstCallbackNode=function(){return ou(dA)};Hn.unstable_next=function(t){switch(bo){case 1:case 2:case 3:var e=3;break;default:e=bo}var r=bo;bo=e;try{return t()}finally{bo=r}};Hn.unstable_pauseExecution=function(){};Hn.unstable_requestPaint=Dyt;Hn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=bo;bo=t;try{return e()}finally{bo=r}};Hn.unstable_scheduleCallback=function(t,e,r){var o=Hn.unstable_now();switch(typeof r=="object"&&r!==null?(r=r.delay,r=typeof r=="number"&&0o?(t.sortIndex=r,oq(Uh,t),ou(dA)===null&&t===ou(Uh)&&(vB?CQ():vB=!0,BB(lq,r-o))):(t.sortIndex=a,oq(dA,t),nd||wQ||(nd=!0,vC(cq))),t};Hn.unstable_wrapCallback=function(t){var e=bo;return function(){var r=bo;bo=e;try{return t.apply(this,arguments)}finally{bo=r}}}});var uq=_((XYt,dCe)=>{"use strict";dCe.exports=gCe()});var mCe=_((ZYt,DB)=>{DB.exports=function(e){var r={},o=U6(),a=ln(),n=uq();function u(v){for(var S="https://reactjs.org/docs/error-decoder.html?invariant="+v,Q=1;QUe||Y[Be]!==ne[Ue])return` +`+Y[Be].replace(" at new "," at ");while(1<=Be&&0<=Ue);break}}}finally{we=!1,Error.prepareStackTrace=Q}return(v=v?v.displayName||v.name:"")?Il(v):""}var wl=[],Bi=-1;function Ls(v){return{current:v}}function Ft(v){0>Bi||(v.current=wl[Bi],wl[Bi]=null,Bi--)}function Bn(v,S){Bi++,wl[Bi]=v.current,v.current=S}var Lo={},ki=Ls(Lo),vi=Ls(!1),sa=Lo;function un(v,S){var Q=v.type.contextTypes;if(!Q)return Lo;var H=v.stateNode;if(H&&H.__reactInternalMemoizedUnmaskedChildContext===S)return H.__reactInternalMemoizedMaskedChildContext;var Y={},ne;for(ne in Q)Y[ne]=S[ne];return H&&(v=v.stateNode,v.__reactInternalMemoizedUnmaskedChildContext=S,v.__reactInternalMemoizedMaskedChildContext=Y),Y}function qn(v){return v=v.childContextTypes,v!=null}function Ec(){Ft(vi),Ft(ki)}function lp(v,S,Q){if(ki.current!==Lo)throw Error(u(168));Bn(ki,S),Bn(vi,Q)}function oa(v,S,Q){var H=v.stateNode;if(v=S.childContextTypes,typeof H.getChildContext!="function")return Q;H=H.getChildContext();for(var Y in H)if(!(Y in v))throw Error(u(108,g(S)||"Unknown",Y));return o({},Q,H)}function aa(v){return v=(v=v.stateNode)&&v.__reactInternalMemoizedMergedChildContext||Lo,sa=ki.current,Bn(ki,v),Bn(vi,vi.current),!0}function la(v,S,Q){var H=v.stateNode;if(!H)throw Error(u(169));Q?(v=oa(v,S,sa),H.__reactInternalMemoizedMergedChildContext=v,Ft(vi),Ft(ki),Bn(ki,v)):Ft(vi),Bn(vi,Q)}var Ze=null,ca=null,mu=n.unstable_now;mu();var Bl=0,dn=8;function No(v){if(1&v)return dn=15,1;if(2&v)return dn=14,2;if(4&v)return dn=13,4;var S=24&v;return S!==0?(dn=12,S):v&32?(dn=11,32):(S=192&v,S!==0?(dn=10,S):v&256?(dn=9,256):(S=3584&v,S!==0?(dn=8,S):v&4096?(dn=7,4096):(S=4186112&v,S!==0?(dn=6,S):(S=62914560&v,S!==0?(dn=5,S):v&67108864?(dn=4,67108864):v&134217728?(dn=3,134217728):(S=805306368&v,S!==0?(dn=2,S):1073741824&v?(dn=1,1073741824):(dn=8,v))))))}function RA(v){switch(v){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}function TA(v){switch(v){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(u(358,v))}}function Oo(v,S){var Q=v.pendingLanes;if(Q===0)return dn=0;var H=0,Y=0,ne=v.expiredLanes,Be=v.suspendedLanes,Ue=v.pingedLanes;if(ne!==0)H=ne,Y=dn=15;else if(ne=Q&134217727,ne!==0){var ft=ne&~Be;ft!==0?(H=No(ft),Y=dn):(Ue&=ne,Ue!==0&&(H=No(Ue),Y=dn))}else ne=Q&~Be,ne!==0?(H=No(ne),Y=dn):Ue!==0&&(H=No(Ue),Y=dn);if(H===0)return 0;if(H=31-qi(H),H=Q&((0>H?0:1<Q;Q++)S.push(v);return S}function ua(v,S,Q){v.pendingLanes|=S;var H=S-1;v.suspendedLanes&=H,v.pingedLanes&=H,v=v.eventTimes,S=31-qi(S),v[S]=Q}var qi=Math.clz32?Math.clz32:Dl,vl=Math.log,Cc=Math.LN2;function Dl(v){return v===0?32:31-(vl(v)/Cc|0)|0}var Aa=n.unstable_runWithPriority,Di=n.unstable_scheduleCallback,rs=n.unstable_cancelCallback,ja=n.unstable_shouldYield,yu=n.unstable_requestPaint,Sl=n.unstable_now,pi=n.unstable_getCurrentPriorityLevel,Dn=n.unstable_ImmediatePriority,Pl=n.unstable_UserBlockingPriority,Je=n.unstable_NormalPriority,st=n.unstable_LowPriority,vt=n.unstable_IdlePriority,ar={},ee=yu!==void 0?yu:function(){},ye=null,Ne=null,gt=!1,mt=Sl(),Dt=1e4>mt?Sl:function(){return Sl()-mt};function er(){switch(pi()){case Dn:return 99;case Pl:return 98;case Je:return 97;case st:return 96;case vt:return 95;default:throw Error(u(332))}}function sn(v){switch(v){case 99:return Dn;case 98:return Pl;case 97:return Je;case 96:return st;case 95:return vt;default:throw Error(u(332))}}function ei(v,S){return v=sn(v),Aa(v,S)}function Qi(v,S,Q){return v=sn(v),Di(v,S,Q)}function Sn(){if(Ne!==null){var v=Ne;Ne=null,rs(v)}fa()}function fa(){if(!gt&&ye!==null){gt=!0;var v=0;try{var S=ye;ei(99,function(){for(;vPn?(Tn=xr,xr=null):Tn=xr.sibling;var Yr=Xt($e,xr,pt[Pn],zt);if(Yr===null){xr===null&&(xr=Tn);break}v&&xr&&Yr.alternate===null&&S($e,xr),je=ne(Yr,je,Pn),Wn===null?Br=Yr:Wn.sibling=Yr,Wn=Yr,xr=Tn}if(Pn===pt.length)return Q($e,xr),Br;if(xr===null){for(;PnPn?(Tn=xr,xr=null):Tn=xr.sibling;var ti=Xt($e,xr,Yr.value,zt);if(ti===null){xr===null&&(xr=Tn);break}v&&xr&&ti.alternate===null&&S($e,xr),je=ne(ti,je,Pn),Wn===null?Br=ti:Wn.sibling=ti,Wn=ti,xr=Tn}if(Yr.done)return Q($e,xr),Br;if(xr===null){for(;!Yr.done;Pn++,Yr=pt.next())Yr=Tr($e,Yr.value,zt),Yr!==null&&(je=ne(Yr,je,Pn),Wn===null?Br=Yr:Wn.sibling=Yr,Wn=Yr);return Br}for(xr=H($e,xr);!Yr.done;Pn++,Yr=pt.next())Yr=jn(xr,$e,Pn,Yr.value,zt),Yr!==null&&(v&&Yr.alternate!==null&&xr.delete(Yr.key===null?Pn:Yr.key),je=ne(Yr,je,Pn),Wn===null?Br=Yr:Wn.sibling=Yr,Wn=Yr);return v&&xr.forEach(function(Rc){return S($e,Rc)}),Br}return function($e,je,pt,zt){var Br=typeof pt=="object"&&pt!==null&&pt.type===E&&pt.key===null;Br&&(pt=pt.props.children);var Wn=typeof pt=="object"&&pt!==null;if(Wn)switch(pt.$$typeof){case p:e:{for(Wn=pt.key,Br=je;Br!==null;){if(Br.key===Wn){switch(Br.tag){case 7:if(pt.type===E){Q($e,Br.sibling),je=Y(Br,pt.props.children),je.return=$e,$e=je;break e}break;default:if(Br.elementType===pt.type){Q($e,Br.sibling),je=Y(Br,pt.props),je.ref=dt($e,Br,pt),je.return=$e,$e=je;break e}}Q($e,Br);break}else S($e,Br);Br=Br.sibling}pt.type===E?(je=Ru(pt.props.children,$e.mode,zt,pt.key),je.return=$e,$e=je):(zt=k0(pt.type,pt.key,pt.props,null,$e.mode,zt),zt.ref=dt($e,je,pt),zt.return=$e,$e=zt)}return Be($e);case h:e:{for(Br=pt.key;je!==null;){if(je.key===Br)if(je.tag===4&&je.stateNode.containerInfo===pt.containerInfo&&je.stateNode.implementation===pt.implementation){Q($e,je.sibling),je=Y(je,pt.children||[]),je.return=$e,$e=je;break e}else{Q($e,je);break}else S($e,je);je=je.sibling}je=ao(pt,$e.mode,zt),je.return=$e,$e=je}return Be($e)}if(typeof pt=="string"||typeof pt=="number")return pt=""+pt,je!==null&&je.tag===6?(Q($e,je.sibling),je=Y(je,pt),je.return=$e,$e=je):(Q($e,je),je=ZI(pt,$e.mode,zt),je.return=$e,$e=je),Be($e);if(Cu(pt))return li($e,je,pt,zt);if(Ee(pt))return Ea($e,je,pt,zt);if(Wn&&wc($e,pt),typeof pt>"u"&&!Br)switch($e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(u(152,g($e.type)||"Component"))}return Q($e,je)}}var c0=xd(!0),DI=xd(!1),hp={},cr=Ls(hp),Ni=Ls(hp),Iu=Ls(hp);function pa(v){if(v===hp)throw Error(u(174));return v}function u0(v,S){Bn(Iu,S),Bn(Ni,v),Bn(cr,hp),v=ht(S),Ft(cr),Bn(cr,v)}function Bc(){Ft(cr),Ft(Ni),Ft(Iu)}function wu(v){var S=pa(Iu.current),Q=pa(cr.current);S=q(Q,v.type,S),Q!==S&&(Bn(Ni,v),Bn(cr,S))}function wt(v){Ni.current===v&&(Ft(cr),Ft(Ni))}var oi=Ls(0);function UA(v){for(var S=v;S!==null;){if(S.tag===13){var Q=S.memoizedState;if(Q!==null&&(Q=Q.dehydrated,Q===null||pr(Q)||Me(Q)))return S}else if(S.tag===19&&S.memoizedProps.revealOrder!==void 0){if(S.flags&64)return S}else if(S.child!==null){S.child.return=S,S=S.child;continue}if(S===v)break;for(;S.sibling===null;){if(S.return===null||S.return===v)return null;S=S.return}S.sibling.return=S.return,S=S.sibling}return null}var ha=null,Uo=null,ga=!1;function A0(v,S){var Q=ya(5,null,null,0);Q.elementType="DELETED",Q.type="DELETED",Q.stateNode=S,Q.return=v,Q.flags=8,v.lastEffect!==null?(v.lastEffect.nextEffect=Q,v.lastEffect=Q):v.firstEffect=v.lastEffect=Q}function gp(v,S){switch(v.tag){case 5:return S=To(S,v.type,v.pendingProps),S!==null?(v.stateNode=S,!0):!1;case 6:return S=kA(S,v.pendingProps),S!==null?(v.stateNode=S,!0):!1;case 13:return!1;default:return!1}}function f0(v){if(ga){var S=Uo;if(S){var Q=S;if(!gp(v,S)){if(S=ia(Q),!S||!gp(v,S)){v.flags=v.flags&-1025|2,ga=!1,ha=v;return}A0(ha,Q)}ha=v,Uo=dc(S)}else v.flags=v.flags&-1025|2,ga=!1,ha=v}}function bd(v){for(v=v.return;v!==null&&v.tag!==5&&v.tag!==3&&v.tag!==13;)v=v.return;ha=v}function _A(v){if(!X||v!==ha)return!1;if(!ga)return bd(v),ga=!0,!1;var S=v.type;if(v.tag!==5||S!=="head"&&S!=="body"&&!tt(S,v.memoizedProps))for(S=Uo;S;)A0(v,S),S=ia(S);if(bd(v),v.tag===13){if(!X)throw Error(u(316));if(v=v.memoizedState,v=v!==null?v.dehydrated:null,!v)throw Error(u(317));Uo=QA(v)}else Uo=ha?ia(v.stateNode):null;return!0}function p0(){X&&(Uo=ha=null,ga=!1)}var vc=[];function Dc(){for(var v=0;vne))throw Error(u(301));ne+=1,Ci=ji=null,S.updateQueue=null,Bu.current=re,v=Q(H,Y)}while(vu)}if(Bu.current=bt,S=ji!==null&&ji.next!==null,Sc=0,Ci=ji=On=null,HA=!1,S)throw Error(u(300));return v}function Gi(){var v={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Ci===null?On.memoizedState=Ci=v:Ci=Ci.next=v,Ci}function Va(){if(ji===null){var v=On.alternate;v=v!==null?v.memoizedState:null}else v=ji.next;var S=Ci===null?On.memoizedState:Ci.next;if(S!==null)Ci=S,ji=v;else{if(v===null)throw Error(u(310));ji=v,v={memoizedState:ji.memoizedState,baseState:ji.baseState,baseQueue:ji.baseQueue,queue:ji.queue,next:null},Ci===null?On.memoizedState=Ci=v:Ci=Ci.next=v}return Ci}function io(v,S){return typeof S=="function"?S(v):S}function Du(v){var S=Va(),Q=S.queue;if(Q===null)throw Error(u(311));Q.lastRenderedReducer=v;var H=ji,Y=H.baseQueue,ne=Q.pending;if(ne!==null){if(Y!==null){var Be=Y.next;Y.next=ne.next,ne.next=Be}H.baseQueue=Y=ne,Q.pending=null}if(Y!==null){Y=Y.next,H=H.baseState;var Ue=Be=ne=null,ft=Y;do{var jt=ft.lane;if((Sc&jt)===jt)Ue!==null&&(Ue=Ue.next={lane:0,action:ft.action,eagerReducer:ft.eagerReducer,eagerState:ft.eagerState,next:null}),H=ft.eagerReducer===v?ft.eagerState:v(H,ft.action);else{var wr={lane:jt,action:ft.action,eagerReducer:ft.eagerReducer,eagerState:ft.eagerState,next:null};Ue===null?(Be=Ue=wr,ne=H):Ue=Ue.next=wr,On.lanes|=jt,B0|=jt}ft=ft.next}while(ft!==null&&ft!==Y);Ue===null?ne=H:Ue.next=Be,eo(H,S.memoizedState)||(Ye=!0),S.memoizedState=H,S.baseState=ne,S.baseQueue=Ue,Q.lastRenderedState=H}return[S.memoizedState,Q.dispatch]}function Su(v){var S=Va(),Q=S.queue;if(Q===null)throw Error(u(311));Q.lastRenderedReducer=v;var H=Q.dispatch,Y=Q.pending,ne=S.memoizedState;if(Y!==null){Q.pending=null;var Be=Y=Y.next;do ne=v(ne,Be.action),Be=Be.next;while(Be!==Y);eo(ne,S.memoizedState)||(Ye=!0),S.memoizedState=ne,S.baseQueue===null&&(S.baseState=ne),Q.lastRenderedState=ne}return[ne,H]}function Ka(v,S,Q){var H=S._getVersion;H=H(S._source);var Y=y?S._workInProgressVersionPrimary:S._workInProgressVersionSecondary;if(Y!==null?v=Y===H:(v=v.mutableReadLanes,(v=(Sc&v)===v)&&(y?S._workInProgressVersionPrimary=H:S._workInProgressVersionSecondary=H,vc.push(S))),v)return Q(S._source);throw vc.push(S),Error(u(350))}function fn(v,S,Q,H){var Y=Os;if(Y===null)throw Error(u(349));var ne=S._getVersion,Be=ne(S._source),Ue=Bu.current,ft=Ue.useState(function(){return Ka(Y,S,Q)}),jt=ft[1],wr=ft[0];ft=Ci;var Tr=v.memoizedState,Xt=Tr.refs,jn=Xt.getSnapshot,li=Tr.source;Tr=Tr.subscribe;var Ea=On;return v.memoizedState={refs:Xt,source:S,subscribe:H},Ue.useEffect(function(){Xt.getSnapshot=Q,Xt.setSnapshot=jt;var $e=ne(S._source);if(!eo(Be,$e)){$e=Q(S._source),eo(wr,$e)||(jt($e),$e=ss(Ea),Y.mutableReadLanes|=$e&Y.pendingLanes),$e=Y.mutableReadLanes,Y.entangledLanes|=$e;for(var je=Y.entanglements,pt=$e;0Q?98:Q,function(){v(!0)}),ei(97qI&&(S.flags|=64,Y=!0,VA(H,!1),S.lanes=33554432)}else{if(!Y)if(v=UA(ne),v!==null){if(S.flags|=64,Y=!0,v=v.updateQueue,v!==null&&(S.updateQueue=v,S.flags|=4),VA(H,!0),H.tail===null&&H.tailMode==="hidden"&&!ne.alternate&&!ga)return S=S.lastEffect=H.lastEffect,S!==null&&(S.nextEffect=null),null}else 2*Dt()-H.renderingStartTime>qI&&Q!==1073741824&&(S.flags|=64,Y=!0,VA(H,!1),S.lanes=33554432);H.isBackwards?(ne.sibling=S.child,S.child=ne):(v=H.last,v!==null?v.sibling=ne:S.child=ne,H.last=ne)}return H.tail!==null?(v=H.tail,H.rendering=v,H.tail=v.sibling,H.lastEffect=S.lastEffect,H.renderingStartTime=Dt(),v.sibling=null,S=oi.current,Bn(oi,Y?S&1|2:S&1),v):null;case 23:case 24:return KI(),v!==null&&v.memoizedState!==null!=(S.memoizedState!==null)&&H.mode!=="unstable-defer-without-hiding"&&(S.flags|=4),null}throw Error(u(156,S.tag))}function qF(v){switch(v.tag){case 1:qn(v.type)&&Ec();var S=v.flags;return S&4096?(v.flags=S&-4097|64,v):null;case 3:if(Bc(),Ft(vi),Ft(ki),Dc(),S=v.flags,S&64)throw Error(u(285));return v.flags=S&-4097|64,v;case 5:return wt(v),null;case 13:return Ft(oi),S=v.flags,S&4096?(v.flags=S&-4097|64,v):null;case 19:return Ft(oi),null;case 4:return Bc(),null;case 10:return a0(v),null;case 23:case 24:return KI(),null;default:return null}}function m0(v,S){try{var Q="",H=S;do Q+=vI(H),H=H.return;while(H);var Y=Q}catch(ne){Y=` +Error generating stack: `+ne.message+` +`+ne.stack}return{value:v,source:S,stack:Y}}function y0(v,S){try{console.error(S.value)}catch(Q){setTimeout(function(){throw Q})}}var jF=typeof WeakMap=="function"?WeakMap:Map;function bI(v,S,Q){Q=Wa(-1,Q),Q.tag=3,Q.payload={element:null};var H=S.value;return Q.callback=function(){Wd||(Wd=!0,jI=H),y0(v,S)},Q}function E0(v,S,Q){Q=Wa(-1,Q),Q.tag=3;var H=v.type.getDerivedStateFromError;if(typeof H=="function"){var Y=S.value;Q.payload=function(){return y0(v,S),H(Y)}}var ne=v.stateNode;return ne!==null&&typeof ne.componentDidCatch=="function"&&(Q.callback=function(){typeof H!="function"&&(bl===null?bl=new Set([this]):bl.add(this),y0(v,S));var Be=S.stack;this.componentDidCatch(S.value,{componentStack:Be!==null?Be:""})}),Q}var GF=typeof WeakSet=="function"?WeakSet:Set;function kI(v){var S=v.ref;if(S!==null)if(typeof S=="function")try{S(null)}catch(Q){Fu(v,Q)}else S.current=null}function Td(v,S){switch(S.tag){case 0:case 11:case 15:case 22:return;case 1:if(S.flags&256&&v!==null){var Q=v.memoizedProps,H=v.memoizedState;v=S.stateNode,S=v.getSnapshotBeforeUpdate(S.elementType===S.type?Q:to(S.type,Q),H),v.__reactInternalSnapshotBeforeUpdate=S}return;case 3:R&&S.flags&256&&hs(S.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(u(163))}function wp(v,S){if(S=S.updateQueue,S=S!==null?S.lastEffect:null,S!==null){var Q=S=S.next;do{if((Q.tag&v)===v){var H=Q.destroy;Q.destroy=void 0,H!==void 0&&H()}Q=Q.next}while(Q!==S)}}function uD(v,S,Q){switch(Q.tag){case 0:case 11:case 15:case 22:if(S=Q.updateQueue,S=S!==null?S.lastEffect:null,S!==null){v=S=S.next;do{if((v.tag&3)===3){var H=v.create;v.destroy=H()}v=v.next}while(v!==S)}if(S=Q.updateQueue,S=S!==null?S.lastEffect:null,S!==null){v=S=S.next;do{var Y=v;H=Y.next,Y=Y.tag,Y&4&&Y&1&&(vD(Q,v),$F(Q,v)),v=H}while(v!==S)}return;case 1:v=Q.stateNode,Q.flags&4&&(S===null?v.componentDidMount():(H=Q.elementType===Q.type?S.memoizedProps:to(Q.type,S.memoizedProps),v.componentDidUpdate(H,S.memoizedState,v.__reactInternalSnapshotBeforeUpdate))),S=Q.updateQueue,S!==null&&Sd(Q,S,v);return;case 3:if(S=Q.updateQueue,S!==null){if(v=null,Q.child!==null)switch(Q.child.tag){case 5:v=Re(Q.child.stateNode);break;case 1:v=Q.child.stateNode}Sd(Q,S,v)}return;case 5:v=Q.stateNode,S===null&&Q.flags&4&&Qs(v,Q.type,Q.memoizedProps,Q);return;case 6:return;case 4:return;case 12:return;case 13:X&&Q.memoizedState===null&&(Q=Q.alternate,Q!==null&&(Q=Q.memoizedState,Q!==null&&(Q=Q.dehydrated,Q!==null&&mc(Q))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(u(163))}function AD(v,S){if(R)for(var Q=v;;){if(Q.tag===5){var H=Q.stateNode;S?op(H):Rs(Q.stateNode,Q.memoizedProps)}else if(Q.tag===6)H=Q.stateNode,S?ap(H):Nn(H,Q.memoizedProps);else if((Q.tag!==23&&Q.tag!==24||Q.memoizedState===null||Q===v)&&Q.child!==null){Q.child.return=Q,Q=Q.child;continue}if(Q===v)break;for(;Q.sibling===null;){if(Q.return===null||Q.return===v)return;Q=Q.return}Q.sibling.return=Q.return,Q=Q.sibling}}function Ld(v,S){if(ca&&typeof ca.onCommitFiberUnmount=="function")try{ca.onCommitFiberUnmount(Ze,S)}catch{}switch(S.tag){case 0:case 11:case 14:case 15:case 22:if(v=S.updateQueue,v!==null&&(v=v.lastEffect,v!==null)){var Q=v=v.next;do{var H=Q,Y=H.destroy;if(H=H.tag,Y!==void 0)if(H&4)vD(S,Q);else{H=S;try{Y()}catch(ne){Fu(H,ne)}}Q=Q.next}while(Q!==v)}break;case 1:if(kI(S),v=S.stateNode,typeof v.componentWillUnmount=="function")try{v.props=S.memoizedProps,v.state=S.memoizedState,v.componentWillUnmount()}catch(ne){Fu(S,ne)}break;case 5:kI(S);break;case 4:R?gD(v,S):z&&z&&(S=S.stateNode.containerInfo,v=pc(S),xA(S,v))}}function fD(v,S){for(var Q=S;;)if(Ld(v,Q),Q.child===null||R&&Q.tag===4){if(Q===S)break;for(;Q.sibling===null;){if(Q.return===null||Q.return===S)return;Q=Q.return}Q.sibling.return=Q.return,Q=Q.sibling}else Q.child.return=Q,Q=Q.child}function Nd(v){v.alternate=null,v.child=null,v.dependencies=null,v.firstEffect=null,v.lastEffect=null,v.memoizedProps=null,v.memoizedState=null,v.pendingProps=null,v.return=null,v.updateQueue=null}function pD(v){return v.tag===5||v.tag===3||v.tag===4}function hD(v){if(R){e:{for(var S=v.return;S!==null;){if(pD(S))break e;S=S.return}throw Error(u(160))}var Q=S;switch(S=Q.stateNode,Q.tag){case 5:var H=!1;break;case 3:S=S.containerInfo,H=!0;break;case 4:S=S.containerInfo,H=!0;break;default:throw Error(u(161))}Q.flags&16&&(gu(S),Q.flags&=-17);e:t:for(Q=v;;){for(;Q.sibling===null;){if(Q.return===null||pD(Q.return)){Q=null;break e}Q=Q.return}for(Q.sibling.return=Q.return,Q=Q.sibling;Q.tag!==5&&Q.tag!==6&&Q.tag!==18;){if(Q.flags&2||Q.child===null||Q.tag===4)continue t;Q.child.return=Q,Q=Q.child}if(!(Q.flags&2)){Q=Q.stateNode;break e}}H?QI(v,Q,S):FI(v,Q,S)}}function QI(v,S,Q){var H=v.tag,Y=H===5||H===6;if(Y)v=Y?v.stateNode:v.stateNode.instance,S?Fs(Q,v,S):Xs(Q,v);else if(H!==4&&(v=v.child,v!==null))for(QI(v,S,Q),v=v.sibling;v!==null;)QI(v,S,Q),v=v.sibling}function FI(v,S,Q){var H=v.tag,Y=H===5||H===6;if(Y)v=Y?v.stateNode:v.stateNode.instance,S?bi(Q,v,S):$n(Q,v);else if(H!==4&&(v=v.child,v!==null))for(FI(v,S,Q),v=v.sibling;v!==null;)FI(v,S,Q),v=v.sibling}function gD(v,S){for(var Q=S,H=!1,Y,ne;;){if(!H){H=Q.return;e:for(;;){if(H===null)throw Error(u(160));switch(Y=H.stateNode,H.tag){case 5:ne=!1;break e;case 3:Y=Y.containerInfo,ne=!0;break e;case 4:Y=Y.containerInfo,ne=!0;break e}H=H.return}H=!0}if(Q.tag===5||Q.tag===6)fD(v,Q),ne?PA(Y,Q.stateNode):$s(Y,Q.stateNode);else if(Q.tag===4){if(Q.child!==null){Y=Q.stateNode.containerInfo,ne=!0,Q.child.return=Q,Q=Q.child;continue}}else if(Ld(v,Q),Q.child!==null){Q.child.return=Q,Q=Q.child;continue}if(Q===S)break;for(;Q.sibling===null;){if(Q.return===null||Q.return===S)return;Q=Q.return,Q.tag===4&&(H=!1)}Q.sibling.return=Q.return,Q=Q.sibling}}function RI(v,S){if(R){switch(S.tag){case 0:case 11:case 14:case 15:case 22:wp(3,S);return;case 1:return;case 5:var Q=S.stateNode;if(Q!=null){var H=S.memoizedProps;v=v!==null?v.memoizedProps:H;var Y=S.type,ne=S.updateQueue;S.updateQueue=null,ne!==null&&Zs(Q,ne,Y,v,H,S)}return;case 6:if(S.stateNode===null)throw Error(u(162));Q=S.memoizedProps,Hi(S.stateNode,v!==null?v.memoizedProps:Q,Q);return;case 3:X&&(S=S.stateNode,S.hydrate&&(S.hydrate=!1,FA(S.containerInfo)));return;case 12:return;case 13:dD(S),C0(S);return;case 19:C0(S);return;case 17:return;case 23:case 24:AD(S,S.memoizedState!==null);return}throw Error(u(163))}switch(S.tag){case 0:case 11:case 14:case 15:case 22:wp(3,S);return;case 12:return;case 13:dD(S),C0(S);return;case 19:C0(S);return;case 3:X&&(Q=S.stateNode,Q.hydrate&&(Q.hydrate=!1,FA(Q.containerInfo)));break;case 23:case 24:return}e:if(z){switch(S.tag){case 1:case 5:case 6:case 20:break e;case 3:case 4:S=S.stateNode,xA(S.containerInfo,S.pendingChildren);break e}throw Error(u(163))}}function dD(v){v.memoizedState!==null&&(HI=Dt(),R&&AD(v.child,!0))}function C0(v){var S=v.updateQueue;if(S!==null){v.updateQueue=null;var Q=v.stateNode;Q===null&&(Q=v.stateNode=new GF),S.forEach(function(H){var Y=tR.bind(null,v,H);Q.has(H)||(Q.add(H),H.then(Y,Y))})}}function WF(v,S){return v!==null&&(v=v.memoizedState,v===null||v.dehydrated!==null)?(S=S.memoizedState,S!==null&&S.dehydrated===null):!1}var Od=0,Md=1,Ud=2,I0=3,_d=4;if(typeof Symbol=="function"&&Symbol.for){var w0=Symbol.for;Od=w0("selector.component"),Md=w0("selector.has_pseudo_class"),Ud=w0("selector.role"),I0=w0("selector.test_id"),_d=w0("selector.text")}function Hd(v){var S=$(v);if(S!=null){if(typeof S.memoizedProps["data-testname"]!="string")throw Error(u(364));return S}if(v=nr(v),v===null)throw Error(u(362));return v.stateNode.current}function xu(v,S){switch(S.$$typeof){case Od:if(v.type===S.value)return!0;break;case Md:e:{S=S.value,v=[v,0];for(var Q=0;Q";case Md:return":has("+(bu(v)||"")+")";case Ud:return'[role="'+v.value+'"]';case _d:return'"'+v.value+'"';case I0:return'[data-testname="'+v.value+'"]';default:throw Error(u(365,v))}}function TI(v,S){var Q=[];v=[v,0];for(var H=0;HY&&(Y=Be),Q&=~ne}if(Q=Y,Q=Dt()-Q,Q=(120>Q?120:480>Q?480:1080>Q?1080:1920>Q?1920:3e3>Q?3e3:4320>Q?4320:1960*VF(Q/1960))-Q,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}is!==5&&(is=2),ft=m0(ft,Ue),Xt=Be;do{switch(Xt.tag){case 3:ne=ft,Xt.flags|=4096,S&=-S,Xt.lanes|=S;var Wn=bI(Xt,ne,S);Dd(Xt,Wn);break e;case 1:ne=ft;var xr=Xt.type,Pn=Xt.stateNode;if(!(Xt.flags&64)&&(typeof xr.getDerivedStateFromError=="function"||Pn!==null&&typeof Pn.componentDidCatch=="function"&&(bl===null||!bl.has(Pn)))){Xt.flags|=4096,S&=-S,Xt.lanes|=S;var Tn=E0(Xt,ne,S);Dd(Xt,Tn);break e}}Xt=Xt.return}while(Xt!==null)}BD(Q)}catch(Yr){S=Yr,Oi===Q&&Q!==null&&(Oi=Q=Q.return);continue}break}while(!0)}function ID(){var v=jd.current;return jd.current=bt,v===null?bt:v}function b0(v,S){var Q=Pr;Pr|=16;var H=ID();Os===v&&ms===S||Sp(v,S);do try{JF();break}catch(Y){CD(v,Y)}while(!0);if(s0(),Pr=Q,jd.current=H,Oi!==null)throw Error(u(261));return Os=null,ms=0,is}function JF(){for(;Oi!==null;)wD(Oi)}function zF(){for(;Oi!==null&&!ja();)wD(Oi)}function wD(v){var S=PD(v.alternate,v,KA);v.memoizedProps=v.pendingProps,S===null?BD(v):Oi=S,NI.current=null}function BD(v){var S=v;do{var Q=S.alternate;if(v=S.return,S.flags&2048){if(Q=qF(S),Q!==null){Q.flags&=2047,Oi=Q;return}v!==null&&(v.firstEffect=v.lastEffect=null,v.flags|=2048)}else{if(Q=HF(Q,S,KA),Q!==null){Oi=Q;return}if(Q=S,Q.tag!==24&&Q.tag!==23||Q.memoizedState===null||KA&1073741824||!(Q.mode&4)){for(var H=0,Y=Q.child;Y!==null;)H|=Y.lanes|Y.childLanes,Y=Y.sibling;Q.childLanes=H}v!==null&&!(v.flags&2048)&&(v.firstEffect===null&&(v.firstEffect=S.firstEffect),S.lastEffect!==null&&(v.lastEffect!==null&&(v.lastEffect.nextEffect=S.firstEffect),v.lastEffect=S.lastEffect),1Dt()-HI?Sp(v,0):UI|=Q),qo(v,S)}function tR(v,S){var Q=v.stateNode;Q!==null&&Q.delete(S),S=0,S===0&&(S=v.mode,S&2?S&4?(kc===0&&(kc=Bp),S=vn(62914560&~kc),S===0&&(S=4194304)):S=er()===99?1:2:S=1),Q=oo(),v=Kd(v,S),v!==null&&(ua(v,S,Q),qo(v,Q))}var PD;PD=function(v,S,Q){var H=S.lanes;if(v!==null)if(v.memoizedProps!==S.pendingProps||vi.current)Ye=!0;else if(Q&H)Ye=!!(v.flags&16384);else{switch(Ye=!1,S.tag){case 3:Fd(S),p0();break;case 5:wu(S);break;case 1:qn(S.type)&&aa(S);break;case 4:u0(S,S.stateNode.containerInfo);break;case 10:o0(S,S.memoizedProps.value);break;case 13:if(S.memoizedState!==null)return Q&S.child.childLanes?PI(v,S,Q):(Bn(oi,oi.current&1),S=Mn(v,S,Q),S!==null?S.sibling:null);Bn(oi,oi.current&1);break;case 19:if(H=(Q&S.childLanes)!==0,v.flags&64){if(H)return cD(v,S,Q);S.flags|=64}var Y=S.memoizedState;if(Y!==null&&(Y.rendering=null,Y.tail=null,Y.lastEffect=null),Bn(oi,oi.current),H)break;return null;case 23:case 24:return S.lanes=0,ai(v,S,Q)}return Mn(v,S,Q)}else Ye=!1;switch(S.lanes=0,S.tag){case 2:if(H=S.type,v!==null&&(v.alternate=null,S.alternate=null,S.flags|=2),v=S.pendingProps,Y=un(S,ki.current),Eu(S,Q),Y=g0(null,S,H,v,Y,Q),S.flags|=1,typeof Y=="object"&&Y!==null&&typeof Y.render=="function"&&Y.$$typeof===void 0){if(S.tag=1,S.memoizedState=null,S.updateQueue=null,qn(H)){var ne=!0;aa(S)}else ne=!1;S.memoizedState=Y.state!==null&&Y.state!==void 0?Y.state:null,pp(S);var Be=H.getDerivedStateFromProps;typeof Be=="function"&&NA(S,H,Be,v),Y.updater=OA,S.stateNode=Y,Y._reactInternals=S,no(S,H,v,Q),S=SI(null,S,H,!0,ne,Q)}else S.tag=0,At(null,S,Y,Q),S=S.child;return S;case 16:Y=S.elementType;e:{switch(v!==null&&(v.alternate=null,S.alternate=null,S.flags|=2),v=S.pendingProps,ne=Y._init,Y=ne(Y._payload),S.type=Y,ne=S.tag=nR(Y),v=to(Y,v),ne){case 0:S=GA(null,S,Y,v,Q);break e;case 1:S=lD(null,S,Y,v,Q);break e;case 11:S=hr(null,S,Y,v,Q);break e;case 14:S=Ir(null,S,Y,to(Y.type,v),H,Q);break e}throw Error(u(306,Y,""))}return S;case 0:return H=S.type,Y=S.pendingProps,Y=S.elementType===H?Y:to(H,Y),GA(v,S,H,Y,Q);case 1:return H=S.type,Y=S.pendingProps,Y=S.elementType===H?Y:to(H,Y),lD(v,S,H,Y,Q);case 3:if(Fd(S),H=S.updateQueue,v===null||H===null)throw Error(u(282));if(H=S.pendingProps,Y=S.memoizedState,Y=Y!==null?Y.element:null,l0(v,S),LA(S,H,null,Q),H=S.memoizedState.element,H===Y)p0(),S=Mn(v,S,Q);else{if(Y=S.stateNode,(ne=Y.hydrate)&&(X?(Uo=dc(S.stateNode.containerInfo),ha=S,ne=ga=!0):ne=!1),ne){if(X&&(v=Y.mutableSourceEagerHydrationData,v!=null))for(Y=0;Y=jt&&ne>=Tr&&Y<=wr&&Be<=Xt){v.splice(S,1);break}else if(H!==jt||Q.width!==ft.width||XtBe){if(!(ne!==Tr||Q.height!==ft.height||wrY)){jt>H&&(ft.width+=jt-H,ft.x=H),wrne&&(ft.height+=Tr-ne,ft.y=ne),XtQ&&(Q=Be)),Be ")+` + +No matching component was found for: + `)+v.join(" > ")}return null},r.getPublicRootInstance=function(v){if(v=v.current,!v.child)return null;switch(v.child.tag){case 5:return Re(v.child.stateNode);default:return v.child.stateNode}},r.injectIntoDevTools=function(v){if(v={bundleType:v.bundleType,version:v.version,rendererPackageName:v.rendererPackageName,rendererConfig:v.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:A.ReactCurrentDispatcher,findHostInstanceByFiber:sR,findFiberByHostInstance:v.findFiberByHostInstance||oR,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")v=!1;else{var S=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!S.isDisabled&&S.supportsFiber)try{Ze=S.inject(v),ca=S}catch{}v=!0}return v},r.observeVisibleRects=function(v,S,Q,H){if(!qt)throw Error(u(363));v=LI(v,S);var Y=Xr(v,Q,H).disconnect;return{disconnect:function(){Y()}}},r.registerMutableSourceForHydration=function(v,S){var Q=S._getVersion;Q=Q(S._source),v.mutableSourceEagerHydrationData==null?v.mutableSourceEagerHydrationData=[S,Q]:v.mutableSourceEagerHydrationData.push(S,Q)},r.runWithPriority=function(v,S){var Q=Bl;try{return Bl=v,S()}finally{Bl=Q}},r.shouldSuspend=function(){return!1},r.unbatchedUpdates=function(v,S){var Q=Pr;Pr&=-2,Pr|=8;try{return v(S)}finally{Pr=Q,Pr===0&&(ku(),Sn())}},r.updateContainer=function(v,S,Q,H){var Y=S.current,ne=oo(),Be=ss(Y);e:if(Q){Q=Q._reactInternals;t:{if(me(Q)!==Q||Q.tag!==1)throw Error(u(170));var Ue=Q;do{switch(Ue.tag){case 3:Ue=Ue.stateNode.context;break t;case 1:if(qn(Ue.type)){Ue=Ue.stateNode.__reactInternalMemoizedMergedChildContext;break t}}Ue=Ue.return}while(Ue!==null);throw Error(u(171))}if(Q.tag===1){var ft=Q.type;if(qn(ft)){Q=oa(Q,ft,Ue);break e}}Q=Ue}else Q=Lo;return S.context===null?S.context=Q:S.pendingContext=Q,S=Wa(ne,Be),S.payload={element:v},H=H===void 0?null:H,H!==null&&(S.callback=H),Ya(Y,S),Xa(Y,Be,ne),Be},r}});var ECe=_(($Yt,yCe)=>{"use strict";yCe.exports=mCe()});var ICe=_((eVt,CCe)=>{"use strict";var Syt={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};CCe.exports=Syt});var DCe=_((tVt,vCe)=>{"use strict";var Pyt=Object.assign||function(t){for(var e=1;e"}}]),t}(),wCe=function(){BQ(t,null,[{key:"fromJS",value:function(r){var o=r.width,a=r.height;return new t(o,a)}}]);function t(e,r){fq(this,t),this.width=e,this.height=r}return BQ(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),BCe=function(){function t(e,r){fq(this,t),this.unit=e,this.value=r}return BQ(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case au.UNIT_POINT:return String(this.value);case au.UNIT_PERCENT:return this.value+"%";case au.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();vCe.exports=function(t,e){function r(u,A,p){var h=u[A];u[A]=function(){for(var E=arguments.length,w=Array(E),D=0;D1?w-1:0),b=1;b1&&arguments[1]!==void 0?arguments[1]:NaN,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,h=arguments.length>3&&arguments[3]!==void 0?arguments[3]:au.DIRECTION_LTR;return u.call(this,A,p,h)}),Pyt({Config:e.Config,Node:e.Node,Layout:t("Layout",xyt),Size:t("Size",wCe),Value:t("Value",BCe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},au)}});var SCe=_((exports,module)=>{(function(t,e){typeof define=="function"&&define.amd?define([],function(){return e}):typeof module=="object"&&module.exports?module.exports=e:(t.nbind=t.nbind||{}).init=e})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(t,e){return function(){t&&t.apply(this,arguments);try{Module.ccall("nbind_init")}catch(r){e(r);return}e(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module<"u"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof ve=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(e,r){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var o=nodeFS.readFileSync(e);return r?o:o.toString()},Module.readBinary=function(e){var r=Module.read(e,!0);return r.buffer||(r=new Uint8Array(r)),assert(r.buffer),r},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module<"u"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr<"u"&&(Module.printErr=printErr),typeof read<"u"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(e));var r=read(e,"binary");return assert(typeof r=="object"),r},typeof scriptArgs<"u"?Module.arguments=scriptArgs:typeof arguments<"u"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(t,e){quit(t)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,o){var a=new XMLHttpRequest;a.open("GET",e,!0),a.responseType="arraybuffer",a.onload=function(){a.status==200||a.status==0&&a.response?r(a.response):o()},a.onerror=o,a.send(null)},typeof arguments<"u"&&(Module.arguments=arguments),typeof console<"u")Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump<"u"?function(t){dump(t)}:function(t){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle>"u"&&(Module.setWindowTitle=function(t){document.title=t})}else throw"Unknown runtime environment. Where are we?";function globalEval(t){eval.call(null,t)}!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(t,e){throw e}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(t){return tempRet0=t,t},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(t){STACKTOP=t},getNativeTypeSize:function(t){switch(t){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(t[t.length-1]==="*")return Runtime.QUANTUM_SIZE;if(t[0]==="i"){var e=parseInt(t.substr(1));return assert(e%8===0),e/8}else return 0}}},getNativeFieldSize:function(t){return Math.max(Runtime.getNativeTypeSize(t),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(t,e){return e==="double"||e==="i64"?t&7&&(assert((t&7)===4),t+=4):assert((t&3)===0),t},getAlignSize:function(t,e,r){return!r&&(t=="i64"||t=="double")?8:t?Math.min(e||(t?Runtime.getNativeFieldSize(t):0),Runtime.QUANTUM_SIZE):Math.min(e,8)},dynCall:function(t,e,r){return r&&r.length?Module["dynCall_"+t].apply(null,[e].concat(r)):Module["dynCall_"+t].call(null,e)},functionPointers:[],addFunction:function(t){for(var e=0;e>2],r=(e+t+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=r,r>=TOTAL_MEMORY){var o=enlargeMemory();if(!o)return HEAP32[DYNAMICTOP_PTR>>2]=e,0}return e},alignMemory:function(t,e){var r=t=Math.ceil(t/(e||16))*(e||16);return r},makeBigInt:function(t,e,r){var o=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return o},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(t,e){t||abort("Assertion failed: "+e)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(t){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(t){var e=Runtime.stackAlloc(t.length);return writeArrayToMemory(t,e),e},stringToC:function(t){var e=0;if(t!=null&&t!==0){var r=(t.length<<2)+1;e=Runtime.stackAlloc(r),stringToUTF8(t,e,r)}return e}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,o,a,n){var u=getCFunc(e),A=[],p=0;if(a)for(var h=0;h>0]=e;break;case"i8":HEAP8[t>>0]=e;break;case"i16":HEAP16[t>>1]=e;break;case"i32":HEAP32[t>>2]=e;break;case"i64":tempI64=[e>>>0,(tempDouble=e,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[t>>2]=tempI64[0],HEAP32[t+4>>2]=tempI64[1];break;case"float":HEAPF32[t>>2]=e;break;case"double":HEAPF64[t>>3]=e;break;default:abort("invalid type for setValue: "+r)}}Module.setValue=setValue;function getValue(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return HEAP8[t>>0];case"i8":return HEAP8[t>>0];case"i16":return HEAP16[t>>1];case"i32":return HEAP32[t>>2];case"i64":return HEAP32[t>>2];case"float":return HEAPF32[t>>2];case"double":return HEAPF64[t>>3];default:abort("invalid type for setValue: "+e)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(t,e,r,o){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var u=typeof e=="string"?e:null,A;if(r==ALLOC_NONE?A=o:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,u?1:e.length)),a){var o=A,p;for(assert((A&3)==0),p=A+(n&-4);o>2]=0;for(p=A+n;o>0]=0;return A}if(u==="i8")return t.subarray||t.slice?HEAPU8.set(t,A):HEAPU8.set(new Uint8Array(t),A),A;for(var h=0,E,w,D;h>0],r|=o,!(o==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var u=1024,A;e>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,u))),n=n?n+A:A,t+=u,e-=u;return n}return Module.UTF8ToString(t)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(t){for(var e="";;){var r=HEAP8[t++>>0];if(!r)return e;e+=String.fromCharCode(r)}}Module.AsciiToString=AsciiToString;function stringToAscii(t,e){return writeAsciiToMemory(t,e,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(t,e){for(var r=e;t[r];)++r;if(r-e>16&&t.subarray&&UTF8Decoder)return UTF8Decoder.decode(t.subarray(e,r));for(var o,a,n,u,A,p,h="";;){if(o=t[e++],!o)return h;if(!(o&128)){h+=String.fromCharCode(o);continue}if(a=t[e++]&63,(o&224)==192){h+=String.fromCharCode((o&31)<<6|a);continue}if(n=t[e++]&63,(o&240)==224?o=(o&15)<<12|a<<6|n:(u=t[e++]&63,(o&248)==240?o=(o&7)<<18|a<<12|n<<6|u:(A=t[e++]&63,(o&252)==248?o=(o&3)<<24|a<<18|n<<12|u<<6|A:(p=t[e++]&63,o=(o&1)<<30|a<<24|n<<18|u<<12|A<<6|p))),o<65536)h+=String.fromCharCode(o);else{var E=o-65536;h+=String.fromCharCode(55296|E>>10,56320|E&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(t){return UTF8ArrayToString(HEAPU8,t)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(t,e,r,o){if(!(o>0))return 0;for(var a=r,n=r+o-1,u=0;u=55296&&A<=57343&&(A=65536+((A&1023)<<10)|t.charCodeAt(++u)&1023),A<=127){if(r>=n)break;e[r++]=A}else if(A<=2047){if(r+1>=n)break;e[r++]=192|A>>6,e[r++]=128|A&63}else if(A<=65535){if(r+2>=n)break;e[r++]=224|A>>12,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=2097151){if(r+3>=n)break;e[r++]=240|A>>18,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=67108863){if(r+4>=n)break;e[r++]=248|A>>24,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else{if(r+5>=n)break;e[r++]=252|A>>30,e[r++]=128|A>>24&63,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}}return e[r]=0,r-a}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(t,e,r){return stringToUTF8Array(t,HEAPU8,e,r)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(t){for(var e=0,r=0;r=55296&&o<=57343&&(o=65536+((o&1023)<<10)|t.charCodeAt(++r)&1023),o<=127?++e:o<=2047?e+=2:o<=65535?e+=3:o<=2097151?e+=4:o<=67108863?e+=5:e+=6}return e}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function demangle(t){var e=Module.___cxa_demangle||Module.__cxa_demangle;if(e){try{var r=t.substr(1),o=lengthBytesUTF8(r)+1,a=_malloc(o);stringToUTF8(r,a,o);var n=_malloc(4),u=e(a,0,0,n);if(getValue(n,"i32")===0&&u)return Pointer_stringify(u)}catch{}finally{a&&_free(a),n&&_free(n),u&&_free(u)}return t}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t}function demangleAll(t){var e=/__Z[\w\d_]+/g;return t.replace(e,function(r){var o=demangle(r);return r===o?r:r+" ["+o+"]"})}function jsStackTrace(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function stackTrace(){var t=jsStackTrace();return Module.extraStackTrace&&(t+=` +`+Module.extraStackTrace()),demangleAll(t)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var e=t.shift();if(typeof e=="function"){e();continue}var r=e.func;typeof r=="number"?e.arg===void 0?Module.dynCall_v(r):Module.dynCall_vi(r,e.arg):r(e.arg===void 0?null:e.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(t){__ATPRERUN__.unshift(t)}Module.addOnPreRun=addOnPreRun;function addOnInit(t){__ATINIT__.unshift(t)}Module.addOnInit=addOnInit;function addOnPreMain(t){__ATMAIN__.unshift(t)}Module.addOnPreMain=addOnPreMain;function addOnExit(t){__ATEXIT__.unshift(t)}Module.addOnExit=addOnExit;function addOnPostRun(t){__ATPOSTRUN__.unshift(t)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(t,e,r){var o=r>0?r:lengthBytesUTF8(t)+1,a=new Array(o),n=stringToUTF8Array(t,a,0,a.length);return e&&(a.length=n),a}Module.intArrayFromString=intArrayFromString;function intArrayToString(t){for(var e=[],r=0;r255&&(o&=255),e.push(String.fromCharCode(o))}return e.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(t,e,r){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var o,a;r&&(a=e+lengthBytesUTF8(t),o=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=o)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var o=0;o>0]=t.charCodeAt(o);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var o=e>>>16,a=e&65535,n=r>>>16,u=r&65535;return a*u+(o*u+a*n<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(t){return froundBuffer[0]=t,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(t){t=t>>>0;for(var e=0;e<32;e++)if(t&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(t){return t}function addRunDependency(t){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(t){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var e=dependenciesFulfilled;dependenciesFulfilled=null,e()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(t,e,r,o,a,n,u,A){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,o,a,n,u,A){return ASM_CONSTS[t](e,r,o,a,n,u,A)}function _emscripten_asm_const_iiiii(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiidddddd(t,e,r,o,a,n,u,A,p){return ASM_CONSTS[t](e,r,o,a,n,u,A,p)}function _emscripten_asm_const_iiididi(t,e,r,o,a,n,u){return ASM_CONSTS[t](e,r,o,a,n,u)}function _emscripten_asm_const_iiii(t,e,r,o){return ASM_CONSTS[t](e,r,o)}function _emscripten_asm_const_iiiid(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiiiii(t,e,r,o,a,n){return ASM_CONSTS[t](e,r,o,a,n)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(t,e){__ATEXIT__.unshift({func:t,arg:e})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(t,e,r,o){var a=arguments.length,n=a<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,o);else for(var A=t.length-1;A>=0;A--)(u=t[A])&&(n=(a<3?u(n):a>3?u(e,r,n):u(e,r))||n);return a>3&&n&&Object.defineProperty(e,r,n),n}function _defineHidden(t){return function(e,r){Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:t,writable:!0})}}var _nbind={};function __nbind_free_external(t){_nbind.externalList[t].dereference(t)}function __nbind_reference_external(t){_nbind.externalList[t].reference()}function _llvm_stackrestore(t){var e=_llvm_stacksave,r=e.LLVM_SAVEDSTACKS[t];e.LLVM_SAVEDSTACKS.splice(t,1),Runtime.stackRestore(r)}function __nbind_register_pool(t,e,r,o){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=o/4,HEAP32[e/4]=16909060,HEAP8[e]==1&&(_nbind.bigEndian=!0),HEAP32[e/4]=0,_nbind.makeTypeKindTbl=(n={},n[1024]=_nbind.PrimitiveType,n[64]=_nbind.Int64Type,n[2048]=_nbind.BindClass,n[3072]=_nbind.BindClassPtr,n[4096]=_nbind.SharedClassPtr,n[5120]=_nbind.ArrayType,n[6144]=_nbind.ArrayType,n[7168]=_nbind.CStringType,n[9216]=_nbind.CallbackType,n[10240]=_nbind.BindType,n),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var a=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});a.proto=Module,_nbind.BindClass.list.push(a);var n}function _emscripten_set_main_loop_timing(t,e){if(Browser.mainLoop.timingMode=t,Browser.mainLoop.timingValue=e,!Browser.mainLoop.func)return 1;if(t==0)Browser.mainLoop.scheduler=function(){var u=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,u)},Browser.mainLoop.method="timeout";else if(t==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(t==2){if(!window.setImmediate){let n=function(u){u.source===window&&u.data===o&&(u.stopPropagation(),r.shift()())};var a=n,r=[],o="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(A){r.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:o})):window.postMessage(o,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(t,e,r,o,a){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=t,Browser.mainLoop.arg=o;var n;typeof o<"u"?n=function(){Module.dynCall_vi(t,o)}:n=function(){Module.dynCall_v(t)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var p=Date.now(),h=Browser.mainLoop.queue.shift();if(h.func(h.arg),Browser.mainLoop.remainingBlockers){var E=Browser.mainLoop.remainingBlockers,w=E%1==0?E-1:Math.floor(E);h.counted?Browser.mainLoop.remainingBlockers=w:(w=w+.5,Browser.mainLoop.remainingBlockers=(8*E+w)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),u1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),!(u0?_emscripten_set_main_loop_timing(0,1e3/e):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var t=Browser.mainLoop.timingMode,e=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(t,e),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var t=Module.statusMessage||"Please wait...",e=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;e?e"u"&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var t={};t.canHandle=function(n){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(n)},t.handle=function(n,u,A,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(u)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(u)}))}catch(b){Runtime.warnOnce("Blob constructor present but fails: "+b+"; falling back to blob builder")}if(!h){var E=new Browser.BlobBuilder;E.append(new Uint8Array(n).buffer),h=E.getBlob()}var w=Browser.URLObject.createObjectURL(h),D=new Image;D.onload=function(){assert(D.complete,"Image "+u+" could not be decoded");var C=document.createElement("canvas");C.width=D.width,C.height=D.height;var T=C.getContext("2d");T.drawImage(D,0,0),Module.preloadedImages[u]=C,Browser.URLObject.revokeObjectURL(w),A&&A(n)},D.onerror=function(C){console.log("Image "+w+" could not be decoded"),p&&p()},D.src=w},Module.preloadPlugins.push(t);var e={};e.canHandle=function(n){return!Module.noAudioDecoding&&n.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},e.handle=function(n,u,A,p){var h=!1;function E(T){h||(h=!0,Module.preloadedAudios[u]=T,A&&A(n))}function w(){h||(h=!0,Module.preloadedAudios[u]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var D=new Blob([n],{type:Browser.getMimetype(u)})}catch{return w()}var b=Browser.URLObject.createObjectURL(D),C=new Audio;C.addEventListener("canplaythrough",function(){E(C)},!1),C.onerror=function(N){if(h)return;console.log("warning: browser could not fully decode audio "+u+", trying slower base64 approach");function U(J){for(var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",le="=",ce="",ue=0,Ie=0,he=0;he=6;){var De=ue>>Ie-6&63;Ie-=6,ce+=te[De]}return Ie==2?(ce+=te[(ue&3)<<4],ce+=le+le):Ie==4&&(ce+=te[(ue&15)<<2],ce+=le),ce}C.src="data:audio/x-"+u.substr(-3)+";base64,"+U(n),E(C)},C.src=b,Browser.safeSetTimeout(function(){E(C)},1e4)}else return w()},Module.preloadPlugins.push(e);function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var o=Module.canvas;o&&(o.requestPointerLock=o.requestPointerLock||o.mozRequestPointerLock||o.webkitRequestPointerLock||o.msRequestPointerLock||function(){},o.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},o.exitPointerLock=o.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&o.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,o){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var u={antialias:!1,alpha:!1};if(o)for(var A in o)u[A]=o[A];n=GL.createContext(t,u),n&&(a=GL.getContext(n).GLctx)}else a=t.getContext("2d");return a?(r&&(e||assert(typeof GLctx>"u","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=a,e&&GL.makeContextCurrent(n),Module.useWebGL=e,Browser.moduleContextCreatedCallbacks.forEach(function(p){p()}),Browser.init()),a):null},destroyContext:function(t,e,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(t,e,r){Browser.lockPointer=t,Browser.resizeCanvas=e,Browser.vrDevice=r,typeof Browser.lockPointer>"u"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas>"u"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice>"u"&&(Browser.vrDevice=null);var o=Module.canvas;function a(){Browser.isFullscreen=!1;var u=o.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===u?(o.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},o.exitFullscreen=o.exitFullscreen.bind(document),Browser.lockPointer&&o.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(u.parentNode.insertBefore(o,u),u.parentNode.removeChild(u),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(o)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("MSFullscreenChange",a,!1));var n=document.createElement("div");o.parentNode.insertBefore(n,o),n.appendChild(o),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),r?n.requestFullscreen({vrDisplay:r}):n.requestFullscreen()},requestFullScreen:function(t,e,r){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(o,a,n){return Browser.requestFullscreen(o,a,n)},Browser.requestFullscreen(t,e,r)},nextRAF:0,fakeRequestAnimationFrame:function(t){var e=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=e+1e3/60;else for(;e+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-e,0);setTimeout(t,r)},requestAnimationFrame:function t(e){typeof window>"u"?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(t){return function(){if(!ABORT)return t.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var t=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],t.forEach(function(e){e()})}},safeRequestAnimationFrame:function(t){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))})},safeSetTimeout:function(t,e){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))},e)},safeSetInterval:function(t,e){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&t()},e)},getMimetype:function(t){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[t.substr(t.lastIndexOf(".")+1)]},getUserMedia:function(t){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(t)},getMovementX:function(t){return t.movementX||t.mozMovementX||t.webkitMovementX||0},getMovementY:function(t){return t.movementY||t.mozMovementY||t.webkitMovementY||0},getMouseWheelDelta:function(t){var e=0;switch(t.type){case"DOMMouseScroll":e=t.detail;break;case"mousewheel":e=t.wheelDelta;break;case"wheel":e=t.deltaY;break;default:throw"unrecognized mouse wheel event: "+t.type}return e},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(t){if(Browser.pointerLock)t.type!="mousemove"&&"mozMovementX"in t?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(t),Browser.mouseMovementY=Browser.getMovementY(t)),typeof SDL<"u"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var e=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,o=Module.canvas.height,a=typeof window.scrollX<"u"?window.scrollX:window.pageXOffset,n=typeof window.scrollY<"u"?window.scrollY:window.pageYOffset;if(t.type==="touchstart"||t.type==="touchend"||t.type==="touchmove"){var u=t.touch;if(u===void 0)return;var A=u.pageX-(a+e.left),p=u.pageY-(n+e.top);A=A*(r/e.width),p=p*(o/e.height);var h={x:A,y:p};if(t.type==="touchstart")Browser.lastTouches[u.identifier]=h,Browser.touches[u.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var E=Browser.touches[u.identifier];E||(E=h),Browser.lastTouches[u.identifier]=E,Browser.touches[u.identifier]=h}return}var w=t.pageX-(a+e.left),D=t.pageY-(n+e.top);w=w*(r/e.width),D=D*(o/e.height),Browser.mouseMovementX=w-Browser.mouseX,Browser.mouseMovementY=D-Browser.mouseY,Browser.mouseX=w,Browser.mouseY=D}},asyncLoad:function(t,e,r,o){var a=o?"":"al "+t;Module.readAsync(t,function(n){assert(n,'Loading data file "'+t+'" failed (no arrayBuffer).'),e(new Uint8Array(n)),a&&removeRunDependency(a)},function(n){if(r)r();else throw'Loading data file "'+t+'" failed.'}),a&&addRunDependency(a)},resizeListeners:[],updateResizeListeners:function(){var t=Module.canvas;Browser.resizeListeners.forEach(function(e){e(t.width,t.height)})},setCanvasSize:function(t,e,r){var o=Module.canvas;Browser.updateCanvasDimensions(o,t,e),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t&-8388609,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},updateCanvasDimensions:function(t,e,r){e&&r?(t.widthNative=e,t.heightNative=r):(e=t.widthNative,r=t.heightNative);var o=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(o/a>2];return e},getStr:function(){var t=Pointer_stringify(SYSCALLS.get());return t},get64:function(){var t=SYSCALLS.get(),e=SYSCALLS.get();return t>=0?assert(e===0):assert(e===-1),t},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD();return FS.close(r),0}catch(o){return(typeof FS>"u"||!(o instanceof FS.ErrnoError))&&abort(o),-o.errno}}function ___syscall54(t,e){SYSCALLS.varargs=e;try{return 0}catch(r){return(typeof FS>"u"||!(r instanceof FS.ErrnoError))&&abort(r),-r.errno}}function _typeModule(t){var e=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function r(p,h,E,w,D,b){if(h==1){var C=w&896;(C==128||C==256||C==384)&&(p="X const")}var T;return b?T=E.replace("X",p).replace("Y",D):T=p.replace("X",E).replace("Y",D),T.replace(/([*&]) (?=[*&])/g,"$1")}function o(p,h,E,w,D){throw new Error(p+" type "+E.replace("X",h+"?")+(w?" with flag "+w:"")+" in "+D)}function a(p,h,E,w,D,b,C,T){b===void 0&&(b="X"),T===void 0&&(T=1);var N=E(p);if(N)return N;var U=w(p),J=U.placeholderFlag,te=e[J];C&&te&&(b=r(C[2],C[0],b,te[0],"?",!0));var le;J==0&&(le="Unbound"),J>=10&&(le="Corrupt"),T>20&&(le="Deeply nested"),le&&o(le,p,b,J,D||"?");var ce=U.paramList[0],ue=a(ce,h,E,w,D,b,te,T+1),Ie,he={flags:te[0],id:p,name:"",paramList:[ue]},De=[],Ee="?";switch(U.placeholderFlag){case 1:Ie=ue.spec;break;case 2:if((ue.flags&15360)==1024&&ue.spec.ptrSize==1){he.flags=7168;break}case 3:case 6:case 5:Ie=ue.spec,ue.flags&15360;break;case 8:Ee=""+U.paramList[1],he.paramList.push(U.paramList[1]);break;case 9:for(var g=0,me=U.paramList[1];g>2]=t),t}function _llvm_stacksave(){var t=_llvm_stacksave;return t.LLVM_SAVEDSTACKS||(t.LLVM_SAVEDSTACKS=[]),t.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),t.LLVM_SAVEDSTACKS.length-1}function ___syscall140(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),u=SYSCALLS.get(),A=a;return FS.llseek(r,A,u),HEAP32[n>>2]=r.position,r.getdents&&A===0&&u===0&&(r.getdents=null),0}catch(p){return(typeof FS>"u"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall146(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.get(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(E,w){var D=___syscall146.buffers[E];assert(D),w===0||w===10?((E===1?Module.print:Module.printErr)(UTF8ArrayToString(D,0)),D.length=0):D.push(w)});for(var u=0;u>2],p=HEAP32[o+(u*8+4)>>2],h=0;h"u"||!(E instanceof FS.ErrnoError))&&abort(E),-E.errno}}function __nbind_finish(){for(var t=0,e=_nbind.BindClass.list;tt.pageSize/2||e>t.pageSize-r){var o=_nbind.typeNameTbl.NBind.proto;return o.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var o=HEAPU32[t.pagePtr];if(o){var a=_nbind.typeNameTbl.NBind.proto;a.lreset(e,r)}else HEAPU32[t.usedPtr]=e},t}();_nbind.Pool=Pool;function constructType(t,e){var r=t==10240?_nbind.makeTypeNameTbl[e.name]||_nbind.BindType:_nbind.makeTypeKindTbl[t],o=new r(e);return typeIdTbl[e.id]=o,_nbind.typeNameTbl[e.name]=o,o}_nbind.constructType=constructType;function getType(t){return typeIdTbl[t]}_nbind.getType=getType;function queryType(t){var e=HEAPU8[t],r=_nbind.structureList[e][1];t/=4,r<0&&(++t,r=HEAPU32[t]+1);var o=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(o=[o[0],o.slice(1)]),{paramList:o,placeholderFlag:e}}_nbind.queryType=queryType;function getTypes(t,e){return t.map(function(r){return typeof r=="number"?_nbind.getComplexType(r,constructType,getType,queryType,e):_nbind.typeNameTbl[r]})}_nbind.getTypes=getTypes;function readTypeIdList(t,e){return Array.prototype.slice.call(HEAPU32,t/4,t/4+e)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(t){for(var e=t;HEAPU8[e++];);return String.fromCharCode.apply("",HEAPU8.subarray(t,e-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(t){var e={};if(t)for(;;){var r=HEAPU32[t/4];if(!r)break;e[readAsciiString(r)]=!0,t+=4}return e}_nbind.readPolicyList=readPolicyList;function getDynCall(t,e){var r={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},o=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+o];if(!a)throw new Error("dynCall_"+o+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,o){var a=t[e];t.hasOwnProperty(e)&&a?((a.arity||a.arity===0)&&(a=_nbind.makeOverloader(a,a.arity),t[e]=a),a.addMethod(r,o)):(r.arity=o,t[e]=r)}_nbind.addMethod=addMethod;function throwError(t){throw new Error(t)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.heap=HEAPU32,r.ptrSize=4,r}return e.prototype.needsWireRead=function(r){return!!this.wireRead||!!this.makeWireRead},e.prototype.needsWireWrite=function(r){return!!this.wireWrite||!!this.makeWireWrite},e}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(t){__extends(e,t);function e(r){var o=t.call(this,r)||this,a=r.flags&32?{32:HEAPF32,64:HEAPF64}:r.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return o.heap=a[r.ptrSize*8],o.ptrSize=r.ptrSize,o}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="number")return a;throw new Error("Type mismatch")}},e}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(t,e){if(t==null){if(e&&e.Nullable)return 0;throw new Error("Type mismatch")}if(e&&e.Strict){if(typeof t!="string")throw new Error("Type mismatch")}else t=t.toString();var r=Module.lengthBytesUTF8(t)+1,o=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,o,r),o}_nbind.pushCString=pushCString;function popCString(t){return t===0?null:Module.Pointer_stringify(t)}_nbind.popCString=popCString;var CStringType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=popCString,r.wireWrite=pushCString,r.readResources=[_nbind.resources.pool],r.writeResources=[_nbind.resources.pool],r}return e.prototype.makeWireWrite=function(r,o){return function(a){return pushCString(a,o)}},e}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=function(o){return!!o},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="boolean")return a;throw new Error("Type mismatch")}||r},e}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function t(){}return t.prototype.persist=function(){this.__nbindState|=1},t}();_nbind.Wrapper=Wrapper;function makeBound(t,e){var r=function(o){__extends(a,o);function a(n,u,A,p){var h=o.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var E=u,w=A,D=p;if(n!==_nbind.ptrMarker){var b=h.__nbindConstructor.apply(h,arguments);E=4608,D=HEAPU32[b/4],w=HEAPU32[b/4+1]}var C={configurable:!0,enumerable:!1,value:null,writable:!1},T={__nbindFlags:E,__nbindPtr:w};D&&(T.__nbindShared=D,_nbind.mark(h));for(var N=0,U=Object.keys(T);N>=1;var r=_nbind.valueList[t];return _nbind.valueList[t]=firstFreeValue,firstFreeValue=t,r}else{if(e)return _nbind.popShared(t,e);throw new Error("Invalid value slot "+t)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(t){return typeof t=="number"?t:pushValue(t)*4096+valueBase}function pop64(t){return t=3?u=Buffer.from(n):u=new Buffer(n),u.copy(o)}else getBuffer(o).set(n)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var t=0,e=dirtyList;t>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(t,e,r,o,a,n){try{Module.dynCall_viiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,o){try{return Module.dynCall_fiff(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vi(t,e){try{Module.dynCall_vi(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_vii(t,e,r){try{Module.dynCall_vii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_ii(t,e){try{return Module.dynCall_ii(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_viddi(t,e,r,o,a){try{Module.dynCall_viddi(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,o){try{Module.dynCall_vidd(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,o){try{return Module.dynCall_iiii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,o){try{return Module.dynCall_diii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_di(t,e){try{return Module.dynCall_di(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_iid(t,e,r){try{return Module.dynCall_iid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,o,a,n){try{Module.dynCall_viiddi(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,o,a,n,u){try{Module.dynCall_viiiiii(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_i(t){try{return Module.dynCall_i(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_iiiiii(t,e,r,o,a,n){try{return Module.dynCall_iiiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,o,a){try{Module.dynCall_viiid(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,o,a,n,u){try{Module.dynCall_viififi(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(t,e,r,o){try{Module.dynCall_viii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_v(t){try{Module.dynCall_v(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_viid(t,e,r,o){try{Module.dynCall_viid(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_idd(t,e,r){try{return Module.dynCall_idd(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,o,a){try{Module.dynCall_viiii(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(t,e,r){var o=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),u=new t.Uint8Array(r),A=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),E=new t.Float64Array(r),w=e.DYNAMICTOP_PTR|0,D=e.tempDoublePtr|0,b=e.ABORT|0,C=e.STACKTOP|0,T=e.STACK_MAX|0,N=e.cttz_i8|0,U=e.___dso_handle|0,J=0,te=0,le=0,ce=0,ue=t.NaN,Ie=t.Infinity,he=0,De=0,Ee=0,g=0,me=0,Ce=0,fe=t.Math.floor,ie=t.Math.abs,Z=t.Math.sqrt,Se=t.Math.pow,Re=t.Math.cos,ht=t.Math.sin,q=t.Math.tan,nt=t.Math.acos,Le=t.Math.asin,Te=t.Math.atan,ke=t.Math.atan2,Ke=t.Math.exp,xe=t.Math.log,tt=t.Math.ceil,He=t.Math.imul,x=t.Math.min,I=t.Math.max,P=t.Math.clz32,y=t.Math.fround,R=e.abort,z=e.assert,X=e.enlargeMemory,$=e.getTotalMemory,se=e.abortOnCannotGrowMemory,be=e.invoke_viiiii,Fe=e.invoke_vif,lt=e.invoke_vid,Et=e.invoke_fiff,qt=e.invoke_vi,nr=e.invoke_vii,Pt=e.invoke_ii,cn=e.invoke_viddi,Sr=e.invoke_vidd,yr=e.invoke_iiii,Rr=e.invoke_diii,Xr=e.invoke_di,$n=e.invoke_iid,Xs=e.invoke_iii,Hi=e.invoke_viiddi,Qs=e.invoke_viiiiii,Zs=e.invoke_dii,bi=e.invoke_i,Fs=e.invoke_iiiiii,$s=e.invoke_viiid,PA=e.invoke_viififi,gu=e.invoke_viii,op=e.invoke_v,ap=e.invoke_viid,Rs=e.invoke_idd,Nn=e.invoke_viiii,hs=e._emscripten_asm_const_iiiii,Ts=e._emscripten_asm_const_iiidddddd,pc=e._emscripten_asm_const_iiiid,hc=e.__nbind_reference_external,gc=e._emscripten_asm_const_iiiiiiii,xA=e._removeAccessorPrefix,bA=e._typeModule,Ro=e.__nbind_register_pool,To=e.__decorate,kA=e._llvm_stackrestore,pr=e.___cxa_atexit,Me=e.__extends,ia=e.__nbind_get_value_object,dc=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,Er=e._emscripten_set_main_loop_timing,du=e.__nbind_register_primitive,QA=e.__nbind_register_type,FA=e._emscripten_memcpy_big,mc=e.__nbind_register_function,yc=e.___setErrNo,Il=e.__nbind_register_class,we=e.__nbind_finish,Tt=e._abort,wl=e._nbind_value,Bi=e._llvm_stacksave,Ls=e.___syscall54,Ft=e._defineHidden,Bn=e._emscripten_set_main_loop,Lo=e._emscripten_get_now,ki=e.__nbind_register_callback_signature,vi=e._emscripten_asm_const_iiiiii,sa=e.__nbind_free_external,un=e._emscripten_asm_const_iiii,qn=e._emscripten_asm_const_iiididi,Ec=e.___syscall6,lp=e._atexit,oa=e.___syscall140,aa=e.___syscall146,la=y(0);let Ze=y(0);function ca(s){s=s|0;var l=0;return l=C,C=C+s|0,C=C+15&-16,l|0}function mu(){return C|0}function Bl(s){s=s|0,C=s}function dn(s,l){s=s|0,l=l|0,C=s,T=l}function No(s,l){s=s|0,l=l|0,J||(J=s,te=l)}function RA(s){s=s|0,Ce=s}function TA(){return Ce|0}function Oo(){var s=0,l=0;br(8104,8,400)|0,br(8504,408,540)|0,s=9044,l=s+44|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o[9088]=0,o[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,pr(17,8104,U|0)|0}function qa(s){s=s|0,gt(s+948|0)}function Ot(s){return s=y(s),((AD(s)|0)&2147483647)>>>0>2139095040|0}function vn(s,l,c){s=s|0,l=l|0,c=c|0;e:do if(n[s+(l<<3)+4>>2]|0)s=s+(l<<3)|0;else{if((l|2|0)==3&&n[s+60>>2]|0){s=s+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[s+52>>2]|0){s=s+48|0;break e}break}default:}if(n[s+68>>2]|0){s=s+64|0;break}else{s=(l|1|0)==5?948:c;break}}while(!1);return s|0}function Mo(s){s=s|0;var l=0;return l=_D(1e3)|0,ua(s,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,br(l|0,8104,1e3)|0,o[s+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=s,l|0}function ua(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,d0(s,5,3197,f)),C=d}function qi(){return Mo(956)|0}function vl(s){s=s|0;var l=0;return l=Yt(1e3)|0,Cc(l,s),ua(n[s+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function Cc(s,l){s=s|0,l=l|0;var c=0;br(s|0,l|0,948)|0,Qd(s+948|0,l+948|0),c=s+960|0,s=l+960|0,l=c+40|0;do n[c>>2]=n[s>>2],c=c+4|0,s=s+4|0;while((c|0)<(l|0))}function Dl(s){s=s|0;var l=0,c=0,f=0,d=0;if(l=s+944|0,c=n[l>>2]|0,c|0&&(Aa(c+948|0,s)|0,n[l>>2]=0),c=Di(s)|0,c|0){l=0;do n[(rs(s,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(c|0))}c=s+948|0,f=n[c>>2]|0,d=s+952|0,l=n[d>>2]|0,(l|0)!=(f|0)&&(n[d>>2]=l+(~((l+-4-f|0)>>>2)<<2)),ja(c),HD(s),n[2276]=(n[2276]|0)+-1}function Aa(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0;f=n[s>>2]|0,k=s+4|0,c=n[k>>2]|0,m=c;e:do if((f|0)==(c|0))d=f,B=4;else for(s=f;;){if((n[s>>2]|0)==(l|0)){d=s,B=4;break e}if(s=s+4|0,(s|0)==(c|0)){s=0;break}}while(!1);return(B|0)==4&&((d|0)!=(c|0)?(f=d+4|0,s=m-f|0,l=s>>2,l&&(rw(d|0,f|0,s|0)|0,c=n[k>>2]|0),s=d+(l<<2)|0,(c|0)==(s|0)||(n[k>>2]=c+(~((c+-4-s|0)>>>2)<<2)),s=1):s=0),s|0}function Di(s){return s=s|0,(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2|0}function rs(s,l){s=s|0,l=l|0;var c=0;return c=n[s+948>>2]|0,(n[s+952>>2]|0)-c>>2>>>0>l>>>0?s=n[c+(l<<2)>>2]|0:s=0,s|0}function ja(s){s=s|0;var l=0,c=0,f=0,d=0;f=C,C=C+32|0,l=f,d=n[s>>2]|0,c=(n[s+4>>2]|0)-d|0,((n[s+8>>2]|0)-d|0)>>>0>c>>>0&&(d=c>>2,Ld(l,d,d,s+8|0),fD(s,l),Nd(l)),C=f}function yu(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0;M=Di(s)|0;do if(M|0){if((n[(rs(s,0)|0)+944>>2]|0)==(s|0)){if(!(Aa(s+948|0,l)|0))break;br(l+400|0,8504,540)|0,n[l+944>>2]=0,Ne(s);break}B=n[(n[s+976>>2]|0)+12>>2]|0,k=s+948|0,F=(B|0)==0,c=0,m=0;do f=n[(n[k>>2]|0)+(m<<2)>>2]|0,(f|0)==(l|0)?Ne(s):(d=vl(f)|0,n[(n[k>>2]|0)+(c<<2)>>2]=d,n[d+944>>2]=s,F||hT[B&15](f,d,s,c),c=c+1|0),m=m+1|0;while((m|0)!=(M|0));if(c>>>0>>0){F=s+948|0,k=s+952|0,B=c,c=n[k>>2]|0;do m=(n[F>>2]|0)+(B<<2)|0,f=m+4|0,d=c-f|0,l=d>>2,l&&(rw(m|0,f|0,d|0)|0,c=n[k>>2]|0),d=c,f=m+(l<<2)|0,(d|0)!=(f|0)&&(c=d+(~((d+-4-f|0)>>>2)<<2)|0,n[k>>2]=c),B=B+1|0;while((B|0)!=(M|0))}}while(!1)}function Sl(s){s=s|0;var l=0,c=0,f=0,d=0;pi(s,(Di(s)|0)==0,2491),pi(s,(n[s+944>>2]|0)==0,2545),l=s+948|0,c=n[l>>2]|0,f=s+952|0,d=n[f>>2]|0,(d|0)!=(c|0)&&(n[f>>2]=d+(~((d+-4-c|0)>>>2)<<2)),ja(l),l=s+976|0,c=n[l>>2]|0,br(s|0,8104,1e3)|0,o[c+2>>0]|0&&(n[s+4>>2]=2,n[s+12>>2]=4),n[l>>2]=c}function pi(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,so(s,5,3197,f)),C=d}function Dn(){return n[2276]|0}function Pl(){var s=0;return s=_D(20)|0,Je((s|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[s>>2]=n[239],n[s+4>>2]=n[240],n[s+8>>2]=n[241],n[s+12>>2]=n[242],n[s+16>>2]=n[243],s|0}function Je(s,l){s=s|0,l=l|0;var c=0,f=0;f=C,C=C+16|0,c=f,s||(n[c>>2]=l,so(0,5,3197,c)),C=f}function st(s){s=s|0,HD(s),n[2277]=(n[2277]|0)+-1}function vt(s,l){s=s|0,l=l|0;var c=0;l?(pi(s,(Di(s)|0)==0,2629),c=1):(c=0,l=0),n[s+964>>2]=l,n[s+988>>2]=c}function ar(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+8|0,d=f+4|0,B=f,n[d>>2]=l,pi(s,(n[l+944>>2]|0)==0,2709),pi(s,(n[s+964>>2]|0)==0,2763),ee(s),l=s+948|0,n[B>>2]=(n[l>>2]|0)+(c<<2),n[m>>2]=n[B>>2],ye(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=s,Ne(s),C=f}function ee(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;if(c=Di(s)|0,c|0&&(n[(rs(s,0)|0)+944>>2]|0)!=(s|0)){f=n[(n[s+976>>2]|0)+12>>2]|0,d=s+948|0,m=(f|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=vl(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=s,m||hT[f&15](B,k,s,l),l=l+1|0;while((l|0)!=(c|0))}}function ye(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0,We=0,Oe=0,Qe=0,rt=0,Xe=0;rt=C,C=C+64|0,j=rt+52|0,k=rt+48|0,oe=rt+28|0,We=rt+24|0,Oe=rt+20|0,Qe=rt,f=n[s>>2]|0,m=f,l=f+((n[l>>2]|0)-m>>2<<2)|0,f=s+4|0,d=n[f>>2]|0,B=s+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[c>>2],n[f>>2]=(n[f>>2]|0)+4;break}pD(s,l,d,l+4|0),l>>>0<=c>>>0&&(c=(n[f>>2]|0)>>>0>c>>>0?c+4|0:c),n[l>>2]=n[c>>2]}else{f=(d-m>>2)+1|0,d=L(s)|0,d>>>0>>0&&Zr(s),O=n[s>>2]|0,M=(n[B>>2]|0)-O|0,m=M>>1,Ld(Qe,M>>2>>>0>>1>>>0?m>>>0>>0?f:m:d,l-O>>2,s+8|0),O=Qe+8|0,f=n[O>>2]|0,m=Qe+12|0,M=n[m>>2]|0,B=M,F=f;do if((f|0)==(M|0)){if(M=Qe+4|0,f=n[M>>2]|0,Xe=n[Qe>>2]|0,d=Xe,f>>>0<=Xe>>>0){f=B-d>>1,f=f|0?f:1,Ld(oe,f,f>>>2,n[Qe+16>>2]|0),n[We>>2]=n[M>>2],n[Oe>>2]=n[O>>2],n[k>>2]=n[We>>2],n[j>>2]=n[Oe>>2],QI(oe,k,j),f=n[Qe>>2]|0,n[Qe>>2]=n[oe>>2],n[oe>>2]=f,f=oe+4|0,Xe=n[M>>2]|0,n[M>>2]=n[f>>2],n[f>>2]=Xe,f=oe+8|0,Xe=n[O>>2]|0,n[O>>2]=n[f>>2],n[f>>2]=Xe,f=oe+12|0,Xe=n[m>>2]|0,n[m>>2]=n[f>>2],n[f>>2]=Xe,Nd(oe),f=n[O>>2]|0;break}m=f,B=((m-d>>2)+1|0)/-2|0,k=f+(B<<2)|0,d=F-m|0,m=d>>2,m&&(rw(k|0,f|0,d|0)|0,f=n[M>>2]|0),Xe=k+(m<<2)|0,n[O>>2]=Xe,n[M>>2]=f+(B<<2),f=Xe}while(!1);n[f>>2]=n[c>>2],n[O>>2]=(n[O>>2]|0)+4,l=hD(s,Qe,l)|0,Nd(Qe)}while(!1);return C=rt,l|0}function Ne(s){s=s|0;var l=0;do{if(l=s+984|0,o[l>>0]|0)break;o[l>>0]=1,h[s+504>>2]=y(ue),s=n[s+944>>2]|0}while(s|0)}function gt(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),yt(c))}function mt(s){return s=s|0,n[s+944>>2]|0}function Dt(s){s=s|0,pi(s,(n[s+964>>2]|0)!=0,2832),Ne(s)}function er(s){return s=s|0,(o[s+984>>0]|0)!=0|0}function sn(s,l){s=s|0,l=l|0,wUe(s,l,400)|0&&(br(s|0,l|0,400)|0,Ne(s))}function ei(s){s=s|0;var l=Ze;return l=y(h[s+44>>2]),s=Ot(l)|0,y(s?y(0):l)}function Qi(s){s=s|0;var l=Ze;return l=y(h[s+48>>2]),Ot(l)|0&&(l=o[(n[s+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function Sn(s,l){s=s|0,l=l|0,n[s+980>>2]=l}function fa(s){return s=s|0,n[s+980>>2]|0}function wd(s,l){s=s|0,l=l|0;var c=0;c=s+4|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function BI(s){return s=s|0,n[s+4>>2]|0}function eo(s,l){s=s|0,l=l|0;var c=0;c=s+8|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function Bd(s){return s=s|0,n[s+8>>2]|0}function cp(s,l){s=s|0,l=l|0;var c=0;c=s+12|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function vI(s){return s=s|0,n[s+12>>2]|0}function to(s,l){s=s|0,l=l|0;var c=0;c=s+16|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function up(s){return s=s|0,n[s+16>>2]|0}function Ap(s,l){s=s|0,l=l|0;var c=0;c=s+20|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function Ic(s){return s=s|0,n[s+20>>2]|0}function fp(s,l){s=s|0,l=l|0;var c=0;c=s+24|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function s0(s){return s=s|0,n[s+24>>2]|0}function o0(s,l){s=s|0,l=l|0;var c=0;c=s+28|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function a0(s){return s=s|0,n[s+28>>2]|0}function vd(s,l){s=s|0,l=l|0;var c=0;c=s+32|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function Eu(s){return s=s|0,n[s+32>>2]|0}function ro(s,l){s=s|0,l=l|0;var c=0;c=s+36|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Ne(s))}function Ga(s){return s=s|0,n[s+36>>2]|0}function pp(s,l){s=s|0,l=y(l);var c=0;c=s+40|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function l0(s,l){s=s|0,l=y(l);var c=0;c=s+44|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function Wa(s,l){s=s|0,l=y(l);var c=0;c=s+48|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function Ya(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ot(l)|0,c=(m^1)&1,f=s+52|0,d=s+56|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function Dd(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+52|0,c=s+56|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=Ot(l)|0,n[c>>2]=f?3:2,Ne(s))}function LA(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+52|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Sd(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ot(c)|0,f=(m^1)&1,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Pd(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ot(c)|0,f=m?0:2,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function NA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+132+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function OA(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ot(c)|0,f=(m^1)&1,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function W(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ot(c)|0,f=m?0:2,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function xt(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+60+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function MA(s,l){s=s|0,l=l|0;var c=0;c=s+60+(l<<3)+4|0,(n[c>>2]|0)!=3&&(h[s+60+(l<<3)>>2]=y(ue),n[c>>2]=3,Ne(s))}function no(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ot(c)|0,f=(m^1)&1,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function Cu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ot(c)|0,f=m?0:2,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function dt(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+204+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function wc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=Ot(c)|0,f=(m^1)&1,d=s+276+(l<<3)|0,l=s+276+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Ne(s))}function xd(s,l){return s=s|0,l=l|0,y(h[s+276+(l<<3)>>2])}function c0(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ot(l)|0,c=(m^1)&1,f=s+348|0,d=s+352|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function DI(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+348|0,c=s+352|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=Ot(l)|0,n[c>>2]=f?3:2,Ne(s))}function hp(s){s=s|0;var l=0;l=s+352|0,(n[l>>2]|0)!=3&&(h[s+348>>2]=y(ue),n[l>>2]=3,Ne(s))}function cr(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+348|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Ni(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ot(l)|0,c=(m^1)&1,f=s+356|0,d=s+360|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function Iu(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+356|0,c=s+360|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=Ot(l)|0,n[c>>2]=f?3:2,Ne(s))}function pa(s){s=s|0;var l=0;l=s+360|0,(n[l>>2]|0)!=3&&(h[s+356>>2]=y(ue),n[l>>2]=3,Ne(s))}function u0(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+356|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Bc(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ot(l)|0,c=(m^1)&1,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function wu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ot(l)|0,c=m?0:2,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function wt(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+364|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function oi(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ot(l)|0,c=(m^1)&1,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function UA(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ot(l)|0,c=m?0:2,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function ha(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+372|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Uo(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ot(l)|0,c=(m^1)&1,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function ga(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ot(l)|0,c=m?0:2,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function A0(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+380|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function gp(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ot(l)|0,c=(m^1)&1,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function f0(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=Ot(l)|0,c=m?0:2,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Ne(s))}function bd(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+388|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function _A(s,l){s=s|0,l=y(l);var c=0;c=s+396|0,y(h[c>>2])!=l&&(h[c>>2]=l,Ne(s))}function p0(s){return s=s|0,y(h[s+396>>2])}function vc(s){return s=s|0,y(h[s+400>>2])}function Dc(s){return s=s|0,y(h[s+404>>2])}function Bu(s){return s=s|0,y(h[s+408>>2])}function gs(s){return s=s|0,y(h[s+412>>2])}function Sc(s){return s=s|0,y(h[s+416>>2])}function On(s){return s=s|0,y(h[s+420>>2])}function ji(s,l){switch(s=s|0,l=l|0,pi(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+424+(l<<2)>>2])}function Ci(s,l){switch(s=s|0,l=l|0,pi(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+448+(l<<2)>>2])}function HA(s,l){switch(s=s|0,l=l|0,pi(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+472+(l<<2)>>2])}function vu(s,l){s=s|0,l=l|0;var c=0,f=Ze;return c=n[s+4>>2]|0,(c|0)==(n[l+4>>2]|0)?c?(f=y(h[s>>2]),s=y(ie(y(f-y(h[l>>2]))))>2]=0,n[f+4>>2]=0,n[f+8>>2]=0,dc(f|0,s|0,l|0,0),so(s,3,(o[f+11>>0]|0)<0?n[f>>2]|0:f,c),WUe(f),C=c}function Gi(s,l,c,f){s=y(s),l=y(l),c=c|0,f=f|0;var d=Ze;s=y(s*l),d=y(lT(s,y(1)));do if(An(d,y(0))|0)s=y(s-d);else{if(s=y(s-d),An(d,y(1))|0){s=y(s+y(1));break}if(c){s=y(s+y(1));break}f||(d>y(.5)?d=y(1):(f=An(d,y(.5))|0,d=y(f?1:0)),s=y(s+d))}while(!1);return y(s/l)}function Va(s,l,c,f,d,m,B,k,F,M,O,j,oe){s=s|0,l=y(l),c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,k=y(k),F=y(F),M=y(M),O=y(O),j=y(j),oe=oe|0;var We=0,Oe=Ze,Qe=Ze,rt=Ze,Xe=Ze,ct=Ze,_e=Ze;return F>2]),Oe!=y(0))?(rt=y(Gi(l,Oe,0,0)),Xe=y(Gi(f,Oe,0,0)),Qe=y(Gi(m,Oe,0,0)),Oe=y(Gi(k,Oe,0,0))):(Qe=m,rt=l,Oe=k,Xe=f),(d|0)==(s|0)?We=An(Qe,rt)|0:We=0,(B|0)==(c|0)?oe=An(Oe,Xe)|0:oe=0,!We&&(ct=y(l-O),!(io(s,ct,F)|0))&&!(Du(s,ct,d,F)|0)?We=Su(s,ct,d,m,F)|0:We=1,!oe&&(_e=y(f-j),!(io(c,_e,M)|0))&&!(Du(c,_e,B,M)|0)?oe=Su(c,_e,B,k,M)|0:oe=1,oe=We&oe),oe|0}function io(s,l,c){return s=s|0,l=y(l),c=y(c),(s|0)==1?s=An(l,c)|0:s=0,s|0}function Du(s,l,c,f){return s=s|0,l=y(l),c=c|0,f=y(f),(s|0)==2&(c|0)==0?l>=f?s=1:s=An(l,f)|0:s=0,s|0}function Su(s,l,c,f,d){return s=s|0,l=y(l),c=c|0,f=y(f),d=y(d),(s|0)==2&(c|0)==2&f>l?d<=l?s=1:s=An(l,d)|0:s=0,s|0}function Ka(s,l,c,f,d,m,B,k,F,M,O){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),F=F|0,M=M|0,O=O|0;var j=0,oe=0,We=0,Oe=0,Qe=Ze,rt=Ze,Xe=0,ct=0,_e=0,Ge=0,Nt=0,_r=0,ur=0,Zt=0,kr=0,Or=0,lr=0,Ln=Ze,lo=Ze,co=Ze,uo=0,Ia=0;lr=C,C=C+160|0,Zt=lr+152|0,ur=lr+120|0,_r=lr+104|0,_e=lr+72|0,Oe=lr+56|0,Nt=lr+8|0,ct=lr,Ge=(n[2279]|0)+1|0,n[2279]=Ge,kr=s+984|0,o[kr>>0]|0&&(n[s+512>>2]|0)!=(n[2278]|0)?Xe=4:(n[s+516>>2]|0)==(f|0)?Or=0:Xe=4,(Xe|0)==4&&(n[s+520>>2]=0,n[s+924>>2]=-1,n[s+928>>2]=-1,h[s+932>>2]=y(-1),h[s+936>>2]=y(-1),Or=1);e:do if(n[s+964>>2]|0)if(Qe=y(fn(s,2,B)),rt=y(fn(s,0,B)),j=s+916|0,co=y(h[j>>2]),lo=y(h[s+920>>2]),Ln=y(h[s+932>>2]),Va(d,l,m,c,n[s+924>>2]|0,co,n[s+928>>2]|0,lo,Ln,y(h[s+936>>2]),Qe,rt,O)|0)Xe=22;else if(We=n[s+520>>2]|0,!We)Xe=21;else for(oe=0;;){if(j=s+524+(oe*24|0)|0,Ln=y(h[j>>2]),lo=y(h[s+524+(oe*24|0)+4>>2]),co=y(h[s+524+(oe*24|0)+16>>2]),Va(d,l,m,c,n[s+524+(oe*24|0)+8>>2]|0,Ln,n[s+524+(oe*24|0)+12>>2]|0,lo,co,y(h[s+524+(oe*24|0)+20>>2]),Qe,rt,O)|0){Xe=22;break e}if(oe=oe+1|0,oe>>>0>=We>>>0){Xe=21;break}}else{if(F){if(j=s+916|0,!(An(y(h[j>>2]),l)|0)){Xe=21;break}if(!(An(y(h[s+920>>2]),c)|0)){Xe=21;break}if((n[s+924>>2]|0)!=(d|0)){Xe=21;break}j=(n[s+928>>2]|0)==(m|0)?j:0,Xe=22;break}if(We=n[s+520>>2]|0,!We)Xe=21;else for(oe=0;;){if(j=s+524+(oe*24|0)|0,An(y(h[j>>2]),l)|0&&An(y(h[s+524+(oe*24|0)+4>>2]),c)|0&&(n[s+524+(oe*24|0)+8>>2]|0)==(d|0)&&(n[s+524+(oe*24|0)+12>>2]|0)==(m|0)){Xe=22;break e}if(oe=oe+1|0,oe>>>0>=We>>>0){Xe=21;break}}}while(!1);do if((Xe|0)==21)o[11697]|0?(j=0,Xe=28):(j=0,Xe=31);else if((Xe|0)==22){if(oe=(o[11697]|0)!=0,!((j|0)!=0&(Or^1)))if(oe){Xe=28;break}else{Xe=31;break}Oe=j+16|0,n[s+908>>2]=n[Oe>>2],We=j+20|0,n[s+912>>2]=n[We>>2],(o[11698]|0)==0|oe^1||(n[ct>>2]=Pc(Ge)|0,n[ct+4>>2]=Ge,so(s,4,2972,ct),oe=n[s+972>>2]|0,oe|0&&ef[oe&127](s),d=_o(d,F)|0,m=_o(m,F)|0,Ia=+y(h[Oe>>2]),uo=+y(h[We>>2]),n[Nt>>2]=d,n[Nt+4>>2]=m,E[Nt+8>>3]=+l,E[Nt+16>>3]=+c,E[Nt+24>>3]=Ia,E[Nt+32>>3]=uo,n[Nt+40>>2]=M,so(s,4,2989,Nt))}while(!1);return(Xe|0)==28&&(oe=Pc(Ge)|0,n[Oe>>2]=oe,n[Oe+4>>2]=Ge,n[Oe+8>>2]=Or?3047:11699,so(s,4,3038,Oe),oe=n[s+972>>2]|0,oe|0&&ef[oe&127](s),Nt=_o(d,F)|0,Xe=_o(m,F)|0,n[_e>>2]=Nt,n[_e+4>>2]=Xe,E[_e+8>>3]=+l,E[_e+16>>3]=+c,n[_e+24>>2]=M,so(s,4,3049,_e),Xe=31),(Xe|0)==31&&(ds(s,l,c,f,d,m,B,k,F,O),o[11697]|0&&(oe=n[2279]|0,Nt=Pc(oe)|0,n[_r>>2]=Nt,n[_r+4>>2]=oe,n[_r+8>>2]=Or?3047:11699,so(s,4,3083,_r),oe=n[s+972>>2]|0,oe|0&&ef[oe&127](s),Nt=_o(d,F)|0,_r=_o(m,F)|0,uo=+y(h[s+908>>2]),Ia=+y(h[s+912>>2]),n[ur>>2]=Nt,n[ur+4>>2]=_r,E[ur+8>>3]=uo,E[ur+16>>3]=Ia,n[ur+24>>2]=M,so(s,4,3092,ur)),n[s+516>>2]=f,j||(oe=s+520|0,j=n[oe>>2]|0,(j|0)==16&&(o[11697]|0&&so(s,4,3124,Zt),n[oe>>2]=0,j=0),F?j=s+916|0:(n[oe>>2]=j+1,j=s+524+(j*24|0)|0),h[j>>2]=l,h[j+4>>2]=c,n[j+8>>2]=d,n[j+12>>2]=m,n[j+16>>2]=n[s+908>>2],n[j+20>>2]=n[s+912>>2],j=0)),F&&(n[s+416>>2]=n[s+908>>2],n[s+420>>2]=n[s+912>>2],o[s+985>>0]=1,o[kr>>0]=0),n[2279]=(n[2279]|0)+-1,n[s+512>>2]=n[2278],C=lr,Or|(j|0)==0|0}function fn(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(K(s,l,c)),y(f+y(re(s,l,c)))}function so(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=C,C=C+16|0,d=m,n[d>>2]=f,s?f=n[s+976>>2]|0:f=0,yp(f,s,l,c,d),C=m}function Pc(s){return s=s|0,(s>>>0>60?3201:3201+(60-s)|0)|0}function _o(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+32|0,c=d+12|0,f=d,n[c>>2]=n[254],n[c+4>>2]=n[255],n[c+8>>2]=n[256],n[f>>2]=n[257],n[f+4>>2]=n[258],n[f+8>>2]=n[259],(s|0)>2?s=11699:s=n[(l?f:c)+(s<<2)>>2]|0,C=d,s|0}function ds(s,l,c,f,d,m,B,k,F,M){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),F=F|0,M=M|0;var O=0,j=0,oe=0,We=0,Oe=Ze,Qe=Ze,rt=Ze,Xe=Ze,ct=Ze,_e=Ze,Ge=Ze,Nt=0,_r=0,ur=0,Zt=Ze,kr=Ze,Or=0,lr=Ze,Ln=0,lo=0,co=0,uo=0,Ia=0,Lp=0,Np=0,kl=0,Op=0,Nu=0,Ou=0,Mp=0,Up=0,_p=0,$r=0,Ql=0,Hp=0,Lc=0,qp=Ze,jp=Ze,Mu=Ze,Uu=Ze,Nc=Ze,Ms=0,rl=0,Go=0,Fl=0,rf=0,nf=Ze,_u=Ze,sf=Ze,of=Ze,Us=Ze,Cs=Ze,Rl=0,Un=Ze,af=Ze,Ao=Ze,Oc=Ze,fo=Ze,Mc=Ze,lf=0,cf=0,Uc=Ze,_s=Ze,Tl=0,uf=0,Af=0,ff=0,Fr=Ze,ri=0,Is=0,po=0,Hs=0,Lr=0,Ar=0,Ll=0,Kt=Ze,pf=0,hi=0;Ll=C,C=C+16|0,Ms=Ll+12|0,rl=Ll+8|0,Go=Ll+4|0,Fl=Ll,pi(s,(d|0)==0|(Ot(l)|0)^1,3326),pi(s,(m|0)==0|(Ot(c)|0)^1,3406),Is=At(s,f)|0,n[s+496>>2]=Is,Lr=hr(2,Is)|0,Ar=hr(0,Is)|0,h[s+440>>2]=y(K(s,Lr,B)),h[s+444>>2]=y(re(s,Lr,B)),h[s+428>>2]=y(K(s,Ar,B)),h[s+436>>2]=y(re(s,Ar,B)),h[s+464>>2]=y(Ir(s,Lr)),h[s+468>>2]=y(Rn(s,Lr)),h[s+452>>2]=y(Ir(s,Ar)),h[s+460>>2]=y(Rn(s,Ar)),h[s+488>>2]=y(ai(s,Lr,B)),h[s+492>>2]=y(ns(s,Lr,B)),h[s+476>>2]=y(ai(s,Ar,B)),h[s+484>>2]=y(ns(s,Ar,B));do if(n[s+964>>2]|0)GA(s,l,c,d,m,B,k);else{if(po=s+948|0,Hs=(n[s+952>>2]|0)-(n[po>>2]|0)>>2,!Hs){lD(s,l,c,d,m,B,k);break}if(!F&&SI(s,l,c,d,m,B,k)|0)break;ee(s),Ql=s+508|0,o[Ql>>0]=0,Lr=hr(n[s+4>>2]|0,Is)|0,Ar=Fd(Lr,Is)|0,ri=ge(Lr)|0,Hp=n[s+8>>2]|0,uf=s+28|0,Lc=(n[uf>>2]|0)!=0,fo=ri?B:k,Uc=ri?k:B,qp=y(Cp(s,Lr,B)),jp=y(PI(s,Lr,B)),Oe=y(Cp(s,Ar,B)),Mc=y(da(s,Lr,B)),_s=y(da(s,Ar,B)),ur=ri?d:m,Tl=ri?m:d,Fr=ri?Mc:_s,ct=ri?_s:Mc,Oc=y(fn(s,2,B)),Xe=y(fn(s,0,B)),Qe=y(y(Vr(s+364|0,B))-Fr),rt=y(y(Vr(s+380|0,B))-Fr),_e=y(y(Vr(s+372|0,k))-ct),Ge=y(y(Vr(s+388|0,k))-ct),Mu=ri?Qe:_e,Uu=ri?rt:Ge,Oc=y(l-Oc),l=y(Oc-Fr),Ot(l)|0?Fr=l:Fr=y(Yn(y(M0(l,rt)),Qe)),af=y(c-Xe),l=y(af-ct),Ot(l)|0?Ao=l:Ao=y(Yn(y(M0(l,Ge)),_e)),Qe=ri?Fr:Ao,Un=ri?Ao:Fr;e:do if((ur|0)==1)for(f=0,j=0;;){if(O=rs(s,j)|0,!f)y(WA(O))>y(0)&&y(Ip(O))>y(0)?f=O:f=0;else if(xI(O)|0){We=0;break e}if(j=j+1|0,j>>>0>=Hs>>>0){We=f;break}}else We=0;while(!1);Nt=We+500|0,_r=We+504|0,f=0,O=0,l=y(0),oe=0;do{if(j=n[(n[po>>2]|0)+(oe<<2)>>2]|0,(n[j+36>>2]|0)==1)Rd(j),o[j+985>>0]=1,o[j+984>>0]=0;else{Pu(j),F&&mp(j,At(j,Is)|0,Qe,Un,Fr);do if((n[j+24>>2]|0)!=1)if((j|0)==(We|0)){n[Nt>>2]=n[2278],h[_r>>2]=y(0);break}else{cD(s,j,Fr,d,Ao,Fr,Ao,m,Is,M);break}else O|0&&(n[O+960>>2]=j),n[j+960>>2]=0,O=j,f=f|0?f:j;while(!1);Cs=y(h[j+504>>2]),l=y(l+y(Cs+y(fn(j,Lr,Fr))))}oe=oe+1|0}while((oe|0)!=(Hs|0));for(co=l>Qe,Rl=Lc&((ur|0)==2&co)?1:ur,Ln=(Tl|0)==1,Ia=Ln&(F^1),Lp=(Rl|0)==1,Np=(Rl|0)==2,kl=976+(Lr<<2)|0,Op=(Tl|2|0)==2,_p=Ln&(Lc^1),Nu=1040+(Ar<<2)|0,Ou=1040+(Lr<<2)|0,Mp=976+(Ar<<2)|0,Up=(Tl|0)!=1,co=Lc&((ur|0)!=0&co),lo=s+976|0,Ln=Ln^1,l=Qe,Or=0,uo=0,Cs=y(0),Nc=y(0);;){e:do if(Or>>>0>>0)for(_r=n[po>>2]|0,oe=0,Ge=y(0),_e=y(0),rt=y(0),Qe=y(0),j=0,O=0,We=Or;;){if(Nt=n[_r+(We<<2)>>2]|0,(n[Nt+36>>2]|0)!=1&&(n[Nt+940>>2]=uo,(n[Nt+24>>2]|0)!=1)){if(Xe=y(fn(Nt,Lr,Fr)),$r=n[kl>>2]|0,c=y(Vr(Nt+380+($r<<3)|0,fo)),ct=y(h[Nt+504>>2]),c=y(M0(c,ct)),c=y(Yn(y(Vr(Nt+364+($r<<3)|0,fo)),c)),Lc&(oe|0)!=0&y(Xe+y(_e+c))>l){m=oe,Xe=Ge,ur=We;break e}Xe=y(Xe+c),c=y(_e+Xe),Xe=y(Ge+Xe),xI(Nt)|0&&(rt=y(rt+y(WA(Nt))),Qe=y(Qe-y(ct*y(Ip(Nt))))),O|0&&(n[O+960>>2]=Nt),n[Nt+960>>2]=0,oe=oe+1|0,O=Nt,j=j|0?j:Nt}else Xe=Ge,c=_e;if(We=We+1|0,We>>>0>>0)Ge=Xe,_e=c;else{m=oe,ur=We;break}}else m=0,Xe=y(0),rt=y(0),Qe=y(0),j=0,ur=Or;while(!1);$r=rt>y(0)&rty(0)&QeUu&((Ot(Uu)|0)^1))l=Uu,$r=51;else if(o[(n[lo>>2]|0)+3>>0]|0)$r=51;else{if(Zt!=y(0)&&y(WA(s))!=y(0)){$r=53;break}l=Xe,$r=53}while(!1);if(($r|0)==51&&($r=0,Ot(l)|0?$r=53:(kr=y(l-Xe),lr=l)),($r|0)==53&&($r=0,Xe>2]|0,We=kry(0),_e=y(kr/Zt),rt=y(0),Xe=y(0),l=y(0),O=j;do c=y(Vr(O+380+(oe<<3)|0,fo)),Qe=y(Vr(O+364+(oe<<3)|0,fo)),Qe=y(M0(c,y(Yn(Qe,y(h[O+504>>2]))))),We?(c=y(Qe*y(Ip(O))),c!=y(-0)&&(Kt=y(Qe-y(ct*c)),nf=y(Mn(O,Lr,Kt,lr,Fr)),Kt!=nf)&&(rt=y(rt-y(nf-Qe)),l=y(l+c))):Nt&&(_u=y(WA(O)),_u!=y(0))&&(Kt=y(Qe+y(_e*_u)),sf=y(Mn(O,Lr,Kt,lr,Fr)),Kt!=sf)&&(rt=y(rt-y(sf-Qe)),Xe=y(Xe-_u)),O=n[O+960>>2]|0;while(O|0);if(l=y(Ge+l),Qe=y(kr+rt),rf)l=y(0);else{ct=y(Zt+Xe),We=n[kl>>2]|0,Nt=Qey(0),ct=y(Qe/ct),l=y(0);do{Kt=y(Vr(j+380+(We<<3)|0,fo)),rt=y(Vr(j+364+(We<<3)|0,fo)),rt=y(M0(Kt,y(Yn(rt,y(h[j+504>>2]))))),Nt?(Kt=y(rt*y(Ip(j))),Qe=y(-Kt),Kt!=y(-0)?(Kt=y(_e*Qe),Qe=y(Mn(j,Lr,y(rt+(_r?Qe:Kt)),lr,Fr))):Qe=rt):oe&&(of=y(WA(j)),of!=y(0))?Qe=y(Mn(j,Lr,y(rt+y(ct*of)),lr,Fr)):Qe=rt,l=y(l-y(Qe-rt)),Xe=y(fn(j,Lr,Fr)),c=y(fn(j,Ar,Fr)),Qe=y(Qe+Xe),h[rl>>2]=Qe,n[Fl>>2]=1,rt=y(h[j+396>>2]);e:do if(Ot(rt)|0){O=Ot(Un)|0;do if(!O){if(co|(Ns(j,Ar,Un)|0|Ln)||(Wi(s,j)|0)!=4||(n[(Ja(j,Ar)|0)+4>>2]|0)==3||(n[(za(j,Ar)|0)+4>>2]|0)==3)break;h[Ms>>2]=Un,n[Go>>2]=1;break e}while(!1);if(Ns(j,Ar,Un)|0){O=n[j+992+(n[Mp>>2]<<2)>>2]|0,Kt=y(c+y(Vr(O,Un))),h[Ms>>2]=Kt,O=Up&(n[O+4>>2]|0)==2,n[Go>>2]=((Ot(Kt)|0|O)^1)&1;break}else{h[Ms>>2]=Un,n[Go>>2]=O?0:2;break}}else Kt=y(Qe-Xe),Zt=y(Kt/rt),Kt=y(rt*Kt),n[Go>>2]=1,h[Ms>>2]=y(c+(ri?Zt:Kt));while(!1);xc(j,Lr,lr,Fr,Fl,rl),xc(j,Ar,Un,Fr,Go,Ms);do if(!(Ns(j,Ar,Un)|0)&&(Wi(s,j)|0)==4){if((n[(Ja(j,Ar)|0)+4>>2]|0)==3){O=0;break}O=(n[(za(j,Ar)|0)+4>>2]|0)!=3}else O=0;while(!1);Kt=y(h[rl>>2]),Zt=y(h[Ms>>2]),pf=n[Fl>>2]|0,hi=n[Go>>2]|0,Ka(j,ri?Kt:Zt,ri?Zt:Kt,Is,ri?pf:hi,ri?hi:pf,Fr,Ao,F&(O^1),3488,M)|0,o[Ql>>0]=o[Ql>>0]|o[j+508>>0],j=n[j+960>>2]|0}while(j|0)}}else l=y(0);if(l=y(kr+l),hi=l>0]=hi|u[Ql>>0],Np&l>y(0)?(O=n[kl>>2]|0,n[s+364+(O<<3)+4>>2]|0&&(Us=y(Vr(s+364+(O<<3)|0,fo)),Us>=y(0))?Qe=y(Yn(y(0),y(Us-y(lr-l)))):Qe=y(0)):Qe=l,Nt=Or>>>0>>0,Nt){We=n[po>>2]|0,oe=Or,O=0;do j=n[We+(oe<<2)>>2]|0,n[j+24>>2]|0||(O=((n[(Ja(j,Lr)|0)+4>>2]|0)==3&1)+O|0,O=O+((n[(za(j,Lr)|0)+4>>2]|0)==3&1)|0),oe=oe+1|0;while((oe|0)!=(ur|0));O?(Xe=y(0),c=y(0)):$r=101}else $r=101;e:do if(($r|0)==101)switch($r=0,Hp|0){case 1:{O=0,Xe=y(Qe*y(.5)),c=y(0);break e}case 2:{O=0,Xe=Qe,c=y(0);break e}case 3:{if(m>>>0<=1){O=0,Xe=y(0),c=y(0);break e}c=y((m+-1|0)>>>0),O=0,Xe=y(0),c=y(y(Yn(Qe,y(0)))/c);break e}case 5:{c=y(Qe/y((m+1|0)>>>0)),O=0,Xe=c;break e}case 4:{c=y(Qe/y(m>>>0)),O=0,Xe=y(c*y(.5));break e}default:{O=0,Xe=y(0),c=y(0);break e}}while(!1);if(l=y(qp+Xe),Nt){rt=y(Qe/y(O|0)),oe=n[po>>2]|0,j=Or,Qe=y(0);do{O=n[oe+(j<<2)>>2]|0;e:do if((n[O+36>>2]|0)!=1){switch(n[O+24>>2]|0){case 1:{if(Ho(O,Lr)|0){if(!F)break e;Kt=y(YA(O,Lr,lr)),Kt=y(Kt+y(Ir(s,Lr))),Kt=y(Kt+y(K(O,Lr,Fr))),h[O+400+(n[Ou>>2]<<2)>>2]=Kt;break e}break}case 0:if(hi=(n[(Ja(O,Lr)|0)+4>>2]|0)==3,Kt=y(rt+l),l=hi?Kt:l,F&&(hi=O+400+(n[Ou>>2]<<2)|0,h[hi>>2]=y(l+y(h[hi>>2]))),hi=(n[(za(O,Lr)|0)+4>>2]|0)==3,Kt=y(rt+l),l=hi?Kt:l,Ia){Kt=y(c+y(fn(O,Lr,Fr))),Qe=Un,l=y(l+y(Kt+y(h[O+504>>2])));break e}else{l=y(l+y(c+y(VA(O,Lr,Fr)))),Qe=y(Yn(Qe,y(VA(O,Ar,Fr))));break e}default:}F&&(Kt=y(Xe+y(Ir(s,Lr))),hi=O+400+(n[Ou>>2]<<2)|0,h[hi>>2]=y(Kt+y(h[hi>>2])))}while(!1);j=j+1|0}while((j|0)!=(ur|0))}else Qe=y(0);if(c=y(jp+l),Op?Xe=y(y(Mn(s,Ar,y(_s+Qe),Uc,B))-_s):Xe=Un,rt=y(y(Mn(s,Ar,y(_s+(_p?Un:Qe)),Uc,B))-_s),Nt&F){j=Or;do{oe=n[(n[po>>2]|0)+(j<<2)>>2]|0;do if((n[oe+36>>2]|0)!=1){if((n[oe+24>>2]|0)==1){if(Ho(oe,Ar)|0){if(Kt=y(YA(oe,Ar,Un)),Kt=y(Kt+y(Ir(s,Ar))),Kt=y(Kt+y(K(oe,Ar,Fr))),O=n[Nu>>2]|0,h[oe+400+(O<<2)>>2]=Kt,!(Ot(Kt)|0))break}else O=n[Nu>>2]|0;Kt=y(Ir(s,Ar)),h[oe+400+(O<<2)>>2]=y(Kt+y(K(oe,Ar,Fr)));break}O=Wi(s,oe)|0;do if((O|0)==4){if((n[(Ja(oe,Ar)|0)+4>>2]|0)==3){$r=139;break}if((n[(za(oe,Ar)|0)+4>>2]|0)==3){$r=139;break}if(Ns(oe,Ar,Un)|0){l=Oe;break}pf=n[oe+908+(n[kl>>2]<<2)>>2]|0,n[Ms>>2]=pf,l=y(h[oe+396>>2]),hi=Ot(l)|0,Qe=(n[D>>2]=pf,y(h[D>>2])),hi?l=rt:(kr=y(fn(oe,Ar,Fr)),Kt=y(Qe/l),l=y(l*Qe),l=y(kr+(ri?Kt:l))),h[rl>>2]=l,h[Ms>>2]=y(y(fn(oe,Lr,Fr))+Qe),n[Go>>2]=1,n[Fl>>2]=1,xc(oe,Lr,lr,Fr,Go,Ms),xc(oe,Ar,Un,Fr,Fl,rl),l=y(h[Ms>>2]),kr=y(h[rl>>2]),Kt=ri?l:kr,l=ri?kr:l,hi=((Ot(Kt)|0)^1)&1,Ka(oe,Kt,l,Is,hi,((Ot(l)|0)^1)&1,Fr,Ao,1,3493,M)|0,l=Oe}else $r=139;while(!1);e:do if(($r|0)==139){$r=0,l=y(Xe-y(VA(oe,Ar,Fr)));do if((n[(Ja(oe,Ar)|0)+4>>2]|0)==3){if((n[(za(oe,Ar)|0)+4>>2]|0)!=3)break;l=y(Oe+y(Yn(y(0),y(l*y(.5)))));break e}while(!1);if((n[(za(oe,Ar)|0)+4>>2]|0)==3){l=Oe;break}if((n[(Ja(oe,Ar)|0)+4>>2]|0)==3){l=y(Oe+y(Yn(y(0),l)));break}switch(O|0){case 1:{l=Oe;break e}case 2:{l=y(Oe+y(l*y(.5)));break e}default:{l=y(Oe+l);break e}}}while(!1);Kt=y(Cs+l),hi=oe+400+(n[Nu>>2]<<2)|0,h[hi>>2]=y(Kt+y(h[hi>>2]))}while(!1);j=j+1|0}while((j|0)!=(ur|0))}if(Cs=y(Cs+rt),Nc=y(Yn(Nc,c)),m=uo+1|0,ur>>>0>=Hs>>>0)break;l=lr,Or=ur,uo=m}do if(F){if(O=m>>>0>1,!O&&!(HF(s)|0))break;if(!(Ot(Un)|0)){l=y(Un-Cs);e:do switch(n[s+12>>2]|0){case 3:{Oe=y(Oe+l),_e=y(0);break}case 2:{Oe=y(Oe+y(l*y(.5))),_e=y(0);break}case 4:{Un>Cs?_e=y(l/y(m>>>0)):_e=y(0);break}case 7:if(Un>Cs){Oe=y(Oe+y(l/y(m<<1>>>0))),_e=y(l/y(m>>>0)),_e=O?_e:y(0);break e}else{Oe=y(Oe+y(l*y(.5))),_e=y(0);break e}case 6:{_e=y(l/y(uo>>>0)),_e=Un>Cs&O?_e:y(0);break}default:_e=y(0)}while(!1);if(m|0)for(Nt=1040+(Ar<<2)|0,_r=976+(Ar<<2)|0,We=0,j=0;;){e:do if(j>>>0>>0)for(Qe=y(0),rt=y(0),l=y(0),oe=j;;){O=n[(n[po>>2]|0)+(oe<<2)>>2]|0;do if((n[O+36>>2]|0)!=1&&!(n[O+24>>2]|0)){if((n[O+940>>2]|0)!=(We|0))break e;if(qF(O,Ar)|0&&(Kt=y(h[O+908+(n[_r>>2]<<2)>>2]),l=y(Yn(l,y(Kt+y(fn(O,Ar,Fr)))))),(Wi(s,O)|0)!=5)break;Us=y(m0(O)),Us=y(Us+y(K(O,0,Fr))),Kt=y(h[O+912>>2]),Kt=y(y(Kt+y(fn(O,0,Fr)))-Us),Us=y(Yn(rt,Us)),Kt=y(Yn(Qe,Kt)),Qe=Kt,rt=Us,l=y(Yn(l,y(Us+Kt)))}while(!1);if(O=oe+1|0,O>>>0>>0)oe=O;else{oe=O;break}}else rt=y(0),l=y(0),oe=j;while(!1);if(ct=y(_e+l),c=Oe,Oe=y(Oe+ct),j>>>0>>0){Xe=y(c+rt),O=j;do{j=n[(n[po>>2]|0)+(O<<2)>>2]|0;e:do if((n[j+36>>2]|0)!=1&&!(n[j+24>>2]|0))switch(Wi(s,j)|0){case 1:{Kt=y(c+y(K(j,Ar,Fr))),h[j+400+(n[Nt>>2]<<2)>>2]=Kt;break e}case 3:{Kt=y(y(Oe-y(re(j,Ar,Fr)))-y(h[j+908+(n[_r>>2]<<2)>>2])),h[j+400+(n[Nt>>2]<<2)>>2]=Kt;break e}case 2:{Kt=y(c+y(y(ct-y(h[j+908+(n[_r>>2]<<2)>>2]))*y(.5))),h[j+400+(n[Nt>>2]<<2)>>2]=Kt;break e}case 4:{if(Kt=y(c+y(K(j,Ar,Fr))),h[j+400+(n[Nt>>2]<<2)>>2]=Kt,Ns(j,Ar,Un)|0||(ri?(Qe=y(h[j+908>>2]),l=y(Qe+y(fn(j,Lr,Fr))),rt=ct):(rt=y(h[j+912>>2]),rt=y(rt+y(fn(j,Ar,Fr))),l=ct,Qe=y(h[j+908>>2])),An(l,Qe)|0&&An(rt,y(h[j+912>>2]))|0))break e;Ka(j,l,rt,Is,1,1,Fr,Ao,1,3501,M)|0;break e}case 5:{h[j+404>>2]=y(y(Xe-y(m0(j)))+y(YA(j,0,Un)));break e}default:break e}while(!1);O=O+1|0}while((O|0)!=(oe|0))}if(We=We+1|0,(We|0)==(m|0))break;j=oe}}}while(!1);if(h[s+908>>2]=y(Mn(s,2,Oc,B,B)),h[s+912>>2]=y(Mn(s,0,af,k,B)),Rl|0&&(lf=n[s+32>>2]|0,cf=(Rl|0)==2,!(cf&(lf|0)!=2))?cf&(lf|0)==2&&(l=y(Mc+lr),l=y(Yn(y(M0(l,y(y0(s,Lr,Nc,fo)))),Mc)),$r=198):(l=y(Mn(s,Lr,Nc,fo,B)),$r=198),($r|0)==198&&(h[s+908+(n[976+(Lr<<2)>>2]<<2)>>2]=l),Tl|0&&(Af=n[s+32>>2]|0,ff=(Tl|0)==2,!(ff&(Af|0)!=2))?ff&(Af|0)==2&&(l=y(_s+Un),l=y(Yn(y(M0(l,y(y0(s,Ar,y(_s+Cs),Uc)))),_s)),$r=204):(l=y(Mn(s,Ar,y(_s+Cs),Uc,B)),$r=204),($r|0)==204&&(h[s+908+(n[976+(Ar<<2)>>2]<<2)>>2]=l),F){if((n[uf>>2]|0)==2){j=976+(Ar<<2)|0,oe=1040+(Ar<<2)|0,O=0;do We=rs(s,O)|0,n[We+24>>2]|0||(pf=n[j>>2]|0,Kt=y(h[s+908+(pf<<2)>>2]),hi=We+400+(n[oe>>2]<<2)|0,Kt=y(Kt-y(h[hi>>2])),h[hi>>2]=y(Kt-y(h[We+908+(pf<<2)>>2]))),O=O+1|0;while((O|0)!=(Hs|0))}if(f|0){O=ri?Rl:d;do jF(s,f,Fr,O,Ao,Is,M),f=n[f+960>>2]|0;while(f|0)}if(O=(Lr|2|0)==3,j=(Ar|2|0)==3,O|j){f=0;do oe=n[(n[po>>2]|0)+(f<<2)>>2]|0,(n[oe+36>>2]|0)!=1&&(O&&bI(s,oe,Lr),j&&bI(s,oe,Ar)),f=f+1|0;while((f|0)!=(Hs|0))}}}while(!1);C=Ll}function dp(s,l){s=s|0,l=y(l);var c=0;ua(s,l>=y(0),3147),c=l==y(0),h[s+4>>2]=c?y(0):l}function qA(s,l,c,f){s=s|0,l=y(l),c=y(c),f=f|0;var d=Ze,m=Ze,B=0,k=0,F=0;n[2278]=(n[2278]|0)+1,Pu(s),Ns(s,2,l)|0?(d=y(Vr(n[s+992>>2]|0,l)),F=1,d=y(d+y(fn(s,2,l)))):(d=y(Vr(s+380|0,l)),d>=y(0)?F=2:(F=((Ot(l)|0)^1)&1,d=l)),Ns(s,0,c)|0?(m=y(Vr(n[s+996>>2]|0,c)),k=1,m=y(m+y(fn(s,0,l)))):(m=y(Vr(s+388|0,c)),m>=y(0)?k=2:(k=((Ot(c)|0)^1)&1,m=c)),B=s+976|0,Ka(s,d,m,f,F,k,l,c,1,3189,n[B>>2]|0)|0&&(mp(s,n[s+496>>2]|0,l,c,l),jA(s,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),o[11696]|0)&&h0(s,7)}function Pu(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0;k=C,C=C+32|0,B=k+24|0,m=k+16|0,f=k+8|0,d=k,c=0;do l=s+380+(c<<3)|0,n[s+380+(c<<3)+4>>2]|0&&(F=l,M=n[F+4>>2]|0,O=f,n[O>>2]=n[F>>2],n[O+4>>2]=M,O=s+364+(c<<3)|0,M=n[O+4>>2]|0,F=d,n[F>>2]=n[O>>2],n[F+4>>2]=M,n[m>>2]=n[f>>2],n[m+4>>2]=n[f+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],vu(m,B)|0)||(l=s+348+(c<<3)|0),n[s+992+(c<<2)>>2]=l,c=c+1|0;while((c|0)!=2);C=k}function Ns(s,l,c){s=s|0,l=l|0,c=y(c);var f=0;switch(s=n[s+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[s+4>>2]|0){case 0:case 3:{s=0;break}case 1:{y(h[s>>2])>2])>2]|0){case 2:{l=y(y(y(h[s>>2])*l)/y(100));break}case 1:{l=y(h[s>>2]);break}default:l=y(ue)}return y(l)}function mp(s,l,c,f,d){s=s|0,l=l|0,c=y(c),f=y(f),d=y(d);var m=0,B=Ze;l=n[s+944>>2]|0?l:1,m=hr(n[s+4>>2]|0,l)|0,l=Fd(m,l)|0,c=y(uD(s,m,c)),f=y(uD(s,l,f)),B=y(c+y(K(s,m,d))),h[s+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,c=y(c+y(re(s,m,d))),h[s+400+(n[1e3+(m<<2)>>2]<<2)>>2]=c,c=y(f+y(K(s,l,d))),h[s+400+(n[1040+(l<<2)>>2]<<2)>>2]=c,d=y(f+y(re(s,l,d))),h[s+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function jA(s,l,c,f){s=s|0,l=y(l),c=y(c),f=y(f);var d=0,m=0,B=Ze,k=Ze,F=0,M=0,O=Ze,j=0,oe=Ze,We=Ze,Oe=Ze,Qe=Ze;if(l!=y(0)&&(d=s+400|0,Qe=y(h[d>>2]),m=s+404|0,Oe=y(h[m>>2]),j=s+416|0,We=y(h[j>>2]),M=s+420|0,B=y(h[M>>2]),oe=y(Qe+c),O=y(Oe+f),f=y(oe+We),k=y(O+B),F=(n[s+988>>2]|0)==1,h[d>>2]=y(Gi(Qe,l,0,F)),h[m>>2]=y(Gi(Oe,l,0,F)),c=y(lT(y(We*l),y(1))),An(c,y(0))|0?m=0:m=(An(c,y(1))|0)^1,c=y(lT(y(B*l),y(1))),An(c,y(0))|0?d=0:d=(An(c,y(1))|0)^1,Qe=y(Gi(f,l,F&m,F&(m^1))),h[j>>2]=y(Qe-y(Gi(oe,l,0,F))),Qe=y(Gi(k,l,F&d,F&(d^1))),h[M>>2]=y(Qe-y(Gi(O,l,0,F))),m=(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2,m|0)){d=0;do jA(rs(s,d)|0,l,oe,O),d=d+1|0;while((d|0)!=(m|0))}}function kd(s,l,c,f,d){switch(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,c|0){case 5:case 0:{s=M7(n[489]|0,f,d)|0;break}default:s=HUe(f,d)|0}return s|0}function d0(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;d=C,C=C+16|0,m=d,n[m>>2]=f,yp(s,0,l,c,m),C=d}function yp(s,l,c,f,d){if(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,s=s|0?s:956,sW[n[s+8>>2]&1](s,l,c,f,d)|0,(c|0)==5)Tt();else return}function xl(s,l,c){s=s|0,l=l|0,c=c|0,o[s+l>>0]=c&1}function Qd(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(Ep(s,f),bt(s,n[l>>2]|0,n[c>>2]|0,f))}function Ep(s,l){s=s|0,l=l|0;var c=0;if((L(s)|0)>>>0>>0&&Zr(s),l>>>0>1073741823)Tt();else{c=Yt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function bt(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(br(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function L(s){return s=s|0,1073741823}function K(s,l,c){return s=s|0,l=l|0,c=y(c),ge(l)|0&&n[s+96>>2]|0?s=s+92|0:s=vn(s+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(Ye(s,c))}function re(s,l,c){return s=s|0,l=l|0,c=y(c),ge(l)|0&&n[s+104>>2]|0?s=s+100|0:s=vn(s+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(Ye(s,c))}function ge(s){return s=s|0,(s|1|0)==3|0}function Ye(s,l){return s=s|0,l=y(l),(n[s+4>>2]|0)==3?l=y(0):l=y(Vr(s,l)),y(l)}function At(s,l){return s=s|0,l=l|0,s=n[s>>2]|0,(s|0?s:(l|0)>1?l:1)|0}function hr(s,l){s=s|0,l=l|0;var c=0;e:do if((l|0)==2){switch(s|0){case 2:{s=3;break e}case 3:break;default:{c=4;break e}}s=2}else c=4;while(!1);return s|0}function Ir(s,l){s=s|0,l=l|0;var c=Ze;return ge(l)|0&&n[s+312>>2]|0&&(c=y(h[s+308>>2]),c>=y(0))||(c=y(Yn(y(h[(vn(s+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function Rn(s,l){s=s|0,l=l|0;var c=Ze;return ge(l)|0&&n[s+320>>2]|0&&(c=y(h[s+316>>2]),c>=y(0))||(c=y(Yn(y(h[(vn(s+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function ai(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return ge(l)|0&&n[s+240>>2]|0&&(f=y(Vr(s+236|0,c)),f>=y(0))||(f=y(Yn(y(Vr(vn(s+204|0,n[1040+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function ns(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return ge(l)|0&&n[s+248>>2]|0&&(f=y(Vr(s+244|0,c)),f>=y(0))||(f=y(Yn(y(Vr(vn(s+204|0,n[1e3+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function GA(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,F=Ze,M=Ze,O=Ze,j=Ze,oe=Ze,We=0,Oe=0,Qe=0;Qe=C,C=C+16|0,We=Qe,Oe=s+964|0,pi(s,(n[Oe>>2]|0)!=0,3519),k=y(da(s,2,l)),F=y(da(s,0,l)),M=y(fn(s,2,l)),O=y(fn(s,0,l)),Ot(l)|0?j=l:j=y(Yn(y(0),y(y(l-M)-k))),Ot(c)|0?oe=c:oe=y(Yn(y(0),y(y(c-O)-F))),(f|0)==1&(d|0)==1?(h[s+908>>2]=y(Mn(s,2,y(l-M),m,m)),l=y(Mn(s,0,y(c-O),B,m))):(oW[n[Oe>>2]&1](We,s,j,f,oe,d),j=y(k+y(h[We>>2])),oe=y(l-M),h[s+908>>2]=y(Mn(s,2,(f|2|0)==2?j:oe,m,m)),oe=y(F+y(h[We+4>>2])),l=y(c-O),l=y(Mn(s,0,(d|2|0)==2?oe:l,B,m))),h[s+912>>2]=l,C=Qe}function lD(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,F=Ze,M=Ze,O=Ze;M=y(da(s,2,m)),k=y(da(s,0,m)),O=y(fn(s,2,m)),F=y(fn(s,0,m)),l=y(l-O),h[s+908>>2]=y(Mn(s,2,(f|2|0)==2?M:l,m,m)),c=y(c-F),h[s+912>>2]=y(Mn(s,0,(d|2|0)==2?k:c,B,m))}function SI(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=0,F=Ze,M=Ze;return k=(f|0)==2,!(l<=y(0)&k)&&!(c<=y(0)&(d|0)==2)&&!((f|0)==1&(d|0)==1)?s=0:(F=y(fn(s,0,m)),M=y(fn(s,2,m)),k=l>2]=y(Mn(s,2,k?y(0):l,m,m)),l=y(c-F),k=c>2]=y(Mn(s,0,k?y(0):l,B,m)),s=1),s|0}function Fd(s,l){return s=s|0,l=l|0,E0(s)|0?s=hr(2,l)|0:s=0,s|0}function Cp(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(ai(s,l,c)),y(c+y(Ir(s,l)))}function PI(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(ns(s,l,c)),y(c+y(Rn(s,l)))}function da(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(Cp(s,l,c)),y(f+y(PI(s,l,c)))}function xI(s){return s=s|0,n[s+24>>2]|0?s=0:y(WA(s))!=y(0)?s=1:s=y(Ip(s))!=y(0),s|0}function WA(s){s=s|0;var l=Ze;if(n[s+944>>2]|0){if(l=y(h[s+44>>2]),Ot(l)|0)return l=y(h[s+40>>2]),s=l>y(0)&((Ot(l)|0)^1),y(s?l:y(0))}else l=y(0);return y(l)}function Ip(s){s=s|0;var l=Ze,c=0,f=Ze;do if(n[s+944>>2]|0){if(l=y(h[s+48>>2]),Ot(l)|0){if(c=o[(n[s+976>>2]|0)+2>>0]|0,!(c<<24>>24)&&(f=y(h[s+40>>2]),f>24?y(1):y(0)}}else l=y(0);while(!1);return y(l)}function Rd(s){s=s|0;var l=0,c=0;if(sm(s+400|0,0,540)|0,o[s+985>>0]=1,ee(s),c=Di(s)|0,c|0){l=s+948|0,s=0;do Rd(n[(n[l>>2]|0)+(s<<2)>>2]|0),s=s+1|0;while((s|0)!=(c|0))}}function cD(s,l,c,f,d,m,B,k,F,M){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=y(m),B=y(B),k=k|0,F=F|0,M=M|0;var O=0,j=Ze,oe=0,We=0,Oe=Ze,Qe=Ze,rt=0,Xe=Ze,ct=0,_e=Ze,Ge=0,Nt=0,_r=0,ur=0,Zt=0,kr=0,Or=0,lr=0,Ln=0,lo=0;Ln=C,C=C+16|0,_r=Ln+12|0,ur=Ln+8|0,Zt=Ln+4|0,kr=Ln,lr=hr(n[s+4>>2]|0,F)|0,Ge=ge(lr)|0,j=y(Vr(GF(l)|0,Ge?m:B)),Nt=Ns(l,2,m)|0,Or=Ns(l,0,B)|0;do if(!(Ot(j)|0)&&!(Ot(Ge?c:d)|0)){if(O=l+504|0,!(Ot(y(h[O>>2]))|0)&&(!(kI(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[O>>2]=y(Yn(j,y(da(l,lr,m))))}else oe=7;while(!1);do if((oe|0)==7){if(ct=Ge^1,!(ct|Nt^1)){B=y(Vr(n[l+992>>2]|0,m)),h[l+504>>2]=y(Yn(B,y(da(l,2,m))));break}if(!(Ge|Or^1)){B=y(Vr(n[l+996>>2]|0,B)),h[l+504>>2]=y(Yn(B,y(da(l,0,m))));break}h[_r>>2]=y(ue),h[ur>>2]=y(ue),n[Zt>>2]=0,n[kr>>2]=0,Xe=y(fn(l,2,m)),_e=y(fn(l,0,m)),Nt?(Oe=y(Xe+y(Vr(n[l+992>>2]|0,m))),h[_r>>2]=Oe,n[Zt>>2]=1,We=1):(We=0,Oe=y(ue)),Or?(j=y(_e+y(Vr(n[l+996>>2]|0,B))),h[ur>>2]=j,n[kr>>2]=1,O=1):(O=0,j=y(ue)),oe=n[s+32>>2]|0,Ge&(oe|0)==2?oe=2:Ot(Oe)|0&&!(Ot(c)|0)&&(h[_r>>2]=c,n[Zt>>2]=2,We=2,Oe=c),!((oe|0)==2&ct)&&Ot(j)|0&&!(Ot(d)|0)&&(h[ur>>2]=d,n[kr>>2]=2,O=2,j=d),Qe=y(h[l+396>>2]),rt=Ot(Qe)|0;do if(rt)oe=We;else{if((We|0)==1&ct){h[ur>>2]=y(y(Oe-Xe)/Qe),n[kr>>2]=1,O=1,oe=1;break}Ge&(O|0)==1?(h[_r>>2]=y(Qe*y(j-_e)),n[Zt>>2]=1,O=1,oe=1):oe=We}while(!1);lo=Ot(c)|0,We=(Wi(s,l)|0)!=4,!(Ge|Nt|((f|0)!=1|lo)|(We|(oe|0)==1))&&(h[_r>>2]=c,n[Zt>>2]=1,!rt)&&(h[ur>>2]=y(y(c-Xe)/Qe),n[kr>>2]=1,O=1),!(Or|ct|((k|0)!=1|(Ot(d)|0))|(We|(O|0)==1))&&(h[ur>>2]=d,n[kr>>2]=1,!rt)&&(h[_r>>2]=y(Qe*y(d-_e)),n[Zt>>2]=1),xc(l,2,m,m,Zt,_r),xc(l,0,B,m,kr,ur),c=y(h[_r>>2]),d=y(h[ur>>2]),Ka(l,c,d,F,n[Zt>>2]|0,n[kr>>2]|0,m,B,0,3565,M)|0,B=y(h[l+908+(n[976+(lr<<2)>>2]<<2)>>2]),h[l+504>>2]=y(Yn(B,y(da(l,lr,m))))}while(!1);n[l+500>>2]=n[2278],C=Ln}function Mn(s,l,c,f,d){return s=s|0,l=l|0,c=y(c),f=y(f),d=y(d),f=y(y0(s,l,c,f)),y(Yn(f,y(da(s,l,d))))}function Wi(s,l){return s=s|0,l=l|0,l=l+20|0,l=n[(n[l>>2]|0?l:s+16|0)>>2]|0,(l|0)==5&&E0(n[s+4>>2]|0)|0&&(l=1),l|0}function Ja(s,l){return s=s|0,l=l|0,ge(l)|0&&n[s+96>>2]|0?l=4:l=n[1040+(l<<2)>>2]|0,s+60+(l<<3)|0}function za(s,l){return s=s|0,l=l|0,ge(l)|0&&n[s+104>>2]|0?l=5:l=n[1e3+(l<<2)>>2]|0,s+60+(l<<3)|0}function xc(s,l,c,f,d,m){switch(s=s|0,l=l|0,c=y(c),f=y(f),d=d|0,m=m|0,c=y(Vr(s+380+(n[976+(l<<2)>>2]<<3)|0,c)),c=y(c+y(fn(s,l,f))),n[d>>2]|0){case 2:case 1:{d=Ot(c)|0,f=y(h[m>>2]),h[m>>2]=d|f>2]=2,h[m>>2]=c);break}default:}}function Ho(s,l){return s=s|0,l=l|0,s=s+132|0,ge(l)|0&&n[(vn(s,4,948)|0)+4>>2]|0?s=1:s=(n[(vn(s,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function YA(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,ge(l)|0&&(f=vn(s,4,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=vn(s,n[1040+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Vr(f,c))),y(c)}function VA(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),f=y(f+y(K(s,l,c))),y(f+y(re(s,l,c)))}function HF(s){s=s|0;var l=0,c=0,f=0;e:do if(E0(n[s+4>>2]|0)|0)l=0;else if((n[s+16>>2]|0)!=5)if(c=Di(s)|0,!c)l=0;else for(l=0;;){if(f=rs(s,l)|0,!(n[f+24>>2]|0)&&(n[f+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=c>>>0){l=0;break}}else l=1;while(!1);return l|0}function qF(s,l){s=s|0,l=l|0;var c=Ze;return c=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),c>=y(0)&((Ot(c)|0)^1)|0}function m0(s){s=s|0;var l=Ze,c=0,f=0,d=0,m=0,B=0,k=0,F=Ze;if(c=n[s+968>>2]|0,c)F=y(h[s+908>>2]),l=y(h[s+912>>2]),l=y(tW[c&0](s,F,l)),pi(s,(Ot(l)|0)^1,3573);else{m=Di(s)|0;do if(m|0){for(c=0,d=0;;){if(f=rs(s,d)|0,n[f+940>>2]|0){B=8;break}if((n[f+24>>2]|0)!=1)if(k=(Wi(s,f)|0)==5,k){c=f;break}else c=c|0?c:f;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!c)break;return l=y(m0(c)),y(l+y(h[c+404>>2]))}while(!1);l=y(h[s+912>>2])}return y(l)}function y0(s,l,c,f){s=s|0,l=l|0,c=y(c),f=y(f);var d=Ze,m=0;return E0(l)|0?(l=1,m=3):ge(l)|0?(l=0,m=3):(f=y(ue),d=y(ue)),(m|0)==3&&(d=y(Vr(s+364+(l<<3)|0,f)),f=y(Vr(s+380+(l<<3)|0,f))),m=f=y(0)&((Ot(f)|0)^1)),c=m?f:c,m=d>=y(0)&((Ot(d)|0)^1)&c>2]|0,m)|0,Oe=Fd(rt,m)|0,Qe=ge(rt)|0,j=y(fn(l,2,c)),oe=y(fn(l,0,c)),Ns(l,2,c)|0?k=y(j+y(Vr(n[l+992>>2]|0,c))):Ho(l,2)|0&&Td(l,2)|0?(k=y(h[s+908>>2]),F=y(Ir(s,2)),F=y(k-y(F+y(Rn(s,2)))),k=y(YA(l,2,c)),k=y(Mn(l,2,y(F-y(k+y(wp(l,2,c)))),c,c))):k=y(ue),Ns(l,0,d)|0?F=y(oe+y(Vr(n[l+996>>2]|0,d))):Ho(l,0)|0&&Td(l,0)|0?(F=y(h[s+912>>2]),ct=y(Ir(s,0)),ct=y(F-y(ct+y(Rn(s,0)))),F=y(YA(l,0,d)),F=y(Mn(l,0,y(ct-y(F+y(wp(l,0,d)))),d,c))):F=y(ue),M=Ot(k)|0,O=Ot(F)|0;do if(M^O&&(We=y(h[l+396>>2]),!(Ot(We)|0)))if(M){k=y(j+y(y(F-oe)*We));break}else{ct=y(oe+y(y(k-j)/We)),F=O?ct:F;break}while(!1);O=Ot(k)|0,M=Ot(F)|0,O|M&&(_e=(O^1)&1,f=c>y(0)&((f|0)!=0&O),k=Qe?k:f?c:k,Ka(l,k,F,m,Qe?_e:f?2:_e,O&(M^1)&1,k,F,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(fn(l,2,c))),F=y(h[l+912>>2]),F=y(F+y(fn(l,0,c)))),Ka(l,k,F,m,1,1,k,F,1,3635,B)|0,Td(l,rt)|0&&!(Ho(l,rt)|0)?(_e=n[976+(rt<<2)>>2]|0,ct=y(h[s+908+(_e<<2)>>2]),ct=y(ct-y(h[l+908+(_e<<2)>>2])),ct=y(ct-y(Rn(s,rt))),ct=y(ct-y(re(l,rt,c))),ct=y(ct-y(wp(l,rt,Qe?c:d))),h[l+400+(n[1040+(rt<<2)>>2]<<2)>>2]=ct):Xe=21;do if((Xe|0)==21){if(!(Ho(l,rt)|0)&&(n[s+8>>2]|0)==1){_e=n[976+(rt<<2)>>2]|0,ct=y(h[s+908+(_e<<2)>>2]),ct=y(y(ct-y(h[l+908+(_e<<2)>>2]))*y(.5)),h[l+400+(n[1040+(rt<<2)>>2]<<2)>>2]=ct;break}!(Ho(l,rt)|0)&&(n[s+8>>2]|0)==2&&(_e=n[976+(rt<<2)>>2]|0,ct=y(h[s+908+(_e<<2)>>2]),ct=y(ct-y(h[l+908+(_e<<2)>>2])),h[l+400+(n[1040+(rt<<2)>>2]<<2)>>2]=ct)}while(!1);Td(l,Oe)|0&&!(Ho(l,Oe)|0)?(_e=n[976+(Oe<<2)>>2]|0,ct=y(h[s+908+(_e<<2)>>2]),ct=y(ct-y(h[l+908+(_e<<2)>>2])),ct=y(ct-y(Rn(s,Oe))),ct=y(ct-y(re(l,Oe,c))),ct=y(ct-y(wp(l,Oe,Qe?d:c))),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=ct):Xe=30;do if((Xe|0)==30&&!(Ho(l,Oe)|0)){if((Wi(s,l)|0)==2){_e=n[976+(Oe<<2)>>2]|0,ct=y(h[s+908+(_e<<2)>>2]),ct=y(y(ct-y(h[l+908+(_e<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=ct;break}_e=(Wi(s,l)|0)==3,_e^(n[s+28>>2]|0)==2&&(_e=n[976+(Oe<<2)>>2]|0,ct=y(h[s+908+(_e<<2)>>2]),ct=y(ct-y(h[l+908+(_e<<2)>>2])),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=ct)}while(!1)}function bI(s,l,c){s=s|0,l=l|0,c=c|0;var f=Ze,d=0;d=n[976+(c<<2)>>2]|0,f=y(h[l+908+(d<<2)>>2]),f=y(y(h[s+908+(d<<2)>>2])-f),f=y(f-y(h[l+400+(n[1040+(c<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(c<<2)>>2]<<2)>>2]=f}function E0(s){return s=s|0,(s|1|0)==1|0}function GF(s){s=s|0;var l=Ze;switch(n[s+56>>2]|0){case 0:case 3:{l=y(h[s+40>>2]),l>y(0)&((Ot(l)|0)^1)?s=o[(n[s+976>>2]|0)+2>>0]|0?1056:992:s=1056;break}default:s=s+52|0}return s|0}function kI(s,l){return s=s|0,l=l|0,(o[s+l>>0]|0)!=0|0}function Td(s,l){return s=s|0,l=l|0,s=s+132|0,ge(l)|0&&n[(vn(s,5,948)|0)+4>>2]|0?s=1:s=(n[(vn(s,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function wp(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,ge(l)|0&&(f=vn(s,5,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=vn(s,n[1e3+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Vr(f,c))),y(c)}function uD(s,l,c){return s=s|0,l=l|0,c=y(c),Ho(s,l)|0?c=y(YA(s,l,c)):c=y(-y(wp(s,l,c))),y(c)}function AD(s){return s=y(s),h[D>>2]=s,n[D>>2]|0|0}function Ld(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Yt(l<<2)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function fD(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Nd(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&&yt(s)}function pD(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;if(B=s+4|0,k=n[B>>2]|0,d=k-f|0,m=d>>2,s=l+(m<<2)|0,s>>>0>>0){f=k;do n[f>>2]=n[s>>2],s=s+4|0,f=(n[B>>2]|0)+4|0,n[B>>2]=f;while(s>>>0>>0)}m|0&&rw(k+(0-m<<2)|0,l|0,d|0)|0}function hD(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0;return k=l+4|0,F=n[k>>2]|0,d=n[s>>2]|0,B=c,m=B-d|0,f=F+(0-(m>>2)<<2)|0,n[k>>2]=f,(m|0)>0&&br(f|0,d|0,m|0)|0,d=s+4|0,m=l+8|0,f=(n[d>>2]|0)-B|0,(f|0)>0&&(br(n[m>>2]|0,c|0,f|0)|0,n[m>>2]=(n[m>>2]|0)+(f>>>2<<2)),B=n[s>>2]|0,n[s>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=s+8|0,c=l+12|0,s=n[B>>2]|0,n[B>>2]=n[c>>2],n[c>>2]=s,n[l>>2]=n[k>>2],F|0}function QI(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[c>>2]|0,(B|0)!=(m|0)){d=s+8|0,c=((m+-4-B|0)>>>2)+1|0,s=B,f=n[d>>2]|0;do n[f>>2]=n[s>>2],f=(n[d>>2]|0)+4|0,n[d>>2]=f,s=s+4|0;while((s|0)!=(m|0));n[l>>2]=B+(c<<2)}}function FI(){Oo()}function gD(){var s=0;return s=Yt(4)|0,RI(s),s|0}function RI(s){s=s|0,n[s>>2]=Pl()|0}function dD(s){s=s|0,s|0&&(C0(s),yt(s))}function C0(s){s=s|0,st(n[s>>2]|0)}function WF(s,l,c){s=s|0,l=l|0,c=c|0,xl(n[s>>2]|0,l,c)}function Od(s,l){s=s|0,l=y(l),dp(n[s>>2]|0,l)}function Md(s,l){return s=s|0,l=l|0,kI(n[s>>2]|0,l)|0}function Ud(){var s=0;return s=Yt(8)|0,I0(s,0),s|0}function I0(s,l){s=s|0,l=l|0,l?l=Mo(n[l>>2]|0)|0:l=qi()|0,n[s>>2]=l,n[s+4>>2]=0,Sn(l,s)}function _d(s){s=s|0;var l=0;return l=Yt(8)|0,I0(l,s),l|0}function w0(s){s=s|0,s|0&&(Hd(s),yt(s))}function Hd(s){s=s|0;var l=0;Dl(n[s>>2]|0),l=s+4|0,s=n[l>>2]|0,n[l>>2]=0,s|0&&(xu(s),yt(s))}function xu(s){s=s|0,bu(s)}function bu(s){s=s|0,s=n[s>>2]|0,s|0&&sa(s|0)}function TI(s){return s=s|0,fa(s)|0}function LI(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(xu(l),yt(l)),Sl(n[s>>2]|0)}function qd(s,l){s=s|0,l=l|0,sn(n[s>>2]|0,n[l>>2]|0)}function YF(s,l){s=s|0,l=l|0,fp(n[s>>2]|0,l)}function VF(s,l,c){s=s|0,l=l|0,c=+c,Sd(n[s>>2]|0,l,y(c))}function jd(s,l,c){s=s|0,l=l|0,c=+c,Pd(n[s>>2]|0,l,y(c))}function NI(s,l){s=s|0,l=l|0,cp(n[s>>2]|0,l)}function OI(s,l){s=s|0,l=l|0,to(n[s>>2]|0,l)}function Pr(s,l){s=s|0,l=l|0,Ap(n[s>>2]|0,l)}function Os(s,l){s=s|0,l=l|0,wd(n[s>>2]|0,l)}function Oi(s,l){s=s|0,l=l|0,o0(n[s>>2]|0,l)}function ms(s,l){s=s|0,l=l|0,eo(n[s>>2]|0,l)}function KA(s,l,c){s=s|0,l=l|0,c=+c,OA(n[s>>2]|0,l,y(c))}function MI(s,l,c){s=s|0,l=l|0,c=+c,W(n[s>>2]|0,l,y(c))}function is(s,l){s=s|0,l=l|0,MA(n[s>>2]|0,l)}function Gd(s,l){s=s|0,l=l|0,vd(n[s>>2]|0,l)}function Bp(s,l){s=s|0,l=l|0,ro(n[s>>2]|0,l)}function B0(s,l){s=s|0,l=+l,pp(n[s>>2]|0,y(l))}function vp(s,l){s=s|0,l=+l,Ya(n[s>>2]|0,y(l))}function UI(s,l){s=s|0,l=+l,Dd(n[s>>2]|0,y(l))}function _I(s,l){s=s|0,l=+l,l0(n[s>>2]|0,y(l))}function HI(s,l){s=s|0,l=+l,Wa(n[s>>2]|0,y(l))}function qI(s,l){s=s|0,l=+l,c0(n[s>>2]|0,y(l))}function ku(s,l){s=s|0,l=+l,DI(n[s>>2]|0,y(l))}function ir(s){s=s|0,hp(n[s>>2]|0)}function Wd(s,l){s=s|0,l=+l,Ni(n[s>>2]|0,y(l))}function jI(s,l){s=s|0,l=+l,Iu(n[s>>2]|0,y(l))}function bl(s){s=s|0,pa(n[s>>2]|0)}function Qu(s,l){s=s|0,l=+l,Bc(n[s>>2]|0,y(l))}function v0(s,l){s=s|0,l=+l,wu(n[s>>2]|0,y(l))}function D0(s,l){s=s|0,l=+l,oi(n[s>>2]|0,y(l))}function GI(s,l){s=s|0,l=+l,UA(n[s>>2]|0,y(l))}function WI(s,l){s=s|0,l=+l,Uo(n[s>>2]|0,y(l))}function bc(s,l){s=s|0,l=+l,ga(n[s>>2]|0,y(l))}function S0(s,l){s=s|0,l=+l,gp(n[s>>2]|0,y(l))}function YI(s,l){s=s|0,l=+l,f0(n[s>>2]|0,y(l))}function Yd(s,l){s=s|0,l=+l,_A(n[s>>2]|0,y(l))}function kc(s,l,c){s=s|0,l=l|0,c=+c,wc(n[s>>2]|0,l,y(c))}function Vd(s,l,c){s=s|0,l=l|0,c=+c,no(n[s>>2]|0,l,y(c))}function P0(s,l,c){s=s|0,l=l|0,c=+c,Cu(n[s>>2]|0,l,y(c))}function x0(s){return s=s|0,s0(n[s>>2]|0)|0}function oo(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,NA(d,n[l>>2]|0,c),ss(s,d),C=f}function ss(s,l){s=s|0,l=l|0,Xa(s,n[l+4>>2]|0,+y(h[l>>2]))}function Xa(s,l,c){s=s|0,l=l|0,c=+c,n[s>>2]=l,E[s+8>>3]=c}function Kd(s){return s=s|0,vI(n[s>>2]|0)|0}function qo(s){return s=s|0,up(n[s>>2]|0)|0}function mD(s){return s=s|0,Ic(n[s>>2]|0)|0}function Dp(s){return s=s|0,BI(n[s>>2]|0)|0}function VI(s){return s=s|0,a0(n[s>>2]|0)|0}function KF(s){return s=s|0,Bd(n[s>>2]|0)|0}function yD(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,xt(d,n[l>>2]|0,c),ss(s,d),C=f}function ED(s){return s=s|0,Eu(n[s>>2]|0)|0}function Jd(s){return s=s|0,Ga(n[s>>2]|0)|0}function KI(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,LA(f,n[l>>2]|0),ss(s,f),C=c}function Sp(s){return s=s|0,+ +y(ei(n[s>>2]|0))}function CD(s){return s=s|0,+ +y(Qi(n[s>>2]|0))}function ID(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,cr(f,n[l>>2]|0),ss(s,f),C=c}function b0(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,u0(f,n[l>>2]|0),ss(s,f),C=c}function JF(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,wt(f,n[l>>2]|0),ss(s,f),C=c}function zF(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,ha(f,n[l>>2]|0),ss(s,f),C=c}function wD(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,A0(f,n[l>>2]|0),ss(s,f),C=c}function BD(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,bd(f,n[l>>2]|0),ss(s,f),C=c}function JA(s){return s=s|0,+ +y(p0(n[s>>2]|0))}function XF(s,l){return s=s|0,l=l|0,+ +y(xd(n[s>>2]|0,l))}function ZF(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,dt(d,n[l>>2]|0,c),ss(s,d),C=f}function Qc(s,l,c){s=s|0,l=l|0,c=c|0,ar(n[s>>2]|0,n[l>>2]|0,c)}function $F(s,l){s=s|0,l=l|0,yu(n[s>>2]|0,n[l>>2]|0)}function vD(s){return s=s|0,Di(n[s>>2]|0)|0}function eR(s){return s=s|0,s=mt(n[s>>2]|0)|0,s?s=TI(s)|0:s=0,s|0}function DD(s,l){return s=s|0,l=l|0,s=rs(n[s>>2]|0,l)|0,s?s=TI(s)|0:s=0,s|0}function Fu(s,l){s=s|0,l=l|0;var c=0,f=0;f=Yt(4)|0,SD(f,l),c=s+4|0,l=n[c>>2]|0,n[c>>2]=f,l|0&&(xu(l),yt(l)),vt(n[s>>2]|0,1)}function SD(s,l){s=s|0,l=l|0,iR(s,l)}function tR(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,PD(k,fa(l)|0,+c,f,+d,m),h[s>>2]=y(+E[k>>3]),h[s+4>>2]=y(+E[k+8>>3]),C=B}function PD(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0,k=0,F=0,M=0,O=0;B=C,C=C+32|0,O=B+8|0,M=B+20|0,F=B,k=B+16|0,E[O>>3]=c,n[M>>2]=f,E[F>>3]=d,n[k>>2]=m,zd(s,n[l+4>>2]|0,O,M,F,k),C=B}function zd(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,$a(k),l=ys(l)|0,xD(s,l,+E[c>>3],n[f>>2]|0,+E[d>>3],n[m>>2]|0),el(k),C=B}function ys(s){return s=s|0,n[s>>2]|0}function xD(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0;B=jo(JI()|0)|0,c=+ma(c),f=Xd(f)|0,d=+ma(d),rR(s,qn(0,B|0,l|0,+c,f|0,+d,Xd(m)|0)|0)}function JI(){var s=0;return o[7608]|0||(XI(9120),s=7608,n[s>>2]=1,n[s+4>>2]=0),9120}function jo(s){return s=s|0,n[s+8>>2]|0}function ma(s){return s=+s,+ +Ru(s)}function Xd(s){return s=s|0,k0(s)|0}function rR(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=l,f&1?(ya(c,0),ia(f|0,c|0)|0,zI(s,c),nR(c)):(n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]),C=d}function ya(s,l){s=s|0,l=l|0,Fc(s,l),n[s+8>>2]=0,o[s+24>>0]=0}function zI(s,l){s=s|0,l=l|0,l=l+8|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]}function nR(s){s=s|0,o[s+24>>0]=0}function Fc(s,l){s=s|0,l=l|0,n[s>>2]=l}function k0(s){return s=s|0,s|0}function Ru(s){return s=+s,+s}function XI(s){s=s|0,ao(s,ZI()|0,4)}function ZI(){return 1064}function ao(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=ki(l|0,c+1|0)|0}function iR(s,l){s=s|0,l=l|0,l=n[l>>2]|0,n[s>>2]=l,hc(l|0)}function bD(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(xu(l),yt(l)),vt(n[s>>2]|0,0)}function kD(s){s=s|0,Dt(n[s>>2]|0)}function Zd(s){return s=s|0,er(n[s>>2]|0)|0}function sR(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,qA(n[s>>2]|0,y(l),y(c),f)}function oR(s){return s=s|0,+ +y(vc(n[s>>2]|0))}function v(s){return s=s|0,+ +y(Bu(n[s>>2]|0))}function S(s){return s=s|0,+ +y(Dc(n[s>>2]|0))}function Q(s){return s=s|0,+ +y(gs(n[s>>2]|0))}function H(s){return s=s|0,+ +y(Sc(n[s>>2]|0))}function Y(s){return s=s|0,+ +y(On(n[s>>2]|0))}function ne(s,l){s=s|0,l=l|0,E[s>>3]=+y(vc(n[l>>2]|0)),E[s+8>>3]=+y(Bu(n[l>>2]|0)),E[s+16>>3]=+y(Dc(n[l>>2]|0)),E[s+24>>3]=+y(gs(n[l>>2]|0)),E[s+32>>3]=+y(Sc(n[l>>2]|0)),E[s+40>>3]=+y(On(n[l>>2]|0))}function Be(s,l){return s=s|0,l=l|0,+ +y(ji(n[s>>2]|0,l))}function Ue(s,l){return s=s|0,l=l|0,+ +y(Ci(n[s>>2]|0,l))}function ft(s,l){return s=s|0,l=l|0,+ +y(HA(n[s>>2]|0,l))}function jt(){return Dn()|0}function wr(){Tr(),Xt(),jn(),li(),Ea(),$e()}function Tr(){PLe(11713,4938,1)}function Xt(){YTe(10448)}function jn(){PTe(10408)}function li(){zRe(10324)}function Ea(){iFe(10096)}function $e(){je(9132)}function je(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0,We=0,Oe=0,Qe=0,rt=0,Xe=0,ct=0,_e=0,Ge=0,Nt=0,_r=0,ur=0,Zt=0,kr=0,Or=0,lr=0,Ln=0,lo=0,co=0,uo=0,Ia=0,Lp=0,Np=0,kl=0,Op=0,Nu=0,Ou=0,Mp=0,Up=0,_p=0,$r=0,Ql=0,Hp=0,Lc=0,qp=0,jp=0,Mu=0,Uu=0,Nc=0,Ms=0,rl=0,Go=0,Fl=0,rf=0,nf=0,_u=0,sf=0,of=0,Us=0,Cs=0,Rl=0,Un=0,af=0,Ao=0,Oc=0,fo=0,Mc=0,lf=0,cf=0,Uc=0,_s=0,Tl=0,uf=0,Af=0,ff=0,Fr=0,ri=0,Is=0,po=0,Hs=0,Lr=0,Ar=0,Ll=0;l=C,C=C+672|0,c=l+656|0,Ll=l+648|0,Ar=l+640|0,Lr=l+632|0,Hs=l+624|0,po=l+616|0,Is=l+608|0,ri=l+600|0,Fr=l+592|0,ff=l+584|0,Af=l+576|0,uf=l+568|0,Tl=l+560|0,_s=l+552|0,Uc=l+544|0,cf=l+536|0,lf=l+528|0,Mc=l+520|0,fo=l+512|0,Oc=l+504|0,Ao=l+496|0,af=l+488|0,Un=l+480|0,Rl=l+472|0,Cs=l+464|0,Us=l+456|0,of=l+448|0,sf=l+440|0,_u=l+432|0,nf=l+424|0,rf=l+416|0,Fl=l+408|0,Go=l+400|0,rl=l+392|0,Ms=l+384|0,Nc=l+376|0,Uu=l+368|0,Mu=l+360|0,jp=l+352|0,qp=l+344|0,Lc=l+336|0,Hp=l+328|0,Ql=l+320|0,$r=l+312|0,_p=l+304|0,Up=l+296|0,Mp=l+288|0,Ou=l+280|0,Nu=l+272|0,Op=l+264|0,kl=l+256|0,Np=l+248|0,Lp=l+240|0,Ia=l+232|0,uo=l+224|0,co=l+216|0,lo=l+208|0,Ln=l+200|0,lr=l+192|0,Or=l+184|0,kr=l+176|0,Zt=l+168|0,ur=l+160|0,_r=l+152|0,Nt=l+144|0,Ge=l+136|0,_e=l+128|0,ct=l+120|0,Xe=l+112|0,rt=l+104|0,Qe=l+96|0,Oe=l+88|0,We=l+80|0,oe=l+72|0,j=l+64|0,O=l+56|0,M=l+48|0,F=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,f=l,pt(s,3646),zt(s,3651,2)|0,Br(s,3665,2)|0,Wn(s,3682,18)|0,n[Ll>>2]=19,n[Ll+4>>2]=0,n[c>>2]=n[Ll>>2],n[c+4>>2]=n[Ll+4>>2],xr(s,3690,c)|0,n[Ar>>2]=1,n[Ar+4>>2]=0,n[c>>2]=n[Ar>>2],n[c+4>>2]=n[Ar+4>>2],Pn(s,3696,c)|0,n[Lr>>2]=2,n[Lr+4>>2]=0,n[c>>2]=n[Lr>>2],n[c+4>>2]=n[Lr+4>>2],Tn(s,3706,c)|0,n[Hs>>2]=1,n[Hs+4>>2]=0,n[c>>2]=n[Hs>>2],n[c+4>>2]=n[Hs+4>>2],Yr(s,3722,c)|0,n[po>>2]=2,n[po+4>>2]=0,n[c>>2]=n[po>>2],n[c+4>>2]=n[po+4>>2],Yr(s,3734,c)|0,n[Is>>2]=3,n[Is+4>>2]=0,n[c>>2]=n[Is>>2],n[c+4>>2]=n[Is+4>>2],Tn(s,3753,c)|0,n[ri>>2]=4,n[ri+4>>2]=0,n[c>>2]=n[ri>>2],n[c+4>>2]=n[ri+4>>2],Tn(s,3769,c)|0,n[Fr>>2]=5,n[Fr+4>>2]=0,n[c>>2]=n[Fr>>2],n[c+4>>2]=n[Fr+4>>2],Tn(s,3783,c)|0,n[ff>>2]=6,n[ff+4>>2]=0,n[c>>2]=n[ff>>2],n[c+4>>2]=n[ff+4>>2],Tn(s,3796,c)|0,n[Af>>2]=7,n[Af+4>>2]=0,n[c>>2]=n[Af>>2],n[c+4>>2]=n[Af+4>>2],Tn(s,3813,c)|0,n[uf>>2]=8,n[uf+4>>2]=0,n[c>>2]=n[uf>>2],n[c+4>>2]=n[uf+4>>2],Tn(s,3825,c)|0,n[Tl>>2]=3,n[Tl+4>>2]=0,n[c>>2]=n[Tl>>2],n[c+4>>2]=n[Tl+4>>2],Yr(s,3843,c)|0,n[_s>>2]=4,n[_s+4>>2]=0,n[c>>2]=n[_s>>2],n[c+4>>2]=n[_s+4>>2],Yr(s,3853,c)|0,n[Uc>>2]=9,n[Uc+4>>2]=0,n[c>>2]=n[Uc>>2],n[c+4>>2]=n[Uc+4>>2],Tn(s,3870,c)|0,n[cf>>2]=10,n[cf+4>>2]=0,n[c>>2]=n[cf>>2],n[c+4>>2]=n[cf+4>>2],Tn(s,3884,c)|0,n[lf>>2]=11,n[lf+4>>2]=0,n[c>>2]=n[lf>>2],n[c+4>>2]=n[lf+4>>2],Tn(s,3896,c)|0,n[Mc>>2]=1,n[Mc+4>>2]=0,n[c>>2]=n[Mc>>2],n[c+4>>2]=n[Mc+4>>2],ti(s,3907,c)|0,n[fo>>2]=2,n[fo+4>>2]=0,n[c>>2]=n[fo>>2],n[c+4>>2]=n[fo+4>>2],ti(s,3915,c)|0,n[Oc>>2]=3,n[Oc+4>>2]=0,n[c>>2]=n[Oc>>2],n[c+4>>2]=n[Oc+4>>2],ti(s,3928,c)|0,n[Ao>>2]=4,n[Ao+4>>2]=0,n[c>>2]=n[Ao>>2],n[c+4>>2]=n[Ao+4>>2],ti(s,3948,c)|0,n[af>>2]=5,n[af+4>>2]=0,n[c>>2]=n[af>>2],n[c+4>>2]=n[af+4>>2],ti(s,3960,c)|0,n[Un>>2]=6,n[Un+4>>2]=0,n[c>>2]=n[Un>>2],n[c+4>>2]=n[Un+4>>2],ti(s,3974,c)|0,n[Rl>>2]=7,n[Rl+4>>2]=0,n[c>>2]=n[Rl>>2],n[c+4>>2]=n[Rl+4>>2],ti(s,3983,c)|0,n[Cs>>2]=20,n[Cs+4>>2]=0,n[c>>2]=n[Cs>>2],n[c+4>>2]=n[Cs+4>>2],xr(s,3999,c)|0,n[Us>>2]=8,n[Us+4>>2]=0,n[c>>2]=n[Us>>2],n[c+4>>2]=n[Us+4>>2],ti(s,4012,c)|0,n[of>>2]=9,n[of+4>>2]=0,n[c>>2]=n[of>>2],n[c+4>>2]=n[of+4>>2],ti(s,4022,c)|0,n[sf>>2]=21,n[sf+4>>2]=0,n[c>>2]=n[sf>>2],n[c+4>>2]=n[sf+4>>2],xr(s,4039,c)|0,n[_u>>2]=10,n[_u+4>>2]=0,n[c>>2]=n[_u>>2],n[c+4>>2]=n[_u+4>>2],ti(s,4053,c)|0,n[nf>>2]=11,n[nf+4>>2]=0,n[c>>2]=n[nf>>2],n[c+4>>2]=n[nf+4>>2],ti(s,4065,c)|0,n[rf>>2]=12,n[rf+4>>2]=0,n[c>>2]=n[rf>>2],n[c+4>>2]=n[rf+4>>2],ti(s,4084,c)|0,n[Fl>>2]=13,n[Fl+4>>2]=0,n[c>>2]=n[Fl>>2],n[c+4>>2]=n[Fl+4>>2],ti(s,4097,c)|0,n[Go>>2]=14,n[Go+4>>2]=0,n[c>>2]=n[Go>>2],n[c+4>>2]=n[Go+4>>2],ti(s,4117,c)|0,n[rl>>2]=15,n[rl+4>>2]=0,n[c>>2]=n[rl>>2],n[c+4>>2]=n[rl+4>>2],ti(s,4129,c)|0,n[Ms>>2]=16,n[Ms+4>>2]=0,n[c>>2]=n[Ms>>2],n[c+4>>2]=n[Ms+4>>2],ti(s,4148,c)|0,n[Nc>>2]=17,n[Nc+4>>2]=0,n[c>>2]=n[Nc>>2],n[c+4>>2]=n[Nc+4>>2],ti(s,4161,c)|0,n[Uu>>2]=18,n[Uu+4>>2]=0,n[c>>2]=n[Uu>>2],n[c+4>>2]=n[Uu+4>>2],ti(s,4181,c)|0,n[Mu>>2]=5,n[Mu+4>>2]=0,n[c>>2]=n[Mu>>2],n[c+4>>2]=n[Mu+4>>2],Yr(s,4196,c)|0,n[jp>>2]=6,n[jp+4>>2]=0,n[c>>2]=n[jp>>2],n[c+4>>2]=n[jp+4>>2],Yr(s,4206,c)|0,n[qp>>2]=7,n[qp+4>>2]=0,n[c>>2]=n[qp>>2],n[c+4>>2]=n[qp+4>>2],Yr(s,4217,c)|0,n[Lc>>2]=3,n[Lc+4>>2]=0,n[c>>2]=n[Lc>>2],n[c+4>>2]=n[Lc+4>>2],Rc(s,4235,c)|0,n[Hp>>2]=1,n[Hp+4>>2]=0,n[c>>2]=n[Hp>>2],n[c+4>>2]=n[Hp+4>>2],aR(s,4251,c)|0,n[Ql>>2]=4,n[Ql+4>>2]=0,n[c>>2]=n[Ql>>2],n[c+4>>2]=n[Ql+4>>2],Rc(s,4263,c)|0,n[$r>>2]=5,n[$r+4>>2]=0,n[c>>2]=n[$r>>2],n[c+4>>2]=n[$r+4>>2],Rc(s,4279,c)|0,n[_p>>2]=6,n[_p+4>>2]=0,n[c>>2]=n[_p>>2],n[c+4>>2]=n[_p+4>>2],Rc(s,4293,c)|0,n[Up>>2]=7,n[Up+4>>2]=0,n[c>>2]=n[Up>>2],n[c+4>>2]=n[Up+4>>2],Rc(s,4306,c)|0,n[Mp>>2]=8,n[Mp+4>>2]=0,n[c>>2]=n[Mp>>2],n[c+4>>2]=n[Mp+4>>2],Rc(s,4323,c)|0,n[Ou>>2]=9,n[Ou+4>>2]=0,n[c>>2]=n[Ou>>2],n[c+4>>2]=n[Ou+4>>2],Rc(s,4335,c)|0,n[Nu>>2]=2,n[Nu+4>>2]=0,n[c>>2]=n[Nu>>2],n[c+4>>2]=n[Nu+4>>2],aR(s,4353,c)|0,n[Op>>2]=12,n[Op+4>>2]=0,n[c>>2]=n[Op>>2],n[c+4>>2]=n[Op+4>>2],Q0(s,4363,c)|0,n[kl>>2]=1,n[kl+4>>2]=0,n[c>>2]=n[kl>>2],n[c+4>>2]=n[kl+4>>2],zA(s,4376,c)|0,n[Np>>2]=2,n[Np+4>>2]=0,n[c>>2]=n[Np>>2],n[c+4>>2]=n[Np+4>>2],zA(s,4388,c)|0,n[Lp>>2]=13,n[Lp+4>>2]=0,n[c>>2]=n[Lp>>2],n[c+4>>2]=n[Lp+4>>2],Q0(s,4402,c)|0,n[Ia>>2]=14,n[Ia+4>>2]=0,n[c>>2]=n[Ia>>2],n[c+4>>2]=n[Ia+4>>2],Q0(s,4411,c)|0,n[uo>>2]=15,n[uo+4>>2]=0,n[c>>2]=n[uo>>2],n[c+4>>2]=n[uo+4>>2],Q0(s,4421,c)|0,n[co>>2]=16,n[co+4>>2]=0,n[c>>2]=n[co>>2],n[c+4>>2]=n[co+4>>2],Q0(s,4433,c)|0,n[lo>>2]=17,n[lo+4>>2]=0,n[c>>2]=n[lo>>2],n[c+4>>2]=n[lo+4>>2],Q0(s,4446,c)|0,n[Ln>>2]=18,n[Ln+4>>2]=0,n[c>>2]=n[Ln>>2],n[c+4>>2]=n[Ln+4>>2],Q0(s,4458,c)|0,n[lr>>2]=3,n[lr+4>>2]=0,n[c>>2]=n[lr>>2],n[c+4>>2]=n[lr+4>>2],zA(s,4471,c)|0,n[Or>>2]=1,n[Or+4>>2]=0,n[c>>2]=n[Or>>2],n[c+4>>2]=n[Or+4>>2],QD(s,4486,c)|0,n[kr>>2]=10,n[kr+4>>2]=0,n[c>>2]=n[kr>>2],n[c+4>>2]=n[kr+4>>2],Rc(s,4496,c)|0,n[Zt>>2]=11,n[Zt+4>>2]=0,n[c>>2]=n[Zt>>2],n[c+4>>2]=n[Zt+4>>2],Rc(s,4508,c)|0,n[ur>>2]=3,n[ur+4>>2]=0,n[c>>2]=n[ur>>2],n[c+4>>2]=n[ur+4>>2],aR(s,4519,c)|0,n[_r>>2]=4,n[_r+4>>2]=0,n[c>>2]=n[_r>>2],n[c+4>>2]=n[_r+4>>2],Lve(s,4530,c)|0,n[Nt>>2]=19,n[Nt+4>>2]=0,n[c>>2]=n[Nt>>2],n[c+4>>2]=n[Nt+4>>2],Nve(s,4542,c)|0,n[Ge>>2]=12,n[Ge+4>>2]=0,n[c>>2]=n[Ge>>2],n[c+4>>2]=n[Ge+4>>2],Ove(s,4554,c)|0,n[_e>>2]=13,n[_e+4>>2]=0,n[c>>2]=n[_e>>2],n[c+4>>2]=n[_e+4>>2],Mve(s,4568,c)|0,n[ct>>2]=2,n[ct+4>>2]=0,n[c>>2]=n[ct>>2],n[c+4>>2]=n[ct+4>>2],Uve(s,4578,c)|0,n[Xe>>2]=20,n[Xe+4>>2]=0,n[c>>2]=n[Xe>>2],n[c+4>>2]=n[Xe+4>>2],_ve(s,4587,c)|0,n[rt>>2]=22,n[rt+4>>2]=0,n[c>>2]=n[rt>>2],n[c+4>>2]=n[rt+4>>2],xr(s,4602,c)|0,n[Qe>>2]=23,n[Qe+4>>2]=0,n[c>>2]=n[Qe>>2],n[c+4>>2]=n[Qe+4>>2],xr(s,4619,c)|0,n[Oe>>2]=14,n[Oe+4>>2]=0,n[c>>2]=n[Oe>>2],n[c+4>>2]=n[Oe+4>>2],Hve(s,4629,c)|0,n[We>>2]=1,n[We+4>>2]=0,n[c>>2]=n[We>>2],n[c+4>>2]=n[We+4>>2],qve(s,4637,c)|0,n[oe>>2]=4,n[oe+4>>2]=0,n[c>>2]=n[oe>>2],n[c+4>>2]=n[oe+4>>2],zA(s,4653,c)|0,n[j>>2]=5,n[j+4>>2]=0,n[c>>2]=n[j>>2],n[c+4>>2]=n[j+4>>2],zA(s,4669,c)|0,n[O>>2]=6,n[O+4>>2]=0,n[c>>2]=n[O>>2],n[c+4>>2]=n[O+4>>2],zA(s,4686,c)|0,n[M>>2]=7,n[M+4>>2]=0,n[c>>2]=n[M>>2],n[c+4>>2]=n[M+4>>2],zA(s,4701,c)|0,n[F>>2]=8,n[F+4>>2]=0,n[c>>2]=n[F>>2],n[c+4>>2]=n[F+4>>2],zA(s,4719,c)|0,n[k>>2]=9,n[k+4>>2]=0,n[c>>2]=n[k>>2],n[c+4>>2]=n[k+4>>2],zA(s,4736,c)|0,n[B>>2]=21,n[B+4>>2]=0,n[c>>2]=n[B>>2],n[c+4>>2]=n[B+4>>2],jve(s,4754,c)|0,n[m>>2]=2,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],QD(s,4772,c)|0,n[d>>2]=3,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],QD(s,4790,c)|0,n[f>>2]=4,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],QD(s,4808,c)|0,C=l}function pt(s,l){s=s|0,l=l|0;var c=0;c=JQe()|0,n[s>>2]=c,zQe(c,l),Fp(n[s>>2]|0)}function zt(s,l,c){return s=s|0,l=l|0,c=c|0,LQe(s,mn(l)|0,c,0),s|0}function Br(s,l,c){return s=s|0,l=l|0,c=c|0,EQe(s,mn(l)|0,c,0),s|0}function Wn(s,l,c){return s=s|0,l=l|0,c=c|0,sQe(s,mn(l)|0,c,0),s|0}function xr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jke(s,l,d),C=f,s|0}function Pn(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vke(s,l,d),C=f,s|0}function Tn(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],lke(s,l,d),C=f,s|0}function Yr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ybe(s,l,d),C=f,s|0}function ti(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],kbe(s,l,d),C=f,s|0}function Rc(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],hbe(s,l,d),C=f,s|0}function aR(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Zxe(s,l,d),C=f,s|0}function Q0(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vxe(s,l,d),C=f,s|0}function zA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],lxe(s,l,d),C=f,s|0}function QD(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],YPe(s,l,d),C=f,s|0}function Lve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],kPe(s,l,d),C=f,s|0}function Nve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],hPe(s,l,d),C=f,s|0}function Ove(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$Se(s,l,d),C=f,s|0}function Mve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],MSe(s,l,d),C=f,s|0}function Uve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ISe(s,l,d),C=f,s|0}function _ve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],iSe(s,l,d),C=f,s|0}function Hve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],qDe(s,l,d),C=f,s|0}function qve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],vDe(s,l,d),C=f,s|0}function jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Gve(s,l,d),C=f,s|0}function Gve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Wve(s,c,d,1),C=f}function mn(s){return s=s|0,s|0}function Wve(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=lR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Yve(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,Vve(m,f)|0,f),C=d}function lR(){var s=0,l=0;if(o[7616]|0||(L5(9136),pr(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9136)|0)){s=9136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));L5(9136)}return 9136}function Yve(s){return s=s|0,0}function Vve(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=lR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],T5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(zve(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function yn(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,F=0,M=0,O=0,j=0,oe=0,We=0;B=C,C=C+32|0,oe=B+24|0,j=B+20|0,F=B+16|0,O=B+12|0,M=B+8|0,k=B+4|0,We=B,n[j>>2]=l,n[F>>2]=c,n[O>>2]=f,n[M>>2]=d,n[k>>2]=m,m=s+28|0,n[We>>2]=n[m>>2],n[oe>>2]=n[We>>2],Kve(s+24|0,oe,j,O,M,F,k)|0,n[m>>2]=n[n[m>>2]>>2],C=B}function Kve(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,s=Jve(l)|0,l=Yt(24)|0,R5(l+4|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[s>>2],n[s>>2]=l,l|0}function Jve(s){return s=s|0,n[s>>2]|0}function R5(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function dr(s,l){return s=s|0,l=l|0,l|s|0}function T5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Xve(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,Zve(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],T5(m,f,c),n[F>>2]=(n[F>>2]|0)+12,$ve(s,k),eDe(k),C=M;return}}function Xve(s){return s=s|0,357913941}function Zve(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function $ve(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function eDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function L5(s){s=s|0,nDe(s)}function tDe(s){s=s|0,rDe(s+24|0)}function Nr(s){return s=s|0,n[s>>2]|0}function rDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function nDe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,3,l,iDe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Jr(){return 9228}function iDe(){return 1140}function sDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=oDe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=aDe(l,f)|0,C=c,l|0}function zr(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function oDe(s){return s=s|0,(n[(lR()|0)+24>>2]|0)+(s*12|0)|0}function aDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+48|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=lDe(f)|0,C=d,f|0}function lDe(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=cR(N5()|0)|0,f?(uR(l,f),AR(c,l),cDe(s,c),s=fR(l)|0):s=uDe(s)|0,C=d,s|0}function N5(){var s=0;return o[7632]|0||(CDe(9184),pr(25,9184,U|0)|0,s=7632,n[s>>2]=1,n[s+4>>2]=0),9184}function cR(s){return s=s|0,n[s+36>>2]|0}function uR(s,l){s=s|0,l=l|0,n[s>>2]=l,n[s+4>>2]=s,n[s+8>>2]=0}function AR(s,l){s=s|0,l=l|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=0}function cDe(s,l){s=s|0,l=l|0,hDe(l,s,s+8|0,s+16|0,s+24|0,s+32|0,s+40|0)|0}function fR(s){return s=s|0,n[(n[s+4>>2]|0)+8>>2]|0}function uDe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,F=0;F=C,C=C+16|0,c=F+4|0,f=F,d=Za(8)|0,m=d,B=Yt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[s>>2],k=k+4|0,s=s+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Yt(8)|0,B=n[l>>2]|0,n[f>>2]=0,n[c>>2]=n[f>>2],O5(k,B,c),n[d>>2]=k,C=F,m|0}function O5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Yt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1092,n[c+12>>2]=l,n[s+4>>2]=c}function ADe(s){s=s|0,im(s),yt(s)}function fDe(s){s=s|0,s=n[s+12>>2]|0,s|0&&yt(s)}function pDe(s){s=s|0,yt(s)}function hDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,m=gDe(n[s>>2]|0,l,c,f,d,m,B)|0,B=s+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function gDe(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0;var k=0,F=0;return k=C,C=C+16|0,F=k,$a(F),s=ys(s)|0,B=dDe(s,+E[l>>3],+E[c>>3],+E[f>>3],+E[d>>3],+E[m>>3],+E[B>>3])|0,el(F),C=k,B|0}function dDe(s,l,c,f,d,m,B){s=s|0,l=+l,c=+c,f=+f,d=+d,m=+m,B=+B;var k=0;return k=jo(mDe()|0)|0,l=+ma(l),c=+ma(c),f=+ma(f),d=+ma(d),m=+ma(m),Ts(0,k|0,s|0,+l,+c,+f,+d,+m,+ +ma(B))|0}function mDe(){var s=0;return o[7624]|0||(yDe(9172),s=7624,n[s>>2]=1,n[s+4>>2]=0),9172}function yDe(s){s=s|0,ao(s,EDe()|0,6)}function EDe(){return 1112}function CDe(s){s=s|0,Pp(s)}function IDe(s){s=s|0,M5(s+24|0),U5(s+16|0)}function M5(s){s=s|0,BDe(s)}function U5(s){s=s|0,wDe(s)}function wDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,yt(c);while(l|0);n[s>>2]=0}function BDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,yt(c);while(l|0);n[s>>2]=0}function Pp(s){s=s|0;var l=0;n[s+16>>2]=0,n[s+20>>2]=0,l=s+24|0,n[l>>2]=0,n[s+28>>2]=l,n[s+36>>2]=0,o[s+40>>0]=0,o[s+41>>0]=0}function vDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],DDe(s,c,d,0),C=f}function DDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=pR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=SDe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,PDe(m,f)|0,f),C=d}function pR(){var s=0,l=0;if(o[7640]|0||(H5(9232),pr(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9232)|0)){s=9232,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));H5(9232)}return 9232}function SDe(s){return s=s|0,0}function PDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=pR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],_5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(xDe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function _5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function xDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=bDe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,kDe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],_5(m,f,c),n[F>>2]=(n[F>>2]|0)+12,QDe(s,k),FDe(k),C=M;return}}function bDe(s){return s=s|0,357913941}function kDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function QDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function FDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function H5(s){s=s|0,LDe(s)}function RDe(s){s=s|0,TDe(s+24|0)}function TDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function LDe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,1,l,NDe()|0,3),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function NDe(){return 1144}function ODe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,F=0;m=C,C=C+16|0,B=m+8|0,k=m,F=MDe(s)|0,s=n[F+4>>2]|0,n[k>>2]=n[F>>2],n[k+4>>2]=s,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],UDe(l,B,c,f,d),C=m}function MDe(s){return s=s|0,(n[(pR()|0)+24>>2]|0)+(s*12|0)|0}function UDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,F=0,M=0;M=C,C=C+16|0,B=M+2|0,k=M+1|0,F=M,m=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(m=n[(n[s>>2]|0)+m>>2]|0),Tu(B,c),c=+Lu(B,c),Tu(k,f),f=+Lu(k,f),XA(F,d),F=ZA(F,d)|0,rW[m&1](s,c,f,F),C=M}function Tu(s,l){s=s|0,l=+l}function Lu(s,l){return s=s|0,l=+l,+ +HDe(l)}function XA(s,l){s=s|0,l=l|0}function ZA(s,l){return s=s|0,l=l|0,_De(l)|0}function _De(s){return s=s|0,s|0}function HDe(s){return s=+s,+s}function qDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jDe(s,c,d,1),C=f}function jDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=hR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=GDe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,WDe(m,f)|0,f),C=d}function hR(){var s=0,l=0;if(o[7648]|0||(j5(9268),pr(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9268)|0)){s=9268,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));j5(9268)}return 9268}function GDe(s){return s=s|0,0}function WDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=hR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],q5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(YDe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function q5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function YDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=VDe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,KDe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],q5(m,f,c),n[F>>2]=(n[F>>2]|0)+12,JDe(s,k),zDe(k),C=M;return}}function VDe(s){return s=s|0,357913941}function KDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function JDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function zDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function j5(s){s=s|0,$De(s)}function XDe(s){s=s|0,ZDe(s+24|0)}function ZDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function $De(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,4,l,eSe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function eSe(){return 1160}function tSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=rSe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=nSe(l,f)|0,C=c,l|0}function rSe(s){return s=s|0,(n[(hR()|0)+24>>2]|0)+(s*12|0)|0}function nSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),G5(_0[c&31](s)|0)|0}function G5(s){return s=s|0,s&1|0}function iSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],sSe(s,c,d,0),C=f}function sSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=gR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=oSe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,aSe(m,f)|0,f),C=d}function gR(){var s=0,l=0;if(o[7656]|0||(Y5(9304),pr(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9304)|0)){s=9304,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Y5(9304)}return 9304}function oSe(s){return s=s|0,0}function aSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=gR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],W5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(lSe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function W5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function lSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=cSe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,uSe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],W5(m,f,c),n[F>>2]=(n[F>>2]|0)+12,ASe(s,k),fSe(k),C=M;return}}function cSe(s){return s=s|0,357913941}function uSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function ASe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function fSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function Y5(s){s=s|0,gSe(s)}function pSe(s){s=s|0,hSe(s+24|0)}function hSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function gSe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,5,l,dSe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function dSe(){return 1164}function mSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=ySe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ESe(l,d,c),C=f}function ySe(s){return s=s|0,(n[(gR()|0)+24>>2]|0)+(s*12|0)|0}function ESe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),xp(d,c),c=bp(d,c)|0,tf[f&31](s,c),kp(d),C=m}function xp(s,l){s=s|0,l=l|0,CSe(s,l)}function bp(s,l){return s=s|0,l=l|0,s|0}function kp(s){s=s|0,xu(s)}function CSe(s,l){s=s|0,l=l|0,dR(s,l)}function dR(s,l){s=s|0,l=l|0,n[s>>2]=l}function ISe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],wSe(s,c,d,0),C=f}function wSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=mR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=BSe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,vSe(m,f)|0,f),C=d}function mR(){var s=0,l=0;if(o[7664]|0||(K5(9340),pr(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9340)|0)){s=9340,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));K5(9340)}return 9340}function BSe(s){return s=s|0,0}function vSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=mR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],V5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(DSe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function V5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function DSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=SSe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,PSe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],V5(m,f,c),n[F>>2]=(n[F>>2]|0)+12,xSe(s,k),bSe(k),C=M;return}}function SSe(s){return s=s|0,357913941}function PSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function xSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function bSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function K5(s){s=s|0,FSe(s)}function kSe(s){s=s|0,QSe(s+24|0)}function QSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function FSe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,4,l,RSe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function RSe(){return 1180}function TSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=LSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=NSe(l,d,c)|0,C=f,c|0}function LSe(s){return s=s|0,(n[(mR()|0)+24>>2]|0)+(s*12|0)|0}function NSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),F0(d,c),d=R0(d,c)|0,d=FD(pT[f&15](s,d)|0)|0,C=m,d|0}function F0(s,l){s=s|0,l=l|0}function R0(s,l){return s=s|0,l=l|0,OSe(l)|0}function FD(s){return s=s|0,s|0}function OSe(s){return s=s|0,s|0}function MSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],USe(s,c,d,0),C=f}function USe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=yR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=_Se(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,HSe(m,f)|0,f),C=d}function yR(){var s=0,l=0;if(o[7672]|0||(z5(9376),pr(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9376)|0)){s=9376,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));z5(9376)}return 9376}function _Se(s){return s=s|0,0}function HSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=yR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],J5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(qSe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function J5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function qSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=jSe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,GSe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],J5(m,f,c),n[F>>2]=(n[F>>2]|0)+12,WSe(s,k),YSe(k),C=M;return}}function jSe(s){return s=s|0,357913941}function GSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function WSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function YSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function z5(s){s=s|0,JSe(s)}function VSe(s){s=s|0,KSe(s+24|0)}function KSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function JSe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,5,l,X5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function X5(){return 1196}function zSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=XSe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=ZSe(l,f)|0,C=c,l|0}function XSe(s){return s=s|0,(n[(yR()|0)+24>>2]|0)+(s*12|0)|0}function ZSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),FD(_0[c&31](s)|0)|0}function $Se(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ePe(s,c,d,1),C=f}function ePe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=ER()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=tPe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,rPe(m,f)|0,f),C=d}function ER(){var s=0,l=0;if(o[7680]|0||($5(9412),pr(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9412)|0)){s=9412,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));$5(9412)}return 9412}function tPe(s){return s=s|0,0}function rPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=ER()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Z5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(nPe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function Z5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function nPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=iPe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,sPe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],Z5(m,f,c),n[F>>2]=(n[F>>2]|0)+12,oPe(s,k),aPe(k),C=M;return}}function iPe(s){return s=s|0,357913941}function sPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function oPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function aPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function $5(s){s=s|0,uPe(s)}function lPe(s){s=s|0,cPe(s+24|0)}function cPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function uPe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,6,l,e9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function e9(){return 1200}function APe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=fPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=pPe(l,f)|0,C=c,l|0}function fPe(s){return s=s|0,(n[(ER()|0)+24>>2]|0)+(s*12|0)|0}function pPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),RD(_0[c&31](s)|0)|0}function RD(s){return s=s|0,s|0}function hPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],gPe(s,c,d,0),C=f}function gPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=CR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=dPe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,mPe(m,f)|0,f),C=d}function CR(){var s=0,l=0;if(o[7688]|0||(r9(9448),pr(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9448)|0)){s=9448,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));r9(9448)}return 9448}function dPe(s){return s=s|0,0}function mPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=CR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],t9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(yPe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function t9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function yPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=EPe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,CPe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],t9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,IPe(s,k),wPe(k),C=M;return}}function EPe(s){return s=s|0,357913941}function CPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function IPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function wPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function r9(s){s=s|0,DPe(s)}function BPe(s){s=s|0,vPe(s+24|0)}function vPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function DPe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,6,l,n9()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function n9(){return 1204}function SPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=PPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xPe(l,d,c),C=f}function PPe(s){return s=s|0,(n[(CR()|0)+24>>2]|0)+(s*12|0)|0}function xPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),IR(d,c),d=wR(d,c)|0,tf[f&31](s,d),C=m}function IR(s,l){s=s|0,l=l|0}function wR(s,l){return s=s|0,l=l|0,bPe(l)|0}function bPe(s){return s=s|0,s|0}function kPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],QPe(s,c,d,0),C=f}function QPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=BR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=FPe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,RPe(m,f)|0,f),C=d}function BR(){var s=0,l=0;if(o[7696]|0||(s9(9484),pr(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9484)|0)){s=9484,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));s9(9484)}return 9484}function FPe(s){return s=s|0,0}function RPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=BR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],i9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(TPe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function i9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function TPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=LPe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,NPe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],i9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,OPe(s,k),MPe(k),C=M;return}}function LPe(s){return s=s|0,357913941}function NPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function OPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function MPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function s9(s){s=s|0,HPe(s)}function UPe(s){s=s|0,_Pe(s+24|0)}function _Pe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function HPe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,1,l,qPe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function qPe(){return 1212}function jPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=GPe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],WPe(l,m,c,f),C=d}function GPe(s){return s=s|0,(n[(BR()|0)+24>>2]|0)+(s*12|0)|0}function WPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),IR(m,c),m=wR(m,c)|0,F0(B,f),B=R0(B,f)|0,sw[d&15](s,m,B),C=k}function YPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],VPe(s,c,d,1),C=f}function VPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=vR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=KPe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,JPe(m,f)|0,f),C=d}function vR(){var s=0,l=0;if(o[7704]|0||(a9(9520),pr(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9520)|0)){s=9520,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));a9(9520)}return 9520}function KPe(s){return s=s|0,0}function JPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=vR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],o9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(zPe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function o9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function zPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=XPe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,ZPe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],o9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,$Pe(s,k),exe(k),C=M;return}}function XPe(s){return s=s|0,357913941}function ZPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function $Pe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function exe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function a9(s){s=s|0,nxe(s)}function txe(s){s=s|0,rxe(s+24|0)}function rxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function nxe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,1,l,ixe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function ixe(){return 1224}function sxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;return d=C,C=C+16|0,m=d+8|0,B=d,k=oxe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],f=+axe(l,m,c),C=d,+f}function oxe(s){return s=s|0,(n[(vR()|0)+24>>2]|0)+(s*12|0)|0}function axe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,B=+Ru(+iW[f&7](s,d)),C=m,+B}function lxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],cxe(s,c,d,1),C=f}function cxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=DR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=uxe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,Axe(m,f)|0,f),C=d}function DR(){var s=0,l=0;if(o[7712]|0||(c9(9556),pr(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9556)|0)){s=9556,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));c9(9556)}return 9556}function uxe(s){return s=s|0,0}function Axe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=DR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],l9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(fxe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function l9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function fxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=pxe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,hxe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],l9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,gxe(s,k),dxe(k),C=M;return}}function pxe(s){return s=s|0,357913941}function hxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function gxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function dxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function c9(s){s=s|0,Exe(s)}function mxe(s){s=s|0,yxe(s+24|0)}function yxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function Exe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,5,l,Cxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Cxe(){return 1232}function Ixe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=wxe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=+Bxe(l,d),C=f,+c}function wxe(s){return s=s|0,(n[(DR()|0)+24>>2]|0)+(s*12|0)|0}function Bxe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),+ +Ru(+nW[c&15](s))}function vxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Dxe(s,c,d,1),C=f}function Dxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=SR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Sxe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,Pxe(m,f)|0,f),C=d}function SR(){var s=0,l=0;if(o[7720]|0||(A9(9592),pr(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9592)|0)){s=9592,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));A9(9592)}return 9592}function Sxe(s){return s=s|0,0}function Pxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=SR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],u9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(xxe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function u9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function xxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=bxe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,kxe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],u9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,Qxe(s,k),Fxe(k),C=M;return}}function bxe(s){return s=s|0,357913941}function kxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Qxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Fxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function A9(s){s=s|0,Lxe(s)}function Rxe(s){s=s|0,Txe(s+24|0)}function Txe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function Lxe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,7,l,Nxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Nxe(){return 1276}function Oxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Mxe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=Uxe(l,f)|0,C=c,l|0}function Mxe(s){return s=s|0,(n[(SR()|0)+24>>2]|0)+(s*12|0)|0}function Uxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+16|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=f9(f)|0,C=d,f|0}function f9(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=cR(p9()|0)|0,f?(uR(l,f),AR(c,l),_xe(s,c),s=fR(l)|0):s=Hxe(s)|0,C=d,s|0}function p9(){var s=0;return o[7736]|0||(Xxe(9640),pr(25,9640,U|0)|0,s=7736,n[s>>2]=1,n[s+4>>2]=0),9640}function _xe(s,l){s=s|0,l=l|0,Wxe(l,s,s+8|0)|0}function Hxe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Za(8)|0,l=f,k=Yt(16)|0,n[k>>2]=n[s>>2],n[k+4>>2]=n[s+4>>2],n[k+8>>2]=n[s+8>>2],n[k+12>>2]=n[s+12>>2],m=l+4|0,n[m>>2]=k,s=Yt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],PR(s,m,d),n[f>>2]=s,C=c,l|0}function PR(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Yt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1244,n[c+12>>2]=l,n[s+4>>2]=c}function qxe(s){s=s|0,im(s),yt(s)}function jxe(s){s=s|0,s=n[s+12>>2]|0,s|0&&yt(s)}function Gxe(s){s=s|0,yt(s)}function Wxe(s,l,c){return s=s|0,l=l|0,c=c|0,l=Yxe(n[s>>2]|0,l,c)|0,c=s+4|0,n[(n[c>>2]|0)+8>>2]=l,n[(n[c>>2]|0)+8>>2]|0}function Yxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return f=C,C=C+16|0,d=f,$a(d),s=ys(s)|0,c=Vxe(s,n[l>>2]|0,+E[c>>3])|0,el(d),C=f,c|0}function Vxe(s,l,c){s=s|0,l=l|0,c=+c;var f=0;return f=jo(Kxe()|0)|0,l=Xd(l)|0,pc(0,f|0,s|0,l|0,+ +ma(c))|0}function Kxe(){var s=0;return o[7728]|0||(Jxe(9628),s=7728,n[s>>2]=1,n[s+4>>2]=0),9628}function Jxe(s){s=s|0,ao(s,zxe()|0,2)}function zxe(){return 1264}function Xxe(s){s=s|0,Pp(s)}function Zxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$xe(s,c,d,1),C=f}function $xe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=xR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=ebe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,tbe(m,f)|0,f),C=d}function xR(){var s=0,l=0;if(o[7744]|0||(g9(9684),pr(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9684)|0)){s=9684,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));g9(9684)}return 9684}function ebe(s){return s=s|0,0}function tbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=xR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],h9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(rbe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function h9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function rbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=nbe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,ibe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],h9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,sbe(s,k),obe(k),C=M;return}}function nbe(s){return s=s|0,357913941}function ibe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function sbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function obe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function g9(s){s=s|0,cbe(s)}function abe(s){s=s|0,lbe(s+24|0)}function lbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function cbe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,5,l,ube()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function ube(){return 1280}function Abe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=fbe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=pbe(l,d,c)|0,C=f,c|0}function fbe(s){return s=s|0,(n[(xR()|0)+24>>2]|0)+(s*12|0)|0}function pbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return B=C,C=C+32|0,d=B,m=B+16|0,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(m,c),m=ZA(m,c)|0,sw[f&15](d,s,m),m=f9(d)|0,C=B,m|0}function hbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],gbe(s,c,d,1),C=f}function gbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=bR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=dbe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,mbe(m,f)|0,f),C=d}function bR(){var s=0,l=0;if(o[7752]|0||(m9(9720),pr(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9720)|0)){s=9720,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));m9(9720)}return 9720}function dbe(s){return s=s|0,0}function mbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=bR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],d9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(ybe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function d9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function ybe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ebe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,Cbe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],d9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,Ibe(s,k),wbe(k),C=M;return}}function Ebe(s){return s=s|0,357913941}function Cbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Ibe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function wbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function m9(s){s=s|0,Dbe(s)}function Bbe(s){s=s|0,vbe(s+24|0)}function vbe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function Dbe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,8,l,Sbe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Sbe(){return 1288}function Pbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=xbe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=bbe(l,f)|0,C=c,l|0}function xbe(s){return s=s|0,(n[(bR()|0)+24>>2]|0)+(s*12|0)|0}function bbe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),k0(_0[c&31](s)|0)|0}function kbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Qbe(s,c,d,0),C=f}function Qbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=kR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Fbe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,Rbe(m,f)|0,f),C=d}function kR(){var s=0,l=0;if(o[7760]|0||(E9(9756),pr(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9756)|0)){s=9756,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));E9(9756)}return 9756}function Fbe(s){return s=s|0,0}function Rbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=kR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],y9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Tbe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function y9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Tbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Lbe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,Nbe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],y9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,Obe(s,k),Mbe(k),C=M;return}}function Lbe(s){return s=s|0,357913941}function Nbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Obe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Mbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function E9(s){s=s|0,Hbe(s)}function Ube(s){s=s|0,_be(s+24|0)}function _be(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function Hbe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,8,l,qbe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function qbe(){return 1292}function jbe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Gbe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Wbe(l,d,c),C=f}function Gbe(s){return s=s|0,(n[(kR()|0)+24>>2]|0)+(s*12|0)|0}function Wbe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Tu(d,c),c=+Lu(d,c),eW[f&31](s,c),C=m}function Ybe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Vbe(s,c,d,0),C=f}function Vbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=QR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Kbe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,Jbe(m,f)|0,f),C=d}function QR(){var s=0,l=0;if(o[7768]|0||(I9(9792),pr(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9792)|0)){s=9792,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));I9(9792)}return 9792}function Kbe(s){return s=s|0,0}function Jbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=QR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],C9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(zbe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function C9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function zbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Xbe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,Zbe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],C9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,$be(s,k),eke(k),C=M;return}}function Xbe(s){return s=s|0,357913941}function Zbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function $be(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function eke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function I9(s){s=s|0,nke(s)}function tke(s){s=s|0,rke(s+24|0)}function rke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function nke(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,1,l,ike()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function ike(){return 1300}function ske(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=oke(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],ake(l,m,c,f),C=d}function oke(s){return s=s|0,(n[(QR()|0)+24>>2]|0)+(s*12|0)|0}function ake(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,Tu(B,f),f=+Lu(B,f),lW[d&15](s,m,f),C=k}function lke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],cke(s,c,d,0),C=f}function cke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=FR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=uke(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,Ake(m,f)|0,f),C=d}function FR(){var s=0,l=0;if(o[7776]|0||(B9(9828),pr(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9828)|0)){s=9828,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));B9(9828)}return 9828}function uke(s){return s=s|0,0}function Ake(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=FR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],w9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(fke(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function w9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function fke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=pke(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,hke(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],w9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,gke(s,k),dke(k),C=M;return}}function pke(s){return s=s|0,357913941}function hke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function gke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function dke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function B9(s){s=s|0,Eke(s)}function mke(s){s=s|0,yke(s+24|0)}function yke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function Eke(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,7,l,Cke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Cke(){return 1312}function Ike(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=wke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bke(l,d,c),C=f}function wke(s){return s=s|0,(n[(FR()|0)+24>>2]|0)+(s*12|0)|0}function Bke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,tf[f&31](s,d),C=m}function vke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Dke(s,c,d,0),C=f}function Dke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=RR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Ske(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,Pke(m,f)|0,f),C=d}function RR(){var s=0,l=0;if(o[7784]|0||(D9(9864),pr(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9864)|0)){s=9864,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));D9(9864)}return 9864}function Ske(s){return s=s|0,0}function Pke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=RR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],v9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(xke(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function v9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function xke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=bke(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,kke(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],v9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,Qke(s,k),Fke(k),C=M;return}}function bke(s){return s=s|0,357913941}function kke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Qke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Fke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function D9(s){s=s|0,Lke(s)}function Rke(s){s=s|0,Tke(s+24|0)}function Tke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function Lke(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,8,l,Nke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Nke(){return 1320}function Oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Mke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uke(l,d,c),C=f}function Mke(s){return s=s|0,(n[(RR()|0)+24>>2]|0)+(s*12|0)|0}function Uke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),_ke(d,c),d=Hke(d,c)|0,tf[f&31](s,d),C=m}function _ke(s,l){s=s|0,l=l|0}function Hke(s,l){return s=s|0,l=l|0,qke(l)|0}function qke(s){return s=s|0,s|0}function jke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Gke(s,c,d,0),C=f}function Gke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=TR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=Wke(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,Yke(m,f)|0,f),C=d}function TR(){var s=0,l=0;if(o[7792]|0||(P9(9900),pr(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9900)|0)){s=9900,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));P9(9900)}return 9900}function Wke(s){return s=s|0,0}function Yke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=TR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],S9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Vke(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function S9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Vke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Kke(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,Jke(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],S9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,zke(s,k),Xke(k),C=M;return}}function Kke(s){return s=s|0,357913941}function Jke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function zke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Xke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function P9(s){s=s|0,eQe(s)}function Zke(s){s=s|0,$ke(s+24|0)}function $ke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function eQe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,22,l,tQe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function tQe(){return 1344}function rQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;c=C,C=C+16|0,f=c+8|0,d=c,m=nQe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],iQe(l,f),C=c}function nQe(s){return s=s|0,(n[(TR()|0)+24>>2]|0)+(s*12|0)|0}function iQe(s,l){s=s|0,l=l|0;var c=0;c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),ef[c&127](s)}function sQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=LR()|0,s=oQe(c)|0,yn(m,l,d,s,aQe(c,f)|0,f)}function LR(){var s=0,l=0;if(o[7800]|0||(b9(9936),pr(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9936)|0)){s=9936,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));b9(9936)}return 9936}function oQe(s){return s=s|0,s|0}function aQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,F=LR()|0,B=F+24|0,l=dr(l,4)|0,n[m>>2]=l,c=F+28|0,f=n[c>>2]|0,f>>>0<(n[F+32>>2]|0)>>>0?(x9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(lQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function x9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function lQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=cQe(s)|0,f>>>0>>0)Zr(s);else{F=n[s>>2]|0,O=(n[s+8>>2]|0)-F|0,M=O>>2,uQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-F>>3,s+8|0),B=d+8|0,x9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,AQe(s,d),fQe(d),C=k;return}}function cQe(s){return s=s|0,536870911}function uQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Yt(l<<3)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function AQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function fQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&&yt(s)}function b9(s){s=s|0,gQe(s)}function pQe(s){s=s|0,hQe(s+24|0)}function hQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function gQe(s){s=s|0;var l=0;l=Jr()|0,zr(s,1,23,l,n9()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function dQe(s,l){s=s|0,l=l|0,yQe(n[(mQe(s)|0)>>2]|0,l)}function mQe(s){return s=s|0,(n[(LR()|0)+24>>2]|0)+(s<<3)|0}function yQe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,IR(f,l),l=wR(f,l)|0,ef[s&127](l),C=c}function EQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=NR()|0,s=CQe(c)|0,yn(m,l,d,s,IQe(c,f)|0,f)}function NR(){var s=0,l=0;if(o[7808]|0||(Q9(9972),pr(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(Nr(9972)|0)){s=9972,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Q9(9972)}return 9972}function CQe(s){return s=s|0,s|0}function IQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,F=NR()|0,B=F+24|0,l=dr(l,4)|0,n[m>>2]=l,c=F+28|0,f=n[c>>2]|0,f>>>0<(n[F+32>>2]|0)>>>0?(k9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(wQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function k9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function wQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=BQe(s)|0,f>>>0>>0)Zr(s);else{F=n[s>>2]|0,O=(n[s+8>>2]|0)-F|0,M=O>>2,vQe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-F>>3,s+8|0),B=d+8|0,k9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,DQe(s,d),SQe(d),C=k;return}}function BQe(s){return s=s|0,536870911}function vQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Yt(l<<3)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function DQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function SQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&&yt(s)}function Q9(s){s=s|0,bQe(s)}function PQe(s){s=s|0,xQe(s+24|0)}function xQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function bQe(s){s=s|0;var l=0;l=Jr()|0,zr(s,1,9,l,kQe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kQe(){return 1348}function QQe(s,l){return s=s|0,l=l|0,RQe(n[(FQe(s)|0)>>2]|0,l)|0}function FQe(s){return s=s|0,(n[(NR()|0)+24>>2]|0)+(s<<3)|0}function RQe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,F9(f,l),l=R9(f,l)|0,l=FD(_0[s&31](l)|0)|0,C=c,l|0}function F9(s,l){s=s|0,l=l|0}function R9(s,l){return s=s|0,l=l|0,TQe(l)|0}function TQe(s){return s=s|0,s|0}function LQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=OR()|0,s=NQe(c)|0,yn(m,l,d,s,OQe(c,f)|0,f)}function OR(){var s=0,l=0;if(o[7816]|0||(L9(10008),pr(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(Nr(10008)|0)){s=10008,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));L9(10008)}return 10008}function NQe(s){return s=s|0,s|0}function OQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,F=OR()|0,B=F+24|0,l=dr(l,4)|0,n[m>>2]=l,c=F+28|0,f=n[c>>2]|0,f>>>0<(n[F+32>>2]|0)>>>0?(T9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(MQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function T9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function MQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=UQe(s)|0,f>>>0>>0)Zr(s);else{F=n[s>>2]|0,O=(n[s+8>>2]|0)-F|0,M=O>>2,_Qe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-F>>3,s+8|0),B=d+8|0,T9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,HQe(s,d),qQe(d),C=k;return}}function UQe(s){return s=s|0,536870911}function _Qe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Yt(l<<3)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function HQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&&yt(s)}function L9(s){s=s|0,WQe(s)}function jQe(s){s=s|0,GQe(s+24|0)}function GQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function WQe(s){s=s|0;var l=0;l=Jr()|0,zr(s,1,15,l,X5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function YQe(s){return s=s|0,KQe(n[(VQe(s)|0)>>2]|0)|0}function VQe(s){return s=s|0,(n[(OR()|0)+24>>2]|0)+(s<<3)|0}function KQe(s){return s=s|0,FD(VD[s&7]()|0)|0}function JQe(){var s=0;return o[7832]|0||(nFe(10052),pr(25,10052,U|0)|0,s=7832,n[s>>2]=1,n[s+4>>2]=0),10052}function zQe(s,l){s=s|0,l=l|0,n[s>>2]=XQe()|0,n[s+4>>2]=ZQe()|0,n[s+12>>2]=l,n[s+8>>2]=$Qe()|0,n[s+32>>2]=2}function XQe(){return 11709}function ZQe(){return 1188}function $Qe(){return TD()|0}function eFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Qp(f,896)|0)==512?c|0&&(tFe(c),yt(c)):l|0&&(Hd(l),yt(l))}function Qp(s,l){return s=s|0,l=l|0,l&s|0}function tFe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Rp(s)}function TD(){var s=0;return o[7824]|0||(n[2511]=rFe()|0,n[2512]=0,s=7824,n[s>>2]=1,n[s+4>>2]=0),10044}function rFe(){return 0}function nFe(s){s=s|0,Pp(s)}function iFe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0;l=C,C=C+32|0,c=l+24|0,m=l+16|0,d=l+8|0,f=l,sFe(s,4827),oFe(s,4834,3)|0,aFe(s,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],lFe(s,4841,c)|0,n[d>>2]=1,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],cFe(s,4871,c)|0,n[f>>2]=10,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],uFe(s,4891,c)|0,C=l}function sFe(s,l){s=s|0,l=l|0;var c=0;c=qRe()|0,n[s>>2]=c,jRe(c,l),Fp(n[s>>2]|0)}function oFe(s,l,c){return s=s|0,l=l|0,c=c|0,SRe(s,mn(l)|0,c,0),s|0}function aFe(s,l,c){return s=s|0,l=l|0,c=c|0,ARe(s,mn(l)|0,c,0),s|0}function lFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],YFe(s,l,d),C=f,s|0}function cFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],PFe(s,l,d),C=f,s|0}function uFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],AFe(s,l,d),C=f,s|0}function AFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],fFe(s,c,d,1),C=f}function fFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=MR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=pFe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,hFe(m,f)|0,f),C=d}function MR(){var s=0,l=0;if(o[7840]|0||(O9(10100),pr(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(Nr(10100)|0)){s=10100,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));O9(10100)}return 10100}function pFe(s){return s=s|0,0}function hFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=MR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],N9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(gFe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function N9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function gFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=dFe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,mFe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],N9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,yFe(s,k),EFe(k),C=M;return}}function dFe(s){return s=s|0,357913941}function mFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function yFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function EFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function O9(s){s=s|0,wFe(s)}function CFe(s){s=s|0,IFe(s+24|0)}function IFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function wFe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,6,l,BFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function BFe(){return 1364}function vFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=DFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=SFe(l,d,c)|0,C=f,c|0}function DFe(s){return s=s|0,(n[(MR()|0)+24>>2]|0)+(s*12|0)|0}function SFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,d=G5(pT[f&15](s,d)|0)|0,C=m,d|0}function PFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xFe(s,c,d,0),C=f}function xFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=UR()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=bFe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,kFe(m,f)|0,f),C=d}function UR(){var s=0,l=0;if(o[7848]|0||(U9(10136),pr(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(Nr(10136)|0)){s=10136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));U9(10136)}return 10136}function bFe(s){return s=s|0,0}function kFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=UR()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],M9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(QFe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function M9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function QFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=FFe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,RFe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],M9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,TFe(s,k),LFe(k),C=M;return}}function FFe(s){return s=s|0,357913941}function RFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function TFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function LFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function U9(s){s=s|0,MFe(s)}function NFe(s){s=s|0,OFe(s+24|0)}function OFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function MFe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,9,l,UFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function UFe(){return 1372}function _Fe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=HFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],qFe(l,d,c),C=f}function HFe(s){return s=s|0,(n[(UR()|0)+24>>2]|0)+(s*12|0)|0}function qFe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=Ze;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),jFe(d,c),B=y(GFe(d,c)),$7[f&1](s,B),C=m}function jFe(s,l){s=s|0,l=+l}function GFe(s,l){return s=s|0,l=+l,y(WFe(l))}function WFe(s){return s=+s,y(s)}function YFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=mn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],VFe(s,c,d,0),C=f}function VFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,F=0,M=0,O=0;d=C,C=C+32|0,m=d+16|0,O=d+8|0,k=d,M=n[c>>2]|0,F=n[c+4>>2]|0,B=n[s>>2]|0,s=_R()|0,n[O>>2]=M,n[O+4>>2]=F,n[m>>2]=n[O>>2],n[m+4>>2]=n[O+4>>2],c=KFe(m)|0,n[k>>2]=M,n[k+4>>2]=F,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],yn(B,l,s,c,JFe(m,f)|0,f),C=d}function _R(){var s=0,l=0;if(o[7856]|0||(H9(10172),pr(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(Nr(10172)|0)){s=10172,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));H9(10172)}return 10172}function KFe(s){return s=s|0,0}function JFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0;return O=C,C=C+32|0,d=O+24|0,B=O+16|0,k=O,F=O+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,j=_R()|0,M=j+24|0,s=dr(l,4)|0,n[F>>2]=s,l=j+28|0,c=n[l>>2]|0,c>>>0<(n[j+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],_9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(zFe(M,k,F),s=n[l>>2]|0),C=O,((s-(n[M>>2]|0)|0)/12|0)+-1|0}function _9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function zFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;if(M=C,C=C+48|0,f=M+32|0,B=M+24|0,k=M,F=s+4|0,d=(((n[F>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=XFe(s)|0,m>>>0>>0)Zr(s);else{O=n[s>>2]|0,oe=((n[s+8>>2]|0)-O|0)/12|0,j=oe<<1,ZFe(k,oe>>>0>>1>>>0?j>>>0>>0?d:j:m,((n[F>>2]|0)-O|0)/12|0,s+8|0),F=k+8|0,m=n[F>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],_9(m,f,c),n[F>>2]=(n[F>>2]|0)+12,$Fe(s,k),eRe(k),C=M;return}}function XFe(s){return s=s|0,357913941}function ZFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Yt(l*12|0)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function $Fe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function eRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&&yt(s)}function H9(s){s=s|0,nRe(s)}function tRe(s){s=s|0,rRe(s+24|0)}function rRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),yt(c))}function nRe(s){s=s|0;var l=0;l=Jr()|0,zr(s,2,3,l,iRe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function iRe(){return 1380}function sRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=oRe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],aRe(l,m,c,f),C=d}function oRe(s){return s=s|0,(n[(_R()|0)+24>>2]|0)+(s*12|0)|0}function aRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,lRe(B,f),B=cRe(B,f)|0,sw[d&15](s,m,B),C=k}function lRe(s,l){s=s|0,l=l|0}function cRe(s,l){return s=s|0,l=l|0,uRe(l)|0}function uRe(s){return s=s|0,(s|0)!=0|0}function ARe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=HR()|0,s=fRe(c)|0,yn(m,l,d,s,pRe(c,f)|0,f)}function HR(){var s=0,l=0;if(o[7864]|0||(j9(10208),pr(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(Nr(10208)|0)){s=10208,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));j9(10208)}return 10208}function fRe(s){return s=s|0,s|0}function pRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,F=HR()|0,B=F+24|0,l=dr(l,4)|0,n[m>>2]=l,c=F+28|0,f=n[c>>2]|0,f>>>0<(n[F+32>>2]|0)>>>0?(q9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(hRe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function q9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function hRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=gRe(s)|0,f>>>0>>0)Zr(s);else{F=n[s>>2]|0,O=(n[s+8>>2]|0)-F|0,M=O>>2,dRe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-F>>3,s+8|0),B=d+8|0,q9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,mRe(s,d),yRe(d),C=k;return}}function gRe(s){return s=s|0,536870911}function dRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Yt(l<<3)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function mRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function yRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&&yt(s)}function j9(s){s=s|0,IRe(s)}function ERe(s){s=s|0,CRe(s+24|0)}function CRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function IRe(s){s=s|0;var l=0;l=Jr()|0,zr(s,1,24,l,wRe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function wRe(){return 1392}function BRe(s,l){s=s|0,l=l|0,DRe(n[(vRe(s)|0)>>2]|0,l)}function vRe(s){return s=s|0,(n[(HR()|0)+24>>2]|0)+(s<<3)|0}function DRe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,F9(f,l),l=R9(f,l)|0,ef[s&127](l),C=c}function SRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=qR()|0,s=PRe(c)|0,yn(m,l,d,s,xRe(c,f)|0,f)}function qR(){var s=0,l=0;if(o[7872]|0||(W9(10244),pr(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(Nr(10244)|0)){s=10244,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));W9(10244)}return 10244}function PRe(s){return s=s|0,s|0}function xRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,F=qR()|0,B=F+24|0,l=dr(l,4)|0,n[m>>2]=l,c=F+28|0,f=n[c>>2]|0,f>>>0<(n[F+32>>2]|0)>>>0?(G9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(bRe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function G9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function bRe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=kRe(s)|0,f>>>0>>0)Zr(s);else{F=n[s>>2]|0,O=(n[s+8>>2]|0)-F|0,M=O>>2,QRe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-F>>3,s+8|0),B=d+8|0,G9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,FRe(s,d),RRe(d),C=k;return}}function kRe(s){return s=s|0,536870911}function QRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Yt(l<<3)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function FRe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function RRe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&&yt(s)}function W9(s){s=s|0,NRe(s)}function TRe(s){s=s|0,LRe(s+24|0)}function LRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function NRe(s){s=s|0;var l=0;l=Jr()|0,zr(s,1,16,l,ORe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function ORe(){return 1400}function MRe(s){return s=s|0,_Re(n[(URe(s)|0)>>2]|0)|0}function URe(s){return s=s|0,(n[(qR()|0)+24>>2]|0)+(s<<3)|0}function _Re(s){return s=s|0,HRe(VD[s&7]()|0)|0}function HRe(s){return s=s|0,s|0}function qRe(){var s=0;return o[7880]|0||(JRe(10280),pr(25,10280,U|0)|0,s=7880,n[s>>2]=1,n[s+4>>2]=0),10280}function jRe(s,l){s=s|0,l=l|0,n[s>>2]=GRe()|0,n[s+4>>2]=WRe()|0,n[s+12>>2]=l,n[s+8>>2]=YRe()|0,n[s+32>>2]=4}function GRe(){return 11711}function WRe(){return 1356}function YRe(){return TD()|0}function VRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Qp(f,896)|0)==512?c|0&&(KRe(c),yt(c)):l|0&&(C0(l),yt(l))}function KRe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Rp(s)}function JRe(s){s=s|0,Pp(s)}function zRe(s){s=s|0,XRe(s,4920),ZRe(s)|0,$Re(s)|0}function XRe(s,l){s=s|0,l=l|0;var c=0;c=p9()|0,n[s>>2]=c,CTe(c,l),Fp(n[s>>2]|0)}function ZRe(s){s=s|0;var l=0;return l=n[s>>2]|0,T0(l,uTe()|0),s|0}function $Re(s){s=s|0;var l=0;return l=n[s>>2]|0,T0(l,eTe()|0),s|0}function eTe(){var s=0;return o[7888]|0||(Y9(10328),pr(53,10328,U|0)|0,s=7888,n[s>>2]=1,n[s+4>>2]=0),Nr(10328)|0||Y9(10328),10328}function T0(s,l){s=s|0,l=l|0,yn(s,0,l,0,0,0)}function Y9(s){s=s|0,nTe(s),L0(s,10)}function tTe(s){s=s|0,rTe(s+24|0)}function rTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function nTe(s){s=s|0;var l=0;l=Jr()|0,zr(s,5,1,l,aTe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function iTe(s,l,c){s=s|0,l=l|0,c=+c,sTe(s,l,c)}function L0(s,l){s=s|0,l=l|0,n[s+20>>2]=l}function sTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,m=f+8|0,k=f+13|0,d=f,B=f+12|0,XA(k,l),n[m>>2]=ZA(k,l)|0,Tu(B,c),E[d>>3]=+Lu(B,c),oTe(s,m,d),C=f}function oTe(s,l,c){s=s|0,l=l|0,c=c|0,Xa(s+8|0,n[l>>2]|0,+E[c>>3]),o[s+24>>0]=1}function aTe(){return 1404}function lTe(s,l){return s=s|0,l=+l,cTe(s,l)|0}function cTe(s,l){s=s|0,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;return f=C,C=C+16|0,m=f+4|0,B=f+8|0,k=f,d=Za(8)|0,c=d,F=Yt(16)|0,XA(m,s),s=ZA(m,s)|0,Tu(B,l),Xa(F,s,+Lu(B,l)),B=c+4|0,n[B>>2]=F,s=Yt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],PR(s,B,m),n[d>>2]=s,C=f,c|0}function uTe(){var s=0;return o[7896]|0||(V9(10364),pr(54,10364,U|0)|0,s=7896,n[s>>2]=1,n[s+4>>2]=0),Nr(10364)|0||V9(10364),10364}function V9(s){s=s|0,pTe(s),L0(s,55)}function ATe(s){s=s|0,fTe(s+24|0)}function fTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function pTe(s){s=s|0;var l=0;l=Jr()|0,zr(s,5,4,l,mTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hTe(s){s=s|0,gTe(s)}function gTe(s){s=s|0,dTe(s)}function dTe(s){s=s|0,K9(s+8|0),o[s+24>>0]=1}function K9(s){s=s|0,n[s>>2]=0,E[s+8>>3]=0}function mTe(){return 1424}function yTe(){return ETe()|0}function ETe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Za(8)|0,s=c,f=Yt(16)|0,K9(f),m=s+4|0,n[m>>2]=f,f=Yt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],PR(f,m,d),n[c>>2]=f,C=l,s|0}function CTe(s,l){s=s|0,l=l|0,n[s>>2]=ITe()|0,n[s+4>>2]=wTe()|0,n[s+12>>2]=l,n[s+8>>2]=BTe()|0,n[s+32>>2]=5}function ITe(){return 11710}function wTe(){return 1416}function BTe(){return LD()|0}function vTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Qp(f,896)|0)==512?c|0&&(DTe(c),yt(c)):l|0&&yt(l)}function DTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Rp(s)}function LD(){var s=0;return o[7904]|0||(n[2600]=STe()|0,n[2601]=0,s=7904,n[s>>2]=1,n[s+4>>2]=0),10400}function STe(){return n[357]|0}function PTe(s){s=s|0,xTe(s,4926),bTe(s)|0}function xTe(s,l){s=s|0,l=l|0;var c=0;c=N5()|0,n[s>>2]=c,_Te(c,l),Fp(n[s>>2]|0)}function bTe(s){s=s|0;var l=0;return l=n[s>>2]|0,T0(l,kTe()|0),s|0}function kTe(){var s=0;return o[7912]|0||(J9(10412),pr(56,10412,U|0)|0,s=7912,n[s>>2]=1,n[s+4>>2]=0),Nr(10412)|0||J9(10412),10412}function J9(s){s=s|0,RTe(s),L0(s,57)}function QTe(s){s=s|0,FTe(s+24|0)}function FTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function RTe(s){s=s|0;var l=0;l=Jr()|0,zr(s,5,5,l,OTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function TTe(s){s=s|0,LTe(s)}function LTe(s){s=s|0,NTe(s)}function NTe(s){s=s|0;var l=0,c=0;l=s+8|0,c=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(c|0));o[s+56>>0]=1}function OTe(){return 1432}function MTe(){return UTe()|0}function UTe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0;B=C,C=C+16|0,s=B+4|0,l=B,c=Za(8)|0,f=c,d=Yt(48)|0,m=d,k=m+48|0;do n[m>>2]=0,m=m+4|0;while((m|0)<(k|0));return m=f+4|0,n[m>>2]=d,k=Yt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[s>>2]=n[l>>2],O5(k,m,s),n[c>>2]=k,C=B,f|0}function _Te(s,l){s=s|0,l=l|0,n[s>>2]=HTe()|0,n[s+4>>2]=qTe()|0,n[s+12>>2]=l,n[s+8>>2]=jTe()|0,n[s+32>>2]=6}function HTe(){return 11704}function qTe(){return 1436}function jTe(){return LD()|0}function GTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Qp(f,896)|0)==512?c|0&&(WTe(c),yt(c)):l|0&&yt(l)}function WTe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Rp(s)}function YTe(s){s=s|0,VTe(s,4933),KTe(s)|0,JTe(s)|0}function VTe(s,l){s=s|0,l=l|0;var c=0;c=ELe()|0,n[s>>2]=c,CLe(c,l),Fp(n[s>>2]|0)}function KTe(s){s=s|0;var l=0;return l=n[s>>2]|0,T0(l,cLe()|0),s|0}function JTe(s){s=s|0;var l=0;return l=n[s>>2]|0,T0(l,zTe()|0),s|0}function zTe(){var s=0;return o[7920]|0||(z9(10452),pr(58,10452,U|0)|0,s=7920,n[s>>2]=1,n[s+4>>2]=0),Nr(10452)|0||z9(10452),10452}function z9(s){s=s|0,$Te(s),L0(s,1)}function XTe(s){s=s|0,ZTe(s+24|0)}function ZTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function $Te(s){s=s|0;var l=0;l=Jr()|0,zr(s,5,1,l,nLe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function eLe(s,l,c){s=s|0,l=+l,c=+c,tLe(s,l,c)}function tLe(s,l,c){s=s|0,l=+l,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,m=f+8|0,k=f+17|0,d=f,B=f+16|0,Tu(k,l),E[m>>3]=+Lu(k,l),Tu(B,c),E[d>>3]=+Lu(B,c),rLe(s,m,d),C=f}function rLe(s,l,c){s=s|0,l=l|0,c=c|0,X9(s+8|0,+E[l>>3],+E[c>>3]),o[s+24>>0]=1}function X9(s,l,c){s=s|0,l=+l,c=+c,E[s>>3]=l,E[s+8>>3]=c}function nLe(){return 1472}function iLe(s,l){return s=+s,l=+l,sLe(s,l)|0}function sLe(s,l){s=+s,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;return f=C,C=C+16|0,B=f+4|0,k=f+8|0,F=f,d=Za(8)|0,c=d,m=Yt(16)|0,Tu(B,s),s=+Lu(B,s),Tu(k,l),X9(m,s,+Lu(k,l)),k=c+4|0,n[k>>2]=m,m=Yt(8)|0,k=n[k>>2]|0,n[F>>2]=0,n[B>>2]=n[F>>2],Z9(m,k,B),n[d>>2]=m,C=f,c|0}function Z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Yt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1452,n[c+12>>2]=l,n[s+4>>2]=c}function oLe(s){s=s|0,im(s),yt(s)}function aLe(s){s=s|0,s=n[s+12>>2]|0,s|0&&yt(s)}function lLe(s){s=s|0,yt(s)}function cLe(){var s=0;return o[7928]|0||($9(10488),pr(59,10488,U|0)|0,s=7928,n[s>>2]=1,n[s+4>>2]=0),Nr(10488)|0||$9(10488),10488}function $9(s){s=s|0,fLe(s),L0(s,60)}function uLe(s){s=s|0,ALe(s+24|0)}function ALe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function fLe(s){s=s|0;var l=0;l=Jr()|0,zr(s,5,6,l,dLe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function pLe(s){s=s|0,hLe(s)}function hLe(s){s=s|0,gLe(s)}function gLe(s){s=s|0,e7(s+8|0),o[s+24>>0]=1}function e7(s){s=s|0,n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,n[s+12>>2]=0}function dLe(){return 1492}function mLe(){return yLe()|0}function yLe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Za(8)|0,s=c,f=Yt(16)|0,e7(f),m=s+4|0,n[m>>2]=f,f=Yt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],Z9(f,m,d),n[c>>2]=f,C=l,s|0}function ELe(){var s=0;return o[7936]|0||(SLe(10524),pr(25,10524,U|0)|0,s=7936,n[s>>2]=1,n[s+4>>2]=0),10524}function CLe(s,l){s=s|0,l=l|0,n[s>>2]=ILe()|0,n[s+4>>2]=wLe()|0,n[s+12>>2]=l,n[s+8>>2]=BLe()|0,n[s+32>>2]=7}function ILe(){return 11700}function wLe(){return 1484}function BLe(){return LD()|0}function vLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Qp(f,896)|0)==512?c|0&&(DLe(c),yt(c)):l|0&&yt(l)}function DLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Rp(s)}function SLe(s){s=s|0,Pp(s)}function PLe(s,l,c){s=s|0,l=l|0,c=c|0,s=mn(l)|0,l=xLe(c)|0,c=bLe(c,0)|0,sNe(s,l,c,jR()|0,0)}function xLe(s){return s=s|0,s|0}function bLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,F=jR()|0,B=F+24|0,l=dr(l,4)|0,n[m>>2]=l,c=F+28|0,f=n[c>>2]|0,f>>>0<(n[F+32>>2]|0)>>>0?(r7(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(NLe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function jR(){var s=0,l=0;if(o[7944]|0||(t7(10568),pr(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(Nr(10568)|0)){s=10568,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t7(10568)}return 10568}function t7(s){s=s|0,FLe(s)}function kLe(s){s=s|0,QLe(s+24|0)}function QLe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function FLe(s){s=s|0;var l=0;l=Jr()|0,zr(s,1,17,l,e9()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function RLe(s){return s=s|0,LLe(n[(TLe(s)|0)>>2]|0)|0}function TLe(s){return s=s|0,(n[(jR()|0)+24>>2]|0)+(s<<3)|0}function LLe(s){return s=s|0,RD(VD[s&7]()|0)|0}function r7(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function NLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=OLe(s)|0,f>>>0>>0)Zr(s);else{F=n[s>>2]|0,O=(n[s+8>>2]|0)-F|0,M=O>>2,MLe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-F>>3,s+8|0),B=d+8|0,r7(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,ULe(s,d),_Le(d),C=k;return}}function OLe(s){return s=s|0,536870911}function MLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Yt(l<<3)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function ULe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function _Le(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&&yt(s)}function HLe(){qLe()}function qLe(){jLe(10604)}function jLe(s){s=s|0,GLe(s,4955)}function GLe(s,l){s=s|0,l=l|0;var c=0;c=WLe()|0,n[s>>2]=c,YLe(c,l),Fp(n[s>>2]|0)}function WLe(){var s=0;return o[7952]|0||(tNe(10612),pr(25,10612,U|0)|0,s=7952,n[s>>2]=1,n[s+4>>2]=0),10612}function YLe(s,l){s=s|0,l=l|0,n[s>>2]=zLe()|0,n[s+4>>2]=XLe()|0,n[s+12>>2]=l,n[s+8>>2]=ZLe()|0,n[s+32>>2]=8}function Fp(s){s=s|0;var l=0,c=0;l=C,C=C+16|0,c=l,$d()|0,n[c>>2]=s,VLe(10608,c),C=l}function $d(){return o[11714]|0||(n[2652]=0,pr(62,10608,U|0)|0,o[11714]=1),10608}function VLe(s,l){s=s|0,l=l|0;var c=0;c=Yt(8)|0,n[c+4>>2]=n[l>>2],n[c>>2]=n[s>>2],n[s>>2]=c}function KLe(s){s=s|0,JLe(s)}function JLe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,yt(c);while(l|0);n[s>>2]=0}function zLe(){return 11715}function XLe(){return 1496}function ZLe(){return TD()|0}function $Le(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Qp(f,896)|0)==512?c|0&&(eNe(c),yt(c)):l|0&&yt(l)}function eNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Rp(s)}function tNe(s){s=s|0,Pp(s)}function rNe(s,l){s=s|0,l=l|0;var c=0,f=0;$d()|0,c=n[2652]|0;e:do if(c|0){for(;f=n[c+4>>2]|0,!(f|0&&!(O7(GR(f)|0,s)|0));)if(c=n[c>>2]|0,!c)break e;nNe(f,l)}while(!1)}function GR(s){return s=s|0,n[s+12>>2]|0}function nNe(s,l){s=s|0,l=l|0;var c=0;s=s+36|0,c=n[s>>2]|0,c|0&&(xu(c),yt(c)),c=Yt(4)|0,SD(c,l),n[s>>2]=c}function WR(){return o[11716]|0||(n[2664]=0,pr(63,10656,U|0)|0,o[11716]=1),10656}function n7(){var s=0;return o[11717]|0?s=n[2665]|0:(iNe(),n[2665]=1504,o[11717]=1,s=1504),s|0}function iNe(){o[11740]|0||(o[11718]=dr(dr(8,0)|0,0)|0,o[11719]=dr(dr(0,0)|0,0)|0,o[11720]=dr(dr(0,16)|0,0)|0,o[11721]=dr(dr(8,0)|0,0)|0,o[11722]=dr(dr(0,0)|0,0)|0,o[11723]=dr(dr(8,0)|0,0)|0,o[11724]=dr(dr(0,0)|0,0)|0,o[11725]=dr(dr(8,0)|0,0)|0,o[11726]=dr(dr(0,0)|0,0)|0,o[11727]=dr(dr(8,0)|0,0)|0,o[11728]=dr(dr(0,0)|0,0)|0,o[11729]=dr(dr(0,0)|0,32)|0,o[11730]=dr(dr(0,0)|0,32)|0,o[11740]=1)}function i7(){return 1572}function sNe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,F=0,M=0,O=0;m=C,C=C+32|0,O=m+16|0,M=m+12|0,F=m+8|0,k=m+4|0,B=m,n[O>>2]=s,n[M>>2]=l,n[F>>2]=c,n[k>>2]=f,n[B>>2]=d,WR()|0,oNe(10656,O,M,F,k,B),C=m}function oNe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0;B=Yt(24)|0,R5(B+4|0,n[l>>2]|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[s>>2],n[s>>2]=B}function s7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0,We=0,Oe=0,Qe=0,rt=0,Xe=0,ct=0;if(ct=C,C=C+32|0,Oe=ct+20|0,Qe=ct+8|0,rt=ct+4|0,Xe=ct,l=n[l>>2]|0,l|0){We=Oe+4|0,F=Oe+8|0,M=Qe+4|0,O=Qe+8|0,j=Qe+8|0,oe=Oe+8|0;do{if(B=l+4|0,k=YR(B)|0,k|0){if(d=$I(k)|0,n[Oe>>2]=0,n[We>>2]=0,n[F>>2]=0,f=(ew(k)|0)+1|0,aNe(Oe,f),f|0)for(;f=f+-1|0,Tc(Qe,n[d>>2]|0),m=n[We>>2]|0,m>>>0<(n[oe>>2]|0)>>>0?(n[m>>2]=n[Qe>>2],n[We>>2]=(n[We>>2]|0)+4):VR(Oe,Qe),f;)d=d+4|0;f=tw(k)|0,n[Qe>>2]=0,n[M>>2]=0,n[O>>2]=0;e:do if(n[f>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?lNe(Qe,f):(n[d>>2]=n[f>>2],n[M>>2]=(n[M>>2]|0)+4),f=f+4|0,!(n[f>>2]|0))break e;d=n[M>>2]|0,m=n[j>>2]|0}while(!1);n[rt>>2]=ND(B)|0,n[Xe>>2]=Nr(k)|0,cNe(c,s,rt,Xe,Oe,Qe),KR(Qe),$A(Oe)}l=n[l>>2]|0}while(l|0)}C=ct}function YR(s){return s=s|0,n[s+12>>2]|0}function $I(s){return s=s|0,n[s+12>>2]|0}function ew(s){return s=s|0,n[s+16>>2]|0}function aNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=n[s>>2]|0,(n[s+8>>2]|0)-f>>2>>>0>>0&&(p7(c,l,(n[s+4>>2]|0)-f>>2,s+8|0),h7(s,c),g7(c)),C=d}function VR(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=f7(s)|0,m>>>0>>0)Zr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,F=M>>1,p7(c,M>>2>>>0>>1>>>0?F>>>0>>0?d:F:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,h7(s,c),g7(c),C=B;return}}function tw(s){return s=s|0,n[s+8>>2]|0}function lNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=A7(s)|0,m>>>0>>0)Zr(s);else{k=n[s>>2]|0,M=(n[s+8>>2]|0)-k|0,F=M>>1,xNe(c,M>>2>>>0>>1>>>0?F>>>0>>0?d:F:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,bNe(s,c),kNe(c),C=B;return}}function ND(s){return s=s|0,n[s>>2]|0}function cNe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,uNe(s,l,c,f,d,m)}function KR(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),yt(c))}function $A(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),yt(c))}function uNe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,F=0,M=0,O=0,j=0;B=C,C=C+48|0,O=B+40|0,k=B+32|0,j=B+24|0,F=B+12|0,M=B,$a(k),s=ys(s)|0,n[j>>2]=n[l>>2],c=n[c>>2]|0,f=n[f>>2]|0,JR(F,d),ANe(M,m),n[O>>2]=n[j>>2],fNe(s,O,c,f,F,M),KR(M),$A(F),el(k),C=B}function JR(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(SNe(s,f),PNe(s,n[l>>2]|0,n[c>>2]|0,f))}function ANe(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(vNe(s,f),DNe(s,n[l>>2]|0,n[c>>2]|0,f))}function fNe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,F=0,M=0,O=0,j=0;B=C,C=C+32|0,O=B+28|0,j=B+24|0,k=B+12|0,F=B,M=jo(pNe()|0)|0,n[j>>2]=n[l>>2],n[O>>2]=n[j>>2],l=N0(O)|0,c=o7(c)|0,f=zR(f)|0,n[k>>2]=n[d>>2],O=d+4|0,n[k+4>>2]=n[O>>2],j=d+8|0,n[k+8>>2]=n[j>>2],n[j>>2]=0,n[O>>2]=0,n[d>>2]=0,d=XR(k)|0,n[F>>2]=n[m>>2],O=m+4|0,n[F+4>>2]=n[O>>2],j=m+8|0,n[F+8>>2]=n[j>>2],n[j>>2]=0,n[O>>2]=0,n[m>>2]=0,gc(0,M|0,s|0,l|0,c|0,f|0,d|0,hNe(F)|0)|0,KR(F),$A(k),C=B}function pNe(){var s=0;return o[7968]|0||(wNe(10708),s=7968,n[s>>2]=1,n[s+4>>2]=0),10708}function N0(s){return s=s|0,l7(s)|0}function o7(s){return s=s|0,a7(s)|0}function zR(s){return s=s|0,RD(s)|0}function XR(s){return s=s|0,dNe(s)|0}function hNe(s){return s=s|0,gNe(s)|0}function gNe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Za(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=a7(n[(n[s>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function a7(s){return s=s|0,s|0}function dNe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Za(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=l7((n[s>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function l7(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=cR(c7()|0)|0,f?(uR(l,f),AR(c,l),Z4e(s,c),s=fR(l)|0):s=mNe(s)|0,C=d,s|0}function c7(){var s=0;return o[7960]|0||(INe(10664),pr(25,10664,U|0)|0,s=7960,n[s>>2]=1,n[s+4>>2]=0),10664}function mNe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Za(8)|0,l=f,k=Yt(4)|0,n[k>>2]=n[s>>2],m=l+4|0,n[m>>2]=k,s=Yt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],u7(s,m,d),n[f>>2]=s,C=c,l|0}function u7(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Yt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1656,n[c+12>>2]=l,n[s+4>>2]=c}function yNe(s){s=s|0,im(s),yt(s)}function ENe(s){s=s|0,s=n[s+12>>2]|0,s|0&&yt(s)}function CNe(s){s=s|0,yt(s)}function INe(s){s=s|0,Pp(s)}function wNe(s){s=s|0,ao(s,BNe()|0,5)}function BNe(){return 1676}function vNe(s,l){s=s|0,l=l|0;var c=0;if((A7(s)|0)>>>0>>0&&Zr(s),l>>>0>1073741823)Tt();else{c=Yt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function DNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(br(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function A7(s){return s=s|0,1073741823}function SNe(s,l){s=s|0,l=l|0;var c=0;if((f7(s)|0)>>>0>>0&&Zr(s),l>>>0>1073741823)Tt();else{c=Yt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function PNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(br(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function f7(s){return s=s|0,1073741823}function xNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Yt(l<<2)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function bNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kNe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&&yt(s)}function p7(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Yt(l<<2)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function h7(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function g7(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&&yt(s)}function QNe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0,We=0,Oe=0,Qe=0;if(Qe=C,C=C+32|0,O=Qe+20|0,j=Qe+12|0,M=Qe+16|0,oe=Qe+4|0,We=Qe,Oe=Qe+8|0,k=n7()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(F=n[k+8>>2]|0,k=n[k+4>>2]|0;Tc(O,B),FNe(s,O,k,F),m=m+4|0,B=n[m>>2]|0,B;)F=F+1|0,k=k+1|0;if(m=i7()|0,B=n[m>>2]|0,B|0)do Tc(O,B),n[j>>2]=n[m+4>>2],RNe(l,O,j),m=m+8|0,B=n[m>>2]|0;while(B|0);if(m=n[($d()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,Tc(O,n[(em(l)|0)>>2]|0),n[j>>2]=GR(l)|0,TNe(c,O,j),m=n[m>>2]|0;while(m|0);if(Tc(M,0),m=WR()|0,n[O>>2]=n[M>>2],s7(O,m,d),m=n[($d()|0)>>2]|0,m|0){s=O+4|0,l=O+8|0,c=O+8|0;do{if(F=n[m+4>>2]|0,Tc(j,n[(em(F)|0)>>2]|0),LNe(oe,d7(F)|0),B=n[oe>>2]|0,B|0){n[O>>2]=0,n[s>>2]=0,n[l>>2]=0;do Tc(We,n[(em(n[B+4>>2]|0)|0)>>2]|0),k=n[s>>2]|0,k>>>0<(n[c>>2]|0)>>>0?(n[k>>2]=n[We>>2],n[s>>2]=(n[s>>2]|0)+4):VR(O,We),B=n[B>>2]|0;while(B|0);NNe(f,j,O),$A(O)}n[Oe>>2]=n[j>>2],M=m7(F)|0,n[O>>2]=n[Oe>>2],s7(O,M,d),U5(oe),m=n[m>>2]|0}while(m|0)}C=Qe}function FNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,KNe(s,l,c,f)}function RNe(s,l,c){s=s|0,l=l|0,c=c|0,VNe(s,l,c)}function em(s){return s=s|0,s|0}function TNe(s,l,c){s=s|0,l=l|0,c=c|0,jNe(s,l,c)}function d7(s){return s=s|0,s+16|0}function LNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;if(m=C,C=C+16|0,d=m+8|0,c=m,n[s>>2]=0,f=n[l>>2]|0,n[d>>2]=f,n[c>>2]=s,c=qNe(c)|0,f|0){if(f=Yt(12)|0,B=(y7(d)|0)+4|0,s=n[B+4>>2]|0,l=f+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=s,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)s=f;else for(l=f;s=Yt(12)|0,F=(y7(d)|0)+4|0,k=n[F+4>>2]|0,B=s+4|0,n[B>>2]=n[F>>2],n[B+4>>2]=k,n[l>>2]=s,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=s;n[s>>2]=n[c>>2],n[c>>2]=f}C=m}function NNe(s,l,c){s=s|0,l=l|0,c=c|0,ONe(s,l,c)}function m7(s){return s=s|0,s+24|0}function ONe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+24|0,d=f+16|0,k=f+12|0,m=f,$a(d),s=ys(s)|0,n[k>>2]=n[l>>2],JR(m,c),n[B>>2]=n[k>>2],MNe(s,B,m),$A(m),el(d),C=f}function MNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+16|0,k=f+12|0,d=f,m=jo(UNe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=N0(B)|0,n[d>>2]=n[c>>2],B=c+4|0,n[d+4>>2]=n[B>>2],k=c+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[c>>2]=0,hs(0,m|0,s|0,l|0,XR(d)|0)|0,$A(d),C=f}function UNe(){var s=0;return o[7976]|0||(_Ne(10720),s=7976,n[s>>2]=1,n[s+4>>2]=0),10720}function _Ne(s){s=s|0,ao(s,HNe()|0,2)}function HNe(){return 1732}function qNe(s){return s=s|0,n[s>>2]|0}function y7(s){return s=s|0,n[s>>2]|0}function jNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,$a(d),s=ys(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],E7(s,m,c),el(d),C=f}function E7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+4|0,B=f,d=jo(GNe()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=N0(m)|0,hs(0,d|0,s|0,l|0,o7(c)|0)|0,C=f}function GNe(){var s=0;return o[7984]|0||(WNe(10732),s=7984,n[s>>2]=1,n[s+4>>2]=0),10732}function WNe(s){s=s|0,ao(s,YNe()|0,2)}function YNe(){return 1744}function VNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,$a(d),s=ys(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],E7(s,m,c),el(d),C=f}function KNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,$a(m),s=ys(s)|0,n[k>>2]=n[l>>2],c=o[c>>0]|0,f=o[f>>0]|0,n[B>>2]=n[k>>2],JNe(s,B,c,f),el(m),C=d}function JNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,B=d+4|0,k=d,m=jo(zNe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=N0(B)|0,c=tm(c)|0,vi(0,m|0,s|0,l|0,c|0,tm(f)|0)|0,C=d}function zNe(){var s=0;return o[7992]|0||(ZNe(10744),s=7992,n[s>>2]=1,n[s+4>>2]=0),10744}function tm(s){return s=s|0,XNe(s)|0}function XNe(s){return s=s|0,s&255|0}function ZNe(s){s=s|0,ao(s,$Ne()|0,3)}function $Ne(){return 1756}function eOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;switch(oe=C,C=C+32|0,k=oe+8|0,F=oe+4|0,M=oe+20|0,O=oe,dR(s,0),f=X4e(l)|0,n[k>>2]=0,j=k+4|0,n[j>>2]=0,n[k+8>>2]=0,f<<24>>24){case 0:{o[M>>0]=0,tOe(F,c,M),OD(s,F)|0,bu(F);break}case 8:{j=nT(l)|0,o[M>>0]=8,Tc(O,n[j+4>>2]|0),rOe(F,c,M,O,j+8|0),OD(s,F)|0,bu(F);break}case 9:{if(m=nT(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,Tc(F,n[d>>2]|0),f=n[j>>2]|0,f>>>0<(n[B>>2]|0)>>>0?(n[f>>2]=n[F>>2],n[j>>2]=(n[j>>2]|0)+4):VR(k,F),l;)d=d+4|0;o[M>>0]=9,Tc(O,n[m+8>>2]|0),nOe(F,c,M,O,k),OD(s,F)|0,bu(F);break}default:j=nT(l)|0,o[M>>0]=f,Tc(O,n[j+4>>2]|0),iOe(F,c,M,O),OD(s,F)|0,bu(F)}$A(k),C=oe}function tOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,$a(d),l=ys(l)|0,mOe(s,l,o[c>>0]|0),el(d),C=f}function OD(s,l){s=s|0,l=l|0;var c=0;return c=n[s>>2]|0,c|0&&sa(c|0),n[s>>2]=n[l>>2],n[l>>2]=0,s|0}function rOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,F=0;m=C,C=C+32|0,k=m+16|0,B=m+8|0,F=m,$a(B),l=ys(l)|0,c=o[c>>0]|0,n[F>>2]=n[f>>2],d=n[d>>2]|0,n[k>>2]=n[F>>2],pOe(s,l,c,k,d),el(B),C=m}function nOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,F=0,M=0;m=C,C=C+32|0,F=m+24|0,B=m+16|0,M=m+12|0,k=m,$a(B),l=ys(l)|0,c=o[c>>0]|0,n[M>>2]=n[f>>2],JR(k,d),n[F>>2]=n[M>>2],cOe(s,l,c,F,k),$A(k),el(B),C=m}function iOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,$a(m),l=ys(l)|0,c=o[c>>0]|0,n[k>>2]=n[f>>2],n[B>>2]=n[k>>2],sOe(s,l,c,B),el(m),C=d}function sOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+4|0,k=d,B=jo(oOe()|0)|0,c=tm(c)|0,n[k>>2]=n[f>>2],n[m>>2]=n[k>>2],MD(s,hs(0,B|0,l|0,c|0,N0(m)|0)|0),C=d}function oOe(){var s=0;return o[8e3]|0||(aOe(10756),s=8e3,n[s>>2]=1,n[s+4>>2]=0),10756}function MD(s,l){s=s|0,l=l|0,dR(s,l)}function aOe(s){s=s|0,ao(s,lOe()|0,2)}function lOe(){return 1772}function cOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,F=0,M=0;m=C,C=C+32|0,F=m+16|0,M=m+12|0,B=m,k=jo(uOe()|0)|0,c=tm(c)|0,n[M>>2]=n[f>>2],n[F>>2]=n[M>>2],f=N0(F)|0,n[B>>2]=n[d>>2],F=d+4|0,n[B+4>>2]=n[F>>2],M=d+8|0,n[B+8>>2]=n[M>>2],n[M>>2]=0,n[F>>2]=0,n[d>>2]=0,MD(s,vi(0,k|0,l|0,c|0,f|0,XR(B)|0)|0),$A(B),C=m}function uOe(){var s=0;return o[8008]|0||(AOe(10768),s=8008,n[s>>2]=1,n[s+4>>2]=0),10768}function AOe(s){s=s|0,ao(s,fOe()|0,3)}function fOe(){return 1784}function pOe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,F=0;m=C,C=C+16|0,k=m+4|0,F=m,B=jo(hOe()|0)|0,c=tm(c)|0,n[F>>2]=n[f>>2],n[k>>2]=n[F>>2],f=N0(k)|0,MD(s,vi(0,B|0,l|0,c|0,f|0,zR(d)|0)|0),C=m}function hOe(){var s=0;return o[8016]|0||(gOe(10780),s=8016,n[s>>2]=1,n[s+4>>2]=0),10780}function gOe(s){s=s|0,ao(s,dOe()|0,3)}function dOe(){return 1800}function mOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=jo(yOe()|0)|0,MD(s,un(0,f|0,l|0,tm(c)|0)|0)}function yOe(){var s=0;return o[8024]|0||(EOe(10792),s=8024,n[s>>2]=1,n[s+4>>2]=0),10792}function EOe(s){s=s|0,ao(s,COe()|0,1)}function COe(){return 1816}function IOe(){wOe(),BOe(),vOe()}function wOe(){n[2702]=V7(65536)|0}function BOe(){GOe(10856)}function vOe(){DOe(10816)}function DOe(s){s=s|0,SOe(s,5044),POe(s)|0}function SOe(s,l){s=s|0,l=l|0;var c=0;c=c7()|0,n[s>>2]=c,MOe(c,l),Fp(n[s>>2]|0)}function POe(s){s=s|0;var l=0;return l=n[s>>2]|0,T0(l,xOe()|0),s|0}function xOe(){var s=0;return o[8032]|0||(C7(10820),pr(64,10820,U|0)|0,s=8032,n[s>>2]=1,n[s+4>>2]=0),Nr(10820)|0||C7(10820),10820}function C7(s){s=s|0,QOe(s),L0(s,25)}function bOe(s){s=s|0,kOe(s+24|0)}function kOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function QOe(s){s=s|0;var l=0;l=Jr()|0,zr(s,5,18,l,LOe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function FOe(s,l){s=s|0,l=l|0,ROe(s,l)}function ROe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;c=C,C=C+16|0,f=c,d=c+4|0,F0(d,l),n[f>>2]=R0(d,l)|0,TOe(s,f),C=c}function TOe(s,l){s=s|0,l=l|0,I7(s+4|0,n[l>>2]|0),o[s+8>>0]=1}function I7(s,l){s=s|0,l=l|0,n[s>>2]=l}function LOe(){return 1824}function NOe(s){return s=s|0,OOe(s)|0}function OOe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Za(8)|0,l=f,k=Yt(4)|0,F0(d,s),I7(k,R0(d,s)|0),m=l+4|0,n[m>>2]=k,s=Yt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],u7(s,m,d),n[f>>2]=s,C=c,l|0}function Za(s){s=s|0;var l=0,c=0;return s=s+7&-8,s>>>0<=32768&&(l=n[2701]|0,s>>>0<=(65536-l|0)>>>0)?(c=(n[2702]|0)+l|0,n[2701]=l+s,s=c):(s=V7(s+8|0)|0,n[s>>2]=n[2703],n[2703]=s,s=s+8|0),s|0}function MOe(s,l){s=s|0,l=l|0,n[s>>2]=UOe()|0,n[s+4>>2]=_Oe()|0,n[s+12>>2]=l,n[s+8>>2]=HOe()|0,n[s+32>>2]=9}function UOe(){return 11744}function _Oe(){return 1832}function HOe(){return LD()|0}function qOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Qp(f,896)|0)==512?c|0&&(jOe(c),yt(c)):l|0&&yt(l)}function jOe(s){s=s|0,s=n[s+4>>2]|0,s|0&&Rp(s)}function GOe(s){s=s|0,WOe(s,5052),YOe(s)|0,VOe(s,5058,26)|0,KOe(s,5069,1)|0,JOe(s,5077,10)|0,zOe(s,5087,19)|0,XOe(s,5094,27)|0}function WOe(s,l){s=s|0,l=l|0;var c=0;c=j4e()|0,n[s>>2]=c,G4e(c,l),Fp(n[s>>2]|0)}function YOe(s){s=s|0;var l=0;return l=n[s>>2]|0,T0(l,b4e()|0),s|0}function VOe(s,l,c){return s=s|0,l=l|0,c=c|0,A4e(s,mn(l)|0,c,0),s|0}function KOe(s,l,c){return s=s|0,l=l|0,c=c|0,zMe(s,mn(l)|0,c,0),s|0}function JOe(s,l,c){return s=s|0,l=l|0,c=c|0,xMe(s,mn(l)|0,c,0),s|0}function zOe(s,l,c){return s=s|0,l=l|0,c=c|0,pMe(s,mn(l)|0,c,0),s|0}function w7(s,l){s=s|0,l=l|0;var c=0,f=0;e:for(;;){for(c=n[2703]|0;;){if((c|0)==(l|0))break e;if(f=n[c>>2]|0,n[2703]=f,!c)c=f;else break}yt(c)}n[2701]=s}function XOe(s,l,c){return s=s|0,l=l|0,c=c|0,ZOe(s,mn(l)|0,c,0),s|0}function ZOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=ZR()|0,s=$Oe(c)|0,yn(m,l,d,s,eMe(c,f)|0,f)}function ZR(){var s=0,l=0;if(o[8040]|0||(v7(10860),pr(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(Nr(10860)|0)){s=10860,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));v7(10860)}return 10860}function $Oe(s){return s=s|0,s|0}function eMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,F=ZR()|0,B=F+24|0,l=dr(l,4)|0,n[m>>2]=l,c=F+28|0,f=n[c>>2]|0,f>>>0<(n[F+32>>2]|0)>>>0?(B7(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(tMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function B7(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function tMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=rMe(s)|0,f>>>0>>0)Zr(s);else{F=n[s>>2]|0,O=(n[s+8>>2]|0)-F|0,M=O>>2,nMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-F>>3,s+8|0),B=d+8|0,B7(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,iMe(s,d),sMe(d),C=k;return}}function rMe(s){return s=s|0,536870911}function nMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Yt(l<<3)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function iMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function sMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&&yt(s)}function v7(s){s=s|0,lMe(s)}function oMe(s){s=s|0,aMe(s+24|0)}function aMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function lMe(s){s=s|0;var l=0;l=Jr()|0,zr(s,1,11,l,cMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function cMe(){return 1840}function uMe(s,l,c){s=s|0,l=l|0,c=c|0,fMe(n[(AMe(s)|0)>>2]|0,l,c)}function AMe(s){return s=s|0,(n[(ZR()|0)+24>>2]|0)+(s<<3)|0}function fMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+1|0,d=f,F0(m,l),l=R0(m,l)|0,F0(d,c),c=R0(d,c)|0,tf[s&31](l,c),C=f}function pMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=$R()|0,s=hMe(c)|0,yn(m,l,d,s,gMe(c,f)|0,f)}function $R(){var s=0,l=0;if(o[8048]|0||(S7(10896),pr(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(Nr(10896)|0)){s=10896,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));S7(10896)}return 10896}function hMe(s){return s=s|0,s|0}function gMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,F=$R()|0,B=F+24|0,l=dr(l,4)|0,n[m>>2]=l,c=F+28|0,f=n[c>>2]|0,f>>>0<(n[F+32>>2]|0)>>>0?(D7(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(dMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function D7(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function dMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=mMe(s)|0,f>>>0>>0)Zr(s);else{F=n[s>>2]|0,O=(n[s+8>>2]|0)-F|0,M=O>>2,yMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-F>>3,s+8|0),B=d+8|0,D7(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,EMe(s,d),CMe(d),C=k;return}}function mMe(s){return s=s|0,536870911}function yMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Yt(l<<3)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function EMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function CMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&&yt(s)}function S7(s){s=s|0,BMe(s)}function IMe(s){s=s|0,wMe(s+24|0)}function wMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function BMe(s){s=s|0;var l=0;l=Jr()|0,zr(s,1,11,l,vMe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function vMe(){return 1852}function DMe(s,l){return s=s|0,l=l|0,PMe(n[(SMe(s)|0)>>2]|0,l)|0}function SMe(s){return s=s|0,(n[($R()|0)+24>>2]|0)+(s<<3)|0}function PMe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,F0(f,l),l=R0(f,l)|0,l=RD(_0[s&31](l)|0)|0,C=c,l|0}function xMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=eT()|0,s=bMe(c)|0,yn(m,l,d,s,kMe(c,f)|0,f)}function eT(){var s=0,l=0;if(o[8056]|0||(x7(10932),pr(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(Nr(10932)|0)){s=10932,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));x7(10932)}return 10932}function bMe(s){return s=s|0,s|0}function kMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,F=eT()|0,B=F+24|0,l=dr(l,4)|0,n[m>>2]=l,c=F+28|0,f=n[c>>2]|0,f>>>0<(n[F+32>>2]|0)>>>0?(P7(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(QMe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function P7(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function QMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=FMe(s)|0,f>>>0>>0)Zr(s);else{F=n[s>>2]|0,O=(n[s+8>>2]|0)-F|0,M=O>>2,RMe(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-F>>3,s+8|0),B=d+8|0,P7(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,TMe(s,d),LMe(d),C=k;return}}function FMe(s){return s=s|0,536870911}function RMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Yt(l<<3)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function TMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function LMe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&&yt(s)}function x7(s){s=s|0,MMe(s)}function NMe(s){s=s|0,OMe(s+24|0)}function OMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function MMe(s){s=s|0;var l=0;l=Jr()|0,zr(s,1,7,l,UMe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function UMe(){return 1860}function _Me(s,l,c){return s=s|0,l=l|0,c=c|0,qMe(n[(HMe(s)|0)>>2]|0,l,c)|0}function HMe(s){return s=s|0,(n[(eT()|0)+24>>2]|0)+(s<<3)|0}function qMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0;return f=C,C=C+32|0,B=f+12|0,m=f+8|0,k=f,F=f+16|0,d=f+4|0,jMe(F,l),GMe(k,F,l),xp(d,c),c=bp(d,c)|0,n[B>>2]=n[k>>2],sw[s&15](m,B,c),c=WMe(m)|0,bu(m),kp(d),C=f,c|0}function jMe(s,l){s=s|0,l=l|0}function GMe(s,l,c){s=s|0,l=l|0,c=c|0,YMe(s,c)}function WMe(s){return s=s|0,ys(s)|0}function YMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+16|0,c=d,f=l,f&1?(VMe(c,0),ia(f|0,c|0)|0,KMe(s,c),JMe(c)):n[s>>2]=n[l>>2],C=d}function VMe(s,l){s=s|0,l=l|0,Fc(s,l),n[s+4>>2]=0,o[s+8>>0]=0}function KMe(s,l){s=s|0,l=l|0,n[s>>2]=n[l+4>>2]}function JMe(s){s=s|0,o[s+8>>0]=0}function zMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=tT()|0,s=XMe(c)|0,yn(m,l,d,s,ZMe(c,f)|0,f)}function tT(){var s=0,l=0;if(o[8064]|0||(k7(10968),pr(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(Nr(10968)|0)){s=10968,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));k7(10968)}return 10968}function XMe(s){return s=s|0,s|0}function ZMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,F=tT()|0,B=F+24|0,l=dr(l,4)|0,n[m>>2]=l,c=F+28|0,f=n[c>>2]|0,f>>>0<(n[F+32>>2]|0)>>>0?(b7(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):($Me(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function b7(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function $Me(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=e4e(s)|0,f>>>0>>0)Zr(s);else{F=n[s>>2]|0,O=(n[s+8>>2]|0)-F|0,M=O>>2,t4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-F>>3,s+8|0),B=d+8|0,b7(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,r4e(s,d),n4e(d),C=k;return}}function e4e(s){return s=s|0,536870911}function t4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Yt(l<<3)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function r4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function n4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&&yt(s)}function k7(s){s=s|0,o4e(s)}function i4e(s){s=s|0,s4e(s+24|0)}function s4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function o4e(s){s=s|0;var l=0;l=Jr()|0,zr(s,1,1,l,a4e()|0,5),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function a4e(){return 1872}function l4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,u4e(n[(c4e(s)|0)>>2]|0,l,c,f,d,m)}function c4e(s){return s=s|0,(n[(tT()|0)+24>>2]|0)+(s<<3)|0}function u4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,F=0,M=0,O=0,j=0;B=C,C=C+32|0,k=B+16|0,F=B+12|0,M=B+8|0,O=B+4|0,j=B,xp(k,l),l=bp(k,l)|0,xp(F,c),c=bp(F,c)|0,xp(M,f),f=bp(M,f)|0,xp(O,d),d=bp(O,d)|0,xp(j,m),m=bp(j,m)|0,Z7[s&1](l,c,f,d,m),kp(j),kp(O),kp(M),kp(F),kp(k),C=B}function A4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=rT()|0,s=f4e(c)|0,yn(m,l,d,s,p4e(c,f)|0,f)}function rT(){var s=0,l=0;if(o[8072]|0||(F7(11004),pr(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(Nr(11004)|0)){s=11004,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));F7(11004)}return 11004}function f4e(s){return s=s|0,s|0}function p4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,F=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,F=rT()|0,B=F+24|0,l=dr(l,4)|0,n[m>>2]=l,c=F+28|0,f=n[c>>2]|0,f>>>0<(n[F+32>>2]|0)>>>0?(Q7(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(h4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function Q7(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function h4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=g4e(s)|0,f>>>0>>0)Zr(s);else{F=n[s>>2]|0,O=(n[s+8>>2]|0)-F|0,M=O>>2,d4e(d,O>>3>>>0>>1>>>0?M>>>0>>0?B:M:f,(n[m>>2]|0)-F>>3,s+8|0),B=d+8|0,Q7(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,m4e(s,d),y4e(d),C=k;return}}function g4e(s){return s=s|0,536870911}function d4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Yt(l<<3)|0;break}else d=0;while(!1);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function m4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(br(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function y4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&&yt(s)}function F7(s){s=s|0,I4e(s)}function E4e(s){s=s|0,C4e(s+24|0)}function C4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function I4e(s){s=s|0;var l=0;l=Jr()|0,zr(s,1,12,l,w4e()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function w4e(){return 1896}function B4e(s,l,c){s=s|0,l=l|0,c=c|0,D4e(n[(v4e(s)|0)>>2]|0,l,c)}function v4e(s){return s=s|0,(n[(rT()|0)+24>>2]|0)+(s<<3)|0}function D4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+4|0,d=f,S4e(m,l),l=P4e(m,l)|0,xp(d,c),c=bp(d,c)|0,tf[s&31](l,c),kp(d),C=f}function S4e(s,l){s=s|0,l=l|0}function P4e(s,l){return s=s|0,l=l|0,x4e(l)|0}function x4e(s){return s=s|0,s|0}function b4e(){var s=0;return o[8080]|0||(R7(11040),pr(70,11040,U|0)|0,s=8080,n[s>>2]=1,n[s+4>>2]=0),Nr(11040)|0||R7(11040),11040}function R7(s){s=s|0,F4e(s),L0(s,71)}function k4e(s){s=s|0,Q4e(s+24|0)}function Q4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),yt(c))}function F4e(s){s=s|0;var l=0;l=Jr()|0,zr(s,5,7,l,N4e()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function R4e(s){s=s|0,T4e(s)}function T4e(s){s=s|0,L4e(s)}function L4e(s){s=s|0,o[s+8>>0]=1}function N4e(){return 1936}function O4e(){return M4e()|0}function M4e(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Za(8)|0,s=c,m=s+4|0,n[m>>2]=Yt(1)|0,f=Yt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],U4e(f,m,d),n[c>>2]=f,C=l,s|0}function U4e(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Yt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1916,n[c+12>>2]=l,n[s+4>>2]=c}function _4e(s){s=s|0,im(s),yt(s)}function H4e(s){s=s|0,s=n[s+12>>2]|0,s|0&&yt(s)}function q4e(s){s=s|0,yt(s)}function j4e(){var s=0;return o[8088]|0||(z4e(11076),pr(25,11076,U|0)|0,s=8088,n[s>>2]=1,n[s+4>>2]=0),11076}function G4e(s,l){s=s|0,l=l|0,n[s>>2]=W4e()|0,n[s+4>>2]=Y4e()|0,n[s+12>>2]=l,n[s+8>>2]=V4e()|0,n[s+32>>2]=10}function W4e(){return 11745}function Y4e(){return 1940}function V4e(){return TD()|0}function K4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Qp(f,896)|0)==512?c|0&&(J4e(c),yt(c)):l|0&&yt(l)}function J4e(s){s=s|0,s=n[s+4>>2]|0,s|0&&Rp(s)}function z4e(s){s=s|0,Pp(s)}function Tc(s,l){s=s|0,l=l|0,n[s>>2]=l}function nT(s){return s=s|0,n[s>>2]|0}function X4e(s){return s=s|0,o[n[s>>2]>>0]|0}function Z4e(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,n[f>>2]=n[s>>2],$4e(l,f)|0,C=c}function $4e(s,l){s=s|0,l=l|0;var c=0;return c=eUe(n[s>>2]|0,l)|0,l=s+4|0,n[(n[l>>2]|0)+8>>2]=c,n[(n[l>>2]|0)+8>>2]|0}function eUe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,$a(f),s=ys(s)|0,l=tUe(s,n[l>>2]|0)|0,el(f),C=c,l|0}function $a(s){s=s|0,n[s>>2]=n[2701],n[s+4>>2]=n[2703]}function tUe(s,l){s=s|0,l=l|0;var c=0;return c=jo(rUe()|0)|0,un(0,c|0,s|0,zR(l)|0)|0}function el(s){s=s|0,w7(n[s>>2]|0,n[s+4>>2]|0)}function rUe(){var s=0;return o[8096]|0||(nUe(11120),s=8096,n[s>>2]=1,n[s+4>>2]=0),11120}function nUe(s){s=s|0,ao(s,iUe()|0,1)}function iUe(){return 1948}function sUe(){oUe()}function oUe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0,We=0,Oe=0,Qe=0;if(Oe=C,C=C+16|0,O=Oe+4|0,j=Oe,Ro(65536,10804,n[2702]|0,10812),c=n7()|0,l=n[c>>2]|0,s=n[l>>2]|0,s|0)for(f=n[c+8>>2]|0,c=n[c+4>>2]|0;du(s|0,u[c>>0]|0|0,o[f>>0]|0),l=l+4|0,s=n[l>>2]|0,s;)f=f+1|0,c=c+1|0;if(s=i7()|0,l=n[s>>2]|0,l|0)do QA(l|0,n[s+4>>2]|0),s=s+8|0,l=n[s>>2]|0;while(l|0);QA(aUe()|0,5167),M=$d()|0,s=n[M>>2]|0;e:do if(s|0){do lUe(n[s+4>>2]|0),s=n[s>>2]|0;while(s|0);if(s=n[M>>2]|0,s|0){F=M;do{for(;d=s,s=n[s>>2]|0,d=n[d+4>>2]|0,!!(cUe(d)|0);)if(n[j>>2]=F,n[O>>2]=n[j>>2],uUe(M,O)|0,!s)break e;if(AUe(d),F=n[F>>2]|0,l=T7(d)|0,m=Bi()|0,B=C,C=C+((1*(l<<2)|0)+15&-16)|0,k=C,C=C+((1*(l<<2)|0)+15&-16)|0,l=n[(d7(d)|0)>>2]|0,l|0)for(c=B,f=k;n[c>>2]=n[(em(n[l+4>>2]|0)|0)>>2],n[f>>2]=n[l+8>>2],l=n[l>>2]|0,l;)c=c+4|0,f=f+4|0;Qe=em(d)|0,l=fUe(d)|0,c=T7(d)|0,f=pUe(d)|0,Il(Qe|0,l|0,B|0,k|0,c|0,f|0,GR(d)|0),kA(m|0)}while(s|0)}}while(!1);if(s=n[(WR()|0)>>2]|0,s|0)do Qe=s+4|0,M=YR(Qe)|0,d=tw(M)|0,m=$I(M)|0,B=(ew(M)|0)+1|0,k=UD(M)|0,F=L7(Qe)|0,M=Nr(M)|0,O=ND(Qe)|0,j=iT(Qe)|0,mc(0,d|0,m|0,B|0,k|0,F|0,M|0,O|0,j|0,sT(Qe)|0),s=n[s>>2]|0;while(s|0);s=n[($d()|0)>>2]|0;e:do if(s|0){t:for(;;){if(l=n[s+4>>2]|0,l|0&&(oe=n[(em(l)|0)>>2]|0,We=n[(m7(l)|0)>>2]|0,We|0)){c=We;do{l=c+4|0,f=YR(l)|0;r:do if(f|0)switch(Nr(f)|0){case 0:break t;case 4:case 3:case 2:{k=tw(f)|0,F=$I(f)|0,M=(ew(f)|0)+1|0,O=UD(f)|0,j=Nr(f)|0,Qe=ND(l)|0,mc(oe|0,k|0,F|0,M|0,O|0,0,j|0,Qe|0,iT(l)|0,sT(l)|0);break r}case 1:{B=tw(f)|0,k=$I(f)|0,F=(ew(f)|0)+1|0,M=UD(f)|0,O=L7(l)|0,j=Nr(f)|0,Qe=ND(l)|0,mc(oe|0,B|0,k|0,F|0,M|0,O|0,j|0,Qe|0,iT(l)|0,sT(l)|0);break r}case 5:{M=tw(f)|0,O=$I(f)|0,j=(ew(f)|0)+1|0,Qe=UD(f)|0,mc(oe|0,M|0,O|0,j|0,Qe|0,hUe(f)|0,Nr(f)|0,0,0,0);break r}default:break r}while(!1);c=n[c>>2]|0}while(c|0)}if(s=n[s>>2]|0,!s)break e}Tt()}while(!1);we(),C=Oe}function aUe(){return 11703}function lUe(s){s=s|0,o[s+40>>0]=0}function cUe(s){return s=s|0,(o[s+40>>0]|0)!=0|0}function uUe(s,l){return s=s|0,l=l|0,l=gUe(l)|0,s=n[l>>2]|0,n[l>>2]=n[s>>2],yt(s),n[l>>2]|0}function AUe(s){s=s|0,o[s+40>>0]=1}function T7(s){return s=s|0,n[s+20>>2]|0}function fUe(s){return s=s|0,n[s+8>>2]|0}function pUe(s){return s=s|0,n[s+32>>2]|0}function UD(s){return s=s|0,n[s+4>>2]|0}function L7(s){return s=s|0,n[s+4>>2]|0}function iT(s){return s=s|0,n[s+8>>2]|0}function sT(s){return s=s|0,n[s+16>>2]|0}function hUe(s){return s=s|0,n[s+20>>2]|0}function gUe(s){return s=s|0,n[s>>2]|0}function _D(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0,We=0,Oe=0,Qe=0,rt=0,Xe=0,ct=0,_e=0,Ge=0,Nt=0;Nt=C,C=C+16|0,oe=Nt;do if(s>>>0<245){if(M=s>>>0<11?16:s+11&-8,s=M>>>3,j=n[2783]|0,c=j>>>s,c&3|0)return l=(c&1^1)+s|0,s=11172+(l<<1<<2)|0,c=s+8|0,f=n[c>>2]|0,d=f+8|0,m=n[d>>2]|0,(s|0)==(m|0)?n[2783]=j&~(1<>2]=s,n[c>>2]=m),Ge=l<<3,n[f+4>>2]=Ge|3,Ge=f+Ge+4|0,n[Ge>>2]=n[Ge>>2]|1,Ge=d,C=Nt,Ge|0;if(O=n[2785]|0,M>>>0>O>>>0){if(c|0)return l=2<>>12&16,l=l>>>B,c=l>>>5&8,l=l>>>c,d=l>>>2&4,l=l>>>d,s=l>>>1&2,l=l>>>s,f=l>>>1&1,f=(c|B|d|s|f)+(l>>>f)|0,l=11172+(f<<1<<2)|0,s=l+8|0,d=n[s>>2]|0,B=d+8|0,c=n[B>>2]|0,(l|0)==(c|0)?(s=j&~(1<>2]=l,n[s>>2]=c,s=j),m=(f<<3)-M|0,n[d+4>>2]=M|3,f=d+M|0,n[f+4>>2]=m|1,n[f+m>>2]=m,O|0&&(d=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=c),n[2785]=m,n[2788]=f,Ge=B,C=Nt,Ge|0;if(k=n[2784]|0,k){if(c=(k&0-k)+-1|0,B=c>>>12&16,c=c>>>B,m=c>>>5&8,c=c>>>m,F=c>>>2&4,c=c>>>F,f=c>>>1&2,c=c>>>f,s=c>>>1&1,s=n[11436+((m|B|F|f|s)+(c>>>s)<<2)>>2]|0,c=(n[s+4>>2]&-8)-M|0,f=n[s+16+(((n[s+16>>2]|0)==0&1)<<2)>>2]|0,!f)F=s,m=c;else{do B=(n[f+4>>2]&-8)-M|0,F=B>>>0>>0,c=F?B:c,s=F?f:s,f=n[f+16+(((n[f+16>>2]|0)==0&1)<<2)>>2]|0;while(f|0);F=s,m=c}if(B=F+M|0,F>>>0>>0){d=n[F+24>>2]|0,l=n[F+12>>2]|0;do if((l|0)==(F|0)){if(s=F+20|0,l=n[s>>2]|0,!l&&(s=F+16|0,l=n[s>>2]|0,!l)){c=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0,c=l}else c=n[F+8>>2]|0,n[c+12>>2]=l,n[l+8>>2]=c,c=l;while(!1);do if(d|0){if(l=n[F+28>>2]|0,s=11436+(l<<2)|0,(F|0)==(n[s>>2]|0)){if(n[s>>2]=c,!c){n[2784]=k&~(1<>2]|0)!=(F|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=d,l=n[F+16>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),l=n[F+20>>2]|0,l|0&&(n[c+20>>2]=l,n[l+24>>2]=c)}while(!1);return m>>>0<16?(Ge=m+M|0,n[F+4>>2]=Ge|3,Ge=F+Ge+4|0,n[Ge>>2]=n[Ge>>2]|1):(n[F+4>>2]=M|3,n[B+4>>2]=m|1,n[B+m>>2]=m,O|0&&(f=n[2788]|0,l=O>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=j|l,l=c,s=c+8|0),n[s>>2]=f,n[l+12>>2]=f,n[f+8>>2]=l,n[f+12>>2]=c),n[2785]=m,n[2788]=B),Ge=F+8|0,C=Nt,Ge|0}else j=M}else j=M}else j=M}else if(s>>>0<=4294967231)if(s=s+11|0,M=s&-8,F=n[2784]|0,F){f=0-M|0,s=s>>>8,s?M>>>0>16777215?k=31:(j=(s+1048320|0)>>>16&8,_e=s<>>16&4,_e=_e<>>16&2,k=14-(O|j|k)+(_e<>>15)|0,k=M>>>(k+7|0)&1|k<<1):k=0,c=n[11436+(k<<2)>>2]|0;e:do if(!c)c=0,s=0,_e=57;else for(s=0,B=M<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[c+4>>2]&-8)-M|0,d>>>0>>0)if(d)s=c,f=d;else{s=c,f=0,d=c,_e=61;break e}if(d=n[c+20>>2]|0,c=n[c+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(c|0)?m:d,d=(c|0)==0,d){c=m,_e=57;break}else B=B<<((d^1)&1)}while(!1);if((_e|0)==57){if((c|0)==0&(s|0)==0){if(s=2<>>12&16,j=j>>>B,m=j>>>5&8,j=j>>>m,k=j>>>2&4,j=j>>>k,O=j>>>1&2,j=j>>>O,c=j>>>1&1,s=0,c=n[11436+((m|B|k|O|c)+(j>>>c)<<2)>>2]|0}c?(d=c,_e=61):(k=s,B=f)}if((_e|0)==61)for(;;)if(_e=0,c=(n[d+4>>2]&-8)-M|0,j=c>>>0>>0,c=j?c:f,s=j?d:s,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)f=c,_e=61;else{k=s,B=c;break}if(k|0&&B>>>0<((n[2785]|0)-M|0)>>>0){if(m=k+M|0,k>>>0>=m>>>0)return Ge=0,C=Nt,Ge|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(s=k+20|0,l=n[s>>2]|0,!l&&(s=k+16|0,l=n[s>>2]|0,!l)){l=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0}else Ge=n[k+8>>2]|0,n[Ge+12>>2]=l,n[l+8>>2]=Ge;while(!1);do if(d){if(s=n[k+28>>2]|0,c=11436+(s<<2)|0,(k|0)==(n[c>>2]|0)){if(n[c>>2]=l,!l){f=F&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){f=F;break}n[l+24>>2]=d,s=n[k+16>>2]|0,s|0&&(n[l+16>>2]=s,n[s+24>>2]=l),s=n[k+20>>2]|0,s&&(n[l+20>>2]=s,n[s+24>>2]=l),f=F}else f=F;while(!1);do if(B>>>0>=16){if(n[k+4>>2]=M|3,n[m+4>>2]=B|1,n[m+B>>2]=B,l=B>>>3,B>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=c;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(_e=(l+1048320|0)>>>16&8,Ge=l<<_e,ct=(Ge+520192|0)>>>16&4,Ge=Ge<>>16&2,l=14-(ct|_e|l)+(Ge<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,c=11436+(l<<2)|0,n[m+28>>2]=l,s=m+16|0,n[s+4>>2]=0,n[s>>2]=0,s=1<>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}for(s=B<<((l|0)==31?0:25-(l>>>1)|0),c=n[c>>2]|0;;){if((n[c+4>>2]&-8|0)==(B|0)){_e=97;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{_e=96;break}}if((_e|0)==96){n[f>>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((_e|0)==97){_e=c+8|0,Ge=n[_e>>2]|0,n[Ge+12>>2]=m,n[_e>>2]=m,n[m+8>>2]=Ge,n[m+12>>2]=c,n[m+24>>2]=0;break}}else Ge=B+M|0,n[k+4>>2]=Ge|3,Ge=k+Ge+4|0,n[Ge>>2]=n[Ge>>2]|1;while(!1);return Ge=k+8|0,C=Nt,Ge|0}else j=M}else j=M;else j=-1;while(!1);if(c=n[2785]|0,c>>>0>=j>>>0)return l=c-j|0,s=n[2788]|0,l>>>0>15?(Ge=s+j|0,n[2788]=Ge,n[2785]=l,n[Ge+4>>2]=l|1,n[Ge+l>>2]=l,n[s+4>>2]=j|3):(n[2785]=0,n[2788]=0,n[s+4>>2]=c|3,Ge=s+c+4|0,n[Ge>>2]=n[Ge>>2]|1),Ge=s+8|0,C=Nt,Ge|0;if(B=n[2786]|0,B>>>0>j>>>0)return ct=B-j|0,n[2786]=ct,Ge=n[2789]|0,_e=Ge+j|0,n[2789]=_e,n[_e+4>>2]=ct|1,n[Ge+4>>2]=j|3,Ge=Ge+8|0,C=Nt,Ge|0;if(n[2901]|0?s=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,s=oe&-16^1431655768,n[oe>>2]=s,n[2901]=s,s=4096),k=j+48|0,F=j+47|0,m=s+F|0,d=0-s|0,M=m&d,M>>>0<=j>>>0||(s=n[2893]|0,s|0&&(O=n[2891]|0,oe=O+M|0,oe>>>0<=O>>>0|oe>>>0>s>>>0)))return Ge=0,C=Nt,Ge|0;e:do if(n[2894]&4)l=0,_e=133;else{c=n[2789]|0;t:do if(c){for(f=11580;s=n[f>>2]|0,!(s>>>0<=c>>>0&&(Qe=f+4|0,(s+(n[Qe>>2]|0)|0)>>>0>c>>>0));)if(s=n[f+8>>2]|0,s)f=s;else{_e=118;break t}if(l=m-B&d,l>>>0<2147483647)if(s=Tp(l|0)|0,(s|0)==((n[f>>2]|0)+(n[Qe>>2]|0)|0)){if((s|0)!=-1){B=l,m=s,_e=135;break e}}else f=s,_e=126;else l=0}else _e=118;while(!1);do if((_e|0)==118)if(c=Tp(0)|0,(c|0)!=-1&&(l=c,We=n[2902]|0,Oe=We+-1|0,l=(Oe&l|0?(Oe+l&0-We)-l|0:0)+M|0,We=n[2891]|0,Oe=l+We|0,l>>>0>j>>>0&l>>>0<2147483647)){if(Qe=n[2893]|0,Qe|0&&Oe>>>0<=We>>>0|Oe>>>0>Qe>>>0){l=0;break}if(s=Tp(l|0)|0,(s|0)==(c|0)){B=l,m=c,_e=135;break e}else f=s,_e=126}else l=0;while(!1);do if((_e|0)==126){if(c=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(f|0)!=-1)))if((f|0)==-1){l=0;break}else{B=l,m=f,_e=135;break e}if(s=n[2903]|0,s=F-l+s&0-s,s>>>0>=2147483647){B=l,m=f,_e=135;break e}if((Tp(s|0)|0)==-1){Tp(c|0)|0,l=0;break}else{B=s+l|0,m=f,_e=135;break e}}while(!1);n[2894]=n[2894]|4,_e=133}while(!1);if((_e|0)==133&&M>>>0<2147483647&&(ct=Tp(M|0)|0,Qe=Tp(0)|0,rt=Qe-ct|0,Xe=rt>>>0>(j+40|0)>>>0,!((ct|0)==-1|Xe^1|ct>>>0>>0&((ct|0)!=-1&(Qe|0)!=-1)^1))&&(B=Xe?rt:l,m=ct,_e=135),(_e|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),F=n[2789]|0;do if(F){for(l=11580;;){if(s=n[l>>2]|0,c=l+4|0,f=n[c>>2]|0,(m|0)==(s+f|0)){_e=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((_e|0)==145&&!(n[l+12>>2]&8|0)&&F>>>0>>0&F>>>0>=s>>>0){n[c>>2]=f+B,Ge=F+8|0,Ge=Ge&7|0?0-Ge&7:0,_e=F+Ge|0,Ge=(n[2786]|0)+(B-Ge)|0,n[2789]=_e,n[2786]=Ge,n[_e+4>>2]=Ge|1,n[_e+Ge+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),c=m+B|0,l=11580;;){if((n[l>>2]|0)==(c|0)){_e=153;break}if(s=n[l+8>>2]|0,s)l=s;else break}if((_e|0)==153&&!(n[l+12>>2]&8|0)){n[l>>2]=m,O=l+4|0,n[O>>2]=(n[O>>2]|0)+B,O=m+8|0,O=m+(O&7|0?0-O&7:0)|0,l=c+8|0,l=c+(l&7|0?0-l&7:0)|0,M=O+j|0,k=l-O-j|0,n[O+4>>2]=j|3;do if((l|0)!=(F|0)){if((l|0)==(n[2788]|0)){Ge=(n[2785]|0)+k|0,n[2785]=Ge,n[2788]=M,n[M+4>>2]=Ge|1,n[M+Ge>>2]=Ge;break}if(s=n[l+4>>2]|0,(s&3|0)==1){B=s&-8,f=s>>>3;e:do if(s>>>0<256)if(s=n[l+8>>2]|0,c=n[l+12>>2]|0,(c|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=c,n[c+8>>2]=s;break}else{m=n[l+24>>2]|0,s=n[l+12>>2]|0;do if((s|0)==(l|0)){if(f=l+16|0,c=f+4|0,s=n[c>>2]|0,!s)if(s=n[f>>2]|0,s)c=f;else{s=0;break}for(;;){if(f=s+20|0,d=n[f>>2]|0,d|0){s=d,c=f;continue}if(f=s+16|0,d=n[f>>2]|0,d)s=d,c=f;else break}n[c>>2]=0}else Ge=n[l+8>>2]|0,n[Ge+12>>2]=s,n[s+8>>2]=Ge;while(!1);if(!m)break;c=n[l+28>>2]|0,f=11436+(c<<2)|0;do if((l|0)!=(n[f>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=s,!s)break e}else{if(n[f>>2]=s,s|0)break;n[2784]=n[2784]&~(1<>2]=m,c=l+16|0,f=n[c>>2]|0,f|0&&(n[s+16>>2]=f,n[f+24>>2]=s),c=n[c+4>>2]|0,!c)break;n[s+20>>2]=c,n[c+24>>2]=s}while(!1);l=l+B|0,d=B+k|0}else d=k;if(l=l+4|0,n[l>>2]=n[l>>2]&-2,n[M+4>>2]=d|1,n[M+d>>2]=d,l=d>>>3,d>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=M,n[l+12>>2]=M,n[M+8>>2]=l,n[M+12>>2]=c;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}_e=(l+1048320|0)>>>16&8,Ge=l<<_e,ct=(Ge+520192|0)>>>16&4,Ge=Ge<>>16&2,l=14-(ct|_e|l)+(Ge<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(!1);if(f=11436+(l<<2)|0,n[M+28>>2]=l,s=M+16|0,n[s+4>>2]=0,n[s>>2]=0,s=n[2784]|0,c=1<>2]=M,n[M+24>>2]=f,n[M+12>>2]=M,n[M+8>>2]=M;break}for(s=d<<((l|0)==31?0:25-(l>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){_e=194;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{_e=193;break}}if((_e|0)==193){n[f>>2]=M,n[M+24>>2]=c,n[M+12>>2]=M,n[M+8>>2]=M;break}else if((_e|0)==194){_e=c+8|0,Ge=n[_e>>2]|0,n[Ge+12>>2]=M,n[_e>>2]=M,n[M+8>>2]=Ge,n[M+12>>2]=c,n[M+24>>2]=0;break}}else Ge=(n[2786]|0)+k|0,n[2786]=Ge,n[2789]=M,n[M+4>>2]=Ge|1;while(!1);return Ge=O+8|0,C=Nt,Ge|0}for(l=11580;s=n[l>>2]|0,!(s>>>0<=F>>>0&&(Ge=s+(n[l+4>>2]|0)|0,Ge>>>0>F>>>0));)l=n[l+8>>2]|0;d=Ge+-47|0,s=d+8|0,s=d+(s&7|0?0-s&7:0)|0,d=F+16|0,s=s>>>0>>0?F:s,l=s+8|0,c=m+8|0,c=c&7|0?0-c&7:0,_e=m+c|0,c=B+-40-c|0,n[2789]=_e,n[2786]=c,n[_e+4>>2]=c|1,n[_e+c+4>>2]=40,n[2790]=n[2905],c=s+4|0,n[c>>2]=27,n[l>>2]=n[2895],n[l+4>>2]=n[2896],n[l+8>>2]=n[2897],n[l+12>>2]=n[2898],n[2895]=m,n[2896]=B,n[2898]=0,n[2897]=l,l=s+24|0;do _e=l,l=l+4|0,n[l>>2]=7;while((_e+8|0)>>>0>>0);if((s|0)!=(F|0)){if(m=s-F|0,n[c>>2]=n[c>>2]&-2,n[F+4>>2]=m|1,n[s>>2]=m,l=m>>>3,m>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=F,n[l+12>>2]=F,n[F+8>>2]=l,n[F+12>>2]=c;break}if(l=m>>>8,l?m>>>0>16777215?c=31:(_e=(l+1048320|0)>>>16&8,Ge=l<<_e,ct=(Ge+520192|0)>>>16&4,Ge=Ge<>>16&2,c=14-(ct|_e|c)+(Ge<>>15)|0,c=m>>>(c+7|0)&1|c<<1):c=0,f=11436+(c<<2)|0,n[F+28>>2]=c,n[F+20>>2]=0,n[d>>2]=0,l=n[2784]|0,s=1<>2]=F,n[F+24>>2]=f,n[F+12>>2]=F,n[F+8>>2]=F;break}for(s=m<<((c|0)==31?0:25-(c>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(m|0)){_e=216;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{_e=215;break}}if((_e|0)==215){n[f>>2]=F,n[F+24>>2]=c,n[F+12>>2]=F,n[F+8>>2]=F;break}else if((_e|0)==216){_e=c+8|0,Ge=n[_e>>2]|0,n[Ge+12>>2]=F,n[_e>>2]=F,n[F+8>>2]=Ge,n[F+12>>2]=c,n[F+24>>2]=0;break}}}else{Ge=n[2787]|0,(Ge|0)==0|m>>>0>>0&&(n[2787]=m),n[2895]=m,n[2896]=B,n[2898]=0,n[2792]=n[2901],n[2791]=-1,l=0;do Ge=11172+(l<<1<<2)|0,n[Ge+12>>2]=Ge,n[Ge+8>>2]=Ge,l=l+1|0;while((l|0)!=32);Ge=m+8|0,Ge=Ge&7|0?0-Ge&7:0,_e=m+Ge|0,Ge=B+-40-Ge|0,n[2789]=_e,n[2786]=Ge,n[_e+4>>2]=Ge|1,n[_e+Ge+4>>2]=40,n[2790]=n[2905]}while(!1);if(l=n[2786]|0,l>>>0>j>>>0)return ct=l-j|0,n[2786]=ct,Ge=n[2789]|0,_e=Ge+j|0,n[2789]=_e,n[_e+4>>2]=ct|1,n[Ge+4>>2]=j|3,Ge=Ge+8|0,C=Nt,Ge|0}return n[(rm()|0)>>2]=12,Ge=0,C=Nt,Ge|0}function HD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,F=0;if(s){c=s+-8|0,d=n[2787]|0,s=n[s+-4>>2]|0,l=s&-8,F=c+l|0;do if(s&1)k=c,B=c;else{if(f=n[c>>2]|0,!(s&3)||(B=c+(0-f)|0,m=f+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(s=F+4|0,l=n[s>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[s>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(c=f>>>3,f>>>0<256)if(s=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=s,k=B,l=m;break}d=n[B+24>>2]|0,s=n[B+12>>2]|0;do if((s|0)==(B|0)){if(c=B+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{s=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=s,n[s+8>>2]=k;while(!1);if(d){if(l=n[B+28>>2]|0,c=11436+(l<<2)|0,(B|0)==(n[c>>2]|0)){if(n[c>>2]=s,!s){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=s,!s){k=B,l=m;break}n[s+24>>2]=d,l=B+16|0,c=n[l>>2]|0,c|0&&(n[s+16>>2]=c,n[c+24>>2]=s),l=n[l+4>>2]|0,l?(n[s+20>>2]=l,n[l+24>>2]=s,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(!1);if(!(B>>>0>=F>>>0)&&(s=F+4|0,f=n[s>>2]|0,!!(f&1))){if(f&2)n[s>>2]=f&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(s=n[2788]|0,(F|0)==(n[2789]|0)){if(F=(n[2786]|0)+l|0,n[2786]=F,n[2789]=k,n[k+4>>2]=F|1,(k|0)!=(s|0))return;n[2788]=0,n[2785]=0;return}if((F|0)==(s|0)){F=(n[2785]|0)+l|0,n[2785]=F,n[2788]=B,n[k+4>>2]=F|1,n[B+F>>2]=F;return}d=(f&-8)+l|0,c=f>>>3;do if(f>>>0<256)if(l=n[F+8>>2]|0,s=n[F+12>>2]|0,(s|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=s,n[s+8>>2]=l;break}else{m=n[F+24>>2]|0,s=n[F+12>>2]|0;do if((s|0)==(F|0)){if(c=F+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{c=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0,c=s}else c=n[F+8>>2]|0,n[c+12>>2]=s,n[s+8>>2]=c,c=s;while(!1);if(m|0){if(s=n[F+28>>2]|0,l=11436+(s<<2)|0,(F|0)==(n[l>>2]|0)){if(n[l>>2]=c,!c){n[2784]=n[2784]&~(1<>2]|0)!=(F|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=m,s=F+16|0,l=n[s>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),s=n[s+4>>2]|0,s|0&&(n[c+20>>2]=s,n[s+24>>2]=c)}}while(!1);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(s=d>>>3,d>>>0<256){c=11172+(s<<1<<2)|0,l=n[2783]|0,s=1<>2]|0):(n[2783]=l|s,s=c,l=c+8|0),n[l>>2]=k,n[s+12>>2]=k,n[k+8>>2]=s,n[k+12>>2]=c;return}s=d>>>8,s?d>>>0>16777215?s=31:(B=(s+1048320|0)>>>16&8,F=s<>>16&4,F=F<>>16&2,s=14-(m|B|s)+(F<>>15)|0,s=d>>>(s+7|0)&1|s<<1):s=0,f=11436+(s<<2)|0,n[k+28>>2]=s,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,c=1<>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){s=73;break}if(f=c+16+(l>>>31<<2)|0,s=n[f>>2]|0,s)l=l<<1,c=s;else{s=72;break}}if((s|0)==72){n[f>>2]=k,n[k+24>>2]=c,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((s|0)==73){B=c+8|0,F=n[B>>2]|0,n[F+12>>2]=k,n[B>>2]=k,n[k+8>>2]=F,n[k+12>>2]=c,n[k+24>>2]=0;break}}else n[2784]=l|c,n[f>>2]=k,n[k+24>>2]=f,n[k+12>>2]=k,n[k+8>>2]=k;while(!1);if(F=(n[2791]|0)+-1|0,n[2791]=F,!F)s=11588;else return;for(;s=n[s>>2]|0,s;)s=s+8|0;n[2791]=-1}}}function dUe(){return 11628}function mUe(s){s=s|0;var l=0,c=0;return l=C,C=C+16|0,c=l,n[c>>2]=CUe(n[s+60>>2]|0)|0,s=qD(Ec(6,c|0)|0)|0,C=l,s|0}function N7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0,We=0;j=C,C=C+48|0,M=j+16|0,m=j,d=j+32|0,k=s+28|0,f=n[k>>2]|0,n[d>>2]=f,F=s+20|0,f=(n[F>>2]|0)-f|0,n[d+4>>2]=f,n[d+8>>2]=l,n[d+12>>2]=c,f=f+c|0,B=s+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=qD(aa(146,m|0)|0)|0;e:do if((f|0)!=(m|0)){for(l=2;!((m|0)<0);)if(f=f-m|0,We=n[d+4>>2]|0,oe=m>>>0>We>>>0,d=oe?d+8|0:d,l=(oe<<31>>31)+l|0,We=m-(oe?We:0)|0,n[d>>2]=(n[d>>2]|0)+We,oe=d+4|0,n[oe>>2]=(n[oe>>2]|0)-We,n[M>>2]=n[B>>2],n[M+4>>2]=d,n[M+8>>2]=l,m=qD(aa(146,M|0)|0)|0,(f|0)==(m|0)){O=3;break e}n[s+16>>2]=0,n[k>>2]=0,n[F>>2]=0,n[s>>2]=n[s>>2]|32,(l|0)==2?c=0:c=c-(n[d+4>>2]|0)|0}else O=3;while(!1);return(O|0)==3&&(We=n[s+44>>2]|0,n[s+16>>2]=We+(n[s+48>>2]|0),n[k>>2]=We,n[F>>2]=We),C=j,c|0}function yUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return d=C,C=C+32|0,m=d,f=d+20|0,n[m>>2]=n[s+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=f,n[m+16>>2]=c,(qD(oa(140,m|0)|0)|0)<0?(n[f>>2]=-1,s=-1):s=n[f>>2]|0,C=d,s|0}function qD(s){return s=s|0,s>>>0>4294963200&&(n[(rm()|0)>>2]=0-s,s=-1),s|0}function rm(){return(EUe()|0)+64|0}function EUe(){return oT()|0}function oT(){return 2084}function CUe(s){return s=s|0,s|0}function IUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return d=C,C=C+32|0,f=d,n[s+36>>2]=1,!(n[s>>2]&64|0)&&(n[f>>2]=n[s+60>>2],n[f+4>>2]=21523,n[f+8>>2]=d+16,Ls(54,f|0)|0)&&(o[s+75>>0]=-1),f=N7(s,l,c)|0,C=d,f|0}function O7(s,l){s=s|0,l=l|0;var c=0,f=0;if(c=o[s>>0]|0,f=o[l>>0]|0,!(c<<24>>24)||c<<24>>24!=f<<24>>24)s=f;else{do s=s+1|0,l=l+1|0,c=o[s>>0]|0,f=o[l>>0]|0;while(!(!(c<<24>>24)||c<<24>>24!=f<<24>>24));s=f}return(c&255)-(s&255)|0}function wUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;e:do if(!c)s=0;else{for(;f=o[s>>0]|0,d=o[l>>0]|0,f<<24>>24==d<<24>>24;)if(c=c+-1|0,c)s=s+1|0,l=l+1|0;else{s=0;break e}s=(f&255)-(d&255)|0}while(!1);return s|0}function M7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0,We=0,Oe=0,Qe=0;Qe=C,C=C+224|0,O=Qe+120|0,j=Qe+80|0,We=Qe,Oe=Qe+136|0,f=j,d=f+40|0;do n[f>>2]=0,f=f+4|0;while((f|0)<(d|0));return n[O>>2]=n[c>>2],(aT(0,l,O,We,j)|0)<0?c=-1:((n[s+76>>2]|0)>-1?oe=BUe(s)|0:oe=0,c=n[s>>2]|0,M=c&32,(o[s+74>>0]|0)<1&&(n[s>>2]=c&-33),f=s+48|0,n[f>>2]|0?c=aT(s,l,O,We,j)|0:(d=s+44|0,m=n[d>>2]|0,n[d>>2]=Oe,B=s+28|0,n[B>>2]=Oe,k=s+20|0,n[k>>2]=Oe,n[f>>2]=80,F=s+16|0,n[F>>2]=Oe+80,c=aT(s,l,O,We,j)|0,m&&(YD[n[s+36>>2]&7](s,0,0)|0,c=n[k>>2]|0?c:-1,n[d>>2]=m,n[f>>2]=0,n[F>>2]=0,n[B>>2]=0,n[k>>2]=0)),f=n[s>>2]|0,n[s>>2]=f|M,oe|0&&vUe(s),c=f&32|0?-1:c),C=Qe,c|0}function aT(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0,We=0,Oe=0,Qe=0,rt=0,Xe=0,ct=0,_e=0,Ge=0,Nt=0,_r=0,ur=0,Zt=0,kr=0,Or=0,lr=0;lr=C,C=C+64|0,ur=lr+16|0,Zt=lr,Nt=lr+24|0,kr=lr+8|0,Or=lr+20|0,n[ur>>2]=l,ct=(s|0)!=0,_e=Nt+40|0,Ge=_e,Nt=Nt+39|0,_r=kr+4|0,B=0,m=0,O=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(rm()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(!1);if(B=o[l>>0]|0,B<<24>>24)k=l;else{Xe=87;break}t:for(;;){switch(B<<24>>24){case 37:{B=k,Xe=9;break t}case 0:{B=k;break t}default:}rt=k+1|0,n[ur>>2]=rt,B=o[rt>>0]|0,k=rt}t:do if((Xe|0)==9)for(;;){if(Xe=0,(o[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[ur>>2]=k,(o[k>>0]|0)==37)Xe=9;else break}while(!1);if(B=B-l|0,ct&&os(s,l,B),B|0){l=k;continue}F=k+1|0,B=(o[F>>0]|0)+-48|0,B>>>0<10?(rt=(o[k+2>>0]|0)==36,Qe=rt?B:-1,O=rt?1:O,F=rt?k+3|0:F):Qe=-1,n[ur>>2]=F,B=o[F>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(M=0,j=B;;){if(B=1<>2]=F,B=o[F>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;j=B}else M=0;while(!1);if(B<<24>>24==42){if(k=F+1|0,B=(o[k>>0]|0)+-48|0,B>>>0<10&&(o[F+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[f+((o[k>>0]|0)+-48<<3)>>2]|0,O=1,F=F+3|0;else{if(O|0){m=-1;break}ct?(O=(n[c>>2]|0)+3&-4,B=n[O>>2]|0,n[c>>2]=O+4,O=0,F=k):(B=0,O=0,F=k)}n[ur>>2]=F,rt=(B|0)<0,B=rt?0-B|0:B,M=rt?M|8192:M}else{if(B=U7(ur)|0,(B|0)<0){m=-1;break}F=n[ur>>2]|0}do if((o[F>>0]|0)==46){if((o[F+1>>0]|0)!=42){n[ur>>2]=F+1,k=U7(ur)|0,F=n[ur>>2]|0;break}if(j=F+2|0,k=(o[j>>0]|0)+-48|0,k>>>0<10&&(o[F+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[f+((o[j>>0]|0)+-48<<3)>>2]|0,F=F+4|0,n[ur>>2]=F;break}if(O|0){m=-1;break e}ct?(rt=(n[c>>2]|0)+3&-4,k=n[rt>>2]|0,n[c>>2]=rt+4):k=0,n[ur>>2]=j,F=j}else k=-1;while(!1);for(Oe=0;;){if(((o[F>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(rt=F+1|0,n[ur>>2]=rt,j=o[(o[F>>0]|0)+-65+(5178+(Oe*58|0))>>0]|0,oe=j&255,(oe+-1|0)>>>0<8)Oe=oe,F=rt;else break}if(!(j<<24>>24)){m=-1;break}We=(Qe|0)>-1;do if(j<<24>>24==19)if(We){m=-1;break e}else Xe=49;else{if(We){n[d+(Qe<<2)>>2]=oe,We=f+(Qe<<3)|0,Qe=n[We+4>>2]|0,Xe=Zt,n[Xe>>2]=n[We>>2],n[Xe+4>>2]=Qe,Xe=49;break}if(!ct){m=0;break e}_7(Zt,oe,c)}while(!1);if((Xe|0)==49&&(Xe=0,!ct)){B=0,l=rt;continue}F=o[F>>0]|0,F=(Oe|0)!=0&(F&15|0)==3?F&-33:F,We=M&-65537,Qe=M&8192|0?We:M;t:do switch(F|0){case 110:switch((Oe&255)<<24>>24){case 0:{n[n[Zt>>2]>>2]=m,B=0,l=rt;continue e}case 1:{n[n[Zt>>2]>>2]=m,B=0,l=rt;continue e}case 2:{B=n[Zt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=rt;continue e}case 3:{a[n[Zt>>2]>>1]=m,B=0,l=rt;continue e}case 4:{o[n[Zt>>2]>>0]=m,B=0,l=rt;continue e}case 6:{n[n[Zt>>2]>>2]=m,B=0,l=rt;continue e}case 7:{B=n[Zt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=rt;continue e}default:{B=0,l=rt;continue e}}case 112:{F=120,k=k>>>0>8?k:8,l=Qe|8,Xe=61;break}case 88:case 120:{l=Qe,Xe=61;break}case 111:{F=Zt,l=n[F>>2]|0,F=n[F+4>>2]|0,oe=SUe(l,F,_e)|0,We=Ge-oe|0,M=0,j=5642,k=(Qe&8|0)==0|(k|0)>(We|0)?k:We+1|0,We=Qe,Xe=67;break}case 105:case 100:if(F=Zt,l=n[F>>2]|0,F=n[F+4>>2]|0,(F|0)<0){l=jD(0,0,l|0,F|0)|0,F=Ce,M=Zt,n[M>>2]=l,n[M+4>>2]=F,M=1,j=5642,Xe=66;break t}else{M=(Qe&2049|0)!=0&1,j=Qe&2048|0?5643:Qe&1|0?5644:5642,Xe=66;break t}case 117:{F=Zt,M=0,j=5642,l=n[F>>2]|0,F=n[F+4>>2]|0,Xe=66;break}case 99:{o[Nt>>0]=n[Zt>>2],l=Nt,M=0,j=5642,oe=_e,F=1,k=We;break}case 109:{F=PUe(n[(rm()|0)>>2]|0)|0,Xe=71;break}case 115:{F=n[Zt>>2]|0,F=F|0?F:5652,Xe=71;break}case 67:{n[kr>>2]=n[Zt>>2],n[_r>>2]=0,n[Zt>>2]=kr,oe=-1,F=kr,Xe=75;break}case 83:{l=n[Zt>>2]|0,k?(oe=k,F=l,Xe=75):(Es(s,32,B,0,Qe),l=0,Xe=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{B=bUe(s,+E[Zt>>3],B,k,Qe,F)|0,l=rt;continue e}default:M=0,j=5642,oe=_e,F=k,k=Qe}while(!1);t:do if((Xe|0)==61)Qe=Zt,Oe=n[Qe>>2]|0,Qe=n[Qe+4>>2]|0,oe=DUe(Oe,Qe,_e,F&32)|0,j=(l&8|0)==0|(Oe|0)==0&(Qe|0)==0,M=j?0:2,j=j?5642:5642+(F>>4)|0,We=l,l=Oe,F=Qe,Xe=67;else if((Xe|0)==66)oe=nm(l,F,_e)|0,We=Qe,Xe=67;else if((Xe|0)==71)Xe=0,Qe=xUe(F,0,k)|0,Oe=(Qe|0)==0,l=F,M=0,j=5642,oe=Oe?F+k|0:Qe,F=Oe?k:Qe-F|0,k=We;else if((Xe|0)==75){for(Xe=0,j=F,l=0,k=0;M=n[j>>2]|0,!(!M||(k=H7(Or,M)|0,(k|0)<0|k>>>0>(oe-l|0)>>>0));)if(l=k+l|0,oe>>>0>l>>>0)j=j+4|0;else break;if((k|0)<0){m=-1;break e}if(Es(s,32,B,l,Qe),!l)l=0,Xe=84;else for(M=0;;){if(k=n[F>>2]|0,!k){Xe=84;break t}if(k=H7(Or,k)|0,M=k+M|0,(M|0)>(l|0)){Xe=84;break t}if(os(s,Or,k),M>>>0>=l>>>0){Xe=84;break}else F=F+4|0}}while(!1);if((Xe|0)==67)Xe=0,F=(l|0)!=0|(F|0)!=0,Qe=(k|0)!=0|F,F=((F^1)&1)+(Ge-oe)|0,l=Qe?oe:_e,oe=_e,F=Qe?(k|0)>(F|0)?k:F:k,k=(k|0)>-1?We&-65537:We;else if((Xe|0)==84){Xe=0,Es(s,32,B,l,Qe^8192),B=(B|0)>(l|0)?B:l,l=rt;continue}Oe=oe-l|0,We=(F|0)<(Oe|0)?Oe:F,Qe=We+M|0,B=(B|0)<(Qe|0)?Qe:B,Es(s,32,B,Qe,k),os(s,j,M),Es(s,48,B,Qe,k^65536),Es(s,48,We,Oe,0),os(s,l,Oe),Es(s,32,B,Qe,k^8192),l=rt}e:do if((Xe|0)==87&&!s)if(!O)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(_7(f+(m<<3)|0,l,c),m=m+1|0,(m|0)>=10){m=1;break e}for(;;){if(n[d+(m<<2)>>2]|0){m=-1;break e}if(m=m+1|0,(m|0)>=10){m=1;break}}}while(!1);return C=lr,m|0}function BUe(s){return s=s|0,0}function vUe(s){s=s|0}function os(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]&32||MUe(l,c,s)|0}function U7(s){s=s|0;var l=0,c=0,f=0;if(c=n[s>>2]|0,f=(o[c>>0]|0)+-48|0,f>>>0<10){l=0;do l=f+(l*10|0)|0,c=c+1|0,n[s>>2]=c,f=(o[c>>0]|0)+-48|0;while(f>>>0<10)}else l=0;return l|0}function _7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{f=(n[c>>2]|0)+3&-4,l=n[f>>2]|0,n[c>>2]=f+4,n[s>>2]=l;break e}case 10:{f=(n[c>>2]|0)+3&-4,l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{f=(n[c>>2]|0)+3&-4,l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=0;break e}case 12:{f=(n[c>>2]|0)+7&-8,l=f,d=n[l>>2]|0,l=n[l+4>>2]|0,n[c>>2]=f+8,f=s,n[f>>2]=d,n[f+4>>2]=l;break e}case 13:{d=(n[c>>2]|0)+3&-4,f=n[d>>2]|0,n[c>>2]=d+4,f=(f&65535)<<16>>16,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 14:{d=(n[c>>2]|0)+3&-4,f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&65535,n[d+4>>2]=0;break e}case 15:{d=(n[c>>2]|0)+3&-4,f=n[d>>2]|0,n[c>>2]=d+4,f=(f&255)<<24>>24,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 16:{d=(n[c>>2]|0)+3&-4,f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&255,n[d+4>>2]=0;break e}case 17:{d=(n[c>>2]|0)+7&-8,m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}case 18:{d=(n[c>>2]|0)+7&-8,m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}default:break e}while(!1);while(!1)}function DUe(s,l,c,f){if(s=s|0,l=l|0,c=c|0,f=f|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=u[5694+(s&15)>>0]|0|f,s=GD(s|0,l|0,4)|0,l=Ce;while(!((s|0)==0&(l|0)==0));return c|0}function SUe(s,l,c){if(s=s|0,l=l|0,c=c|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=s&7|48,s=GD(s|0,l|0,3)|0,l=Ce;while(!((s|0)==0&(l|0)==0));return c|0}function nm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if(l>>>0>0|(l|0)==0&s>>>0>4294967295){for(;f=AT(s|0,l|0,10,0)|0,c=c+-1|0,o[c>>0]=f&255|48,f=s,s=uT(s|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&f>>>0>4294967295;)l=Ce;l=s}else l=s;if(l)for(;c=c+-1|0,o[c>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return c|0}function PUe(s){return s=s|0,TUe(s,n[(RUe()|0)+188>>2]|0)|0}function xUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;m=l&255,f=(c|0)!=0;e:do if(f&(s&3|0)!=0)for(d=l&255;;){if((o[s>>0]|0)==d<<24>>24){B=6;break e}if(s=s+1|0,c=c+-1|0,f=(c|0)!=0,!(f&(s&3|0)!=0)){B=5;break}}else B=5;while(!1);(B|0)==5&&(f?B=6:c=0);e:do if((B|0)==6&&(d=l&255,(o[s>>0]|0)!=d<<24>>24)){f=He(m,16843009)|0;t:do if(c>>>0>3){for(;m=n[s>>2]^f,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(s=s+4|0,c=c+-4|0,c>>>0<=3){B=11;break t}}else B=11;while(!1);if((B|0)==11&&!c){c=0;break}for(;;){if((o[s>>0]|0)==d<<24>>24)break e;if(s=s+1|0,c=c+-1|0,!c){c=0;break}}}while(!1);return(c|0?s:0)|0}function Es(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0;if(B=C,C=C+256|0,m=B,(c|0)>(f|0)&(d&73728|0)==0){if(d=c-f|0,sm(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=c-f|0;do os(s,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}os(s,m,d)}C=B}function H7(s,l){return s=s|0,l=l|0,s?s=QUe(s,l,0)|0:s=0,s|0}function bUe(s,l,c,f,d,m){s=s|0,l=+l,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,F=0,M=0,O=0,j=0,oe=0,We=0,Oe=0,Qe=0,rt=0,Xe=0,ct=0,_e=0,Ge=0,Nt=0,_r=0,ur=0,Zt=0,kr=0,Or=0,lr=0,Ln=0;Ln=C,C=C+560|0,F=Ln+8|0,rt=Ln,lr=Ln+524|0,Or=lr,M=Ln+512|0,n[rt>>2]=0,kr=M+12|0,q7(l)|0,(Ce|0)<0?(l=-l,ur=1,_r=5659):(ur=(d&2049|0)!=0&1,_r=d&2048|0?5662:d&1|0?5665:5660),q7(l)|0,Zt=Ce&2146435072;do if(Zt>>>0<2146435072|(Zt|0)==2146435072&!1){if(We=+kUe(l,rt)*2,B=We!=0,B&&(n[rt>>2]=(n[rt>>2]|0)+-1),ct=m|32,(ct|0)==97){Oe=m&32,oe=Oe|0?_r+9|0:_r,j=ur|2,B=12-f|0;do if(f>>>0>11|(B|0)==0)l=We;else{l=8;do B=B+-1|0,l=l*16;while(B|0);if((o[oe>>0]|0)==45){l=-(l+(-We-l));break}else{l=We+l-l;break}}while(!1);k=n[rt>>2]|0,B=(k|0)<0?0-k|0:k,B=nm(B,((B|0)<0)<<31>>31,kr)|0,(B|0)==(kr|0)&&(B=M+11|0,o[B>>0]=48),o[B+-1>>0]=(k>>31&2)+43,O=B+-2|0,o[O>>0]=m+15,M=(f|0)<1,F=(d&8|0)==0,B=lr;do Zt=~~l,k=B+1|0,o[B>>0]=u[5694+Zt>>0]|Oe,l=(l-+(Zt|0))*16,(k-Or|0)==1&&!(F&(M&l==0))?(o[k>>0]=46,B=B+2|0):B=k;while(l!=0);Zt=B-Or|0,Or=kr-O|0,kr=(f|0)!=0&(Zt+-2|0)<(f|0)?f+2|0:Zt,B=Or+j+kr|0,Es(s,32,c,B,d),os(s,oe,j),Es(s,48,c,B,d^65536),os(s,lr,Zt),Es(s,48,kr-Zt|0,0,0),os(s,O,Or),Es(s,32,c,B,d^8192);break}k=(f|0)<0?6:f,B?(B=(n[rt>>2]|0)+-28|0,n[rt>>2]=B,l=We*268435456):(l=We,B=n[rt>>2]|0),Zt=(B|0)<0?F:F+288|0,F=Zt;do Ge=~~l>>>0,n[F>>2]=Ge,F=F+4|0,l=(l-+(Ge>>>0))*1e9;while(l!=0);if((B|0)>0)for(M=Zt,j=F;;){if(O=(B|0)<29?B:29,B=j+-4|0,B>>>0>=M>>>0){F=0;do _e=K7(n[B>>2]|0,0,O|0)|0,_e=cT(_e|0,Ce|0,F|0,0)|0,Ge=Ce,Xe=AT(_e|0,Ge|0,1e9,0)|0,n[B>>2]=Xe,F=uT(_e|0,Ge|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=M>>>0);F&&(M=M+-4|0,n[M>>2]=F)}for(F=j;!(F>>>0<=M>>>0);)if(B=F+-4|0,!(n[B>>2]|0))F=B;else break;if(B=(n[rt>>2]|0)-O|0,n[rt>>2]=B,(B|0)>0)j=F;else break}else M=Zt;if((B|0)<0){f=((k+25|0)/9|0)+1|0,Qe=(ct|0)==102;do{if(Oe=0-B|0,Oe=(Oe|0)<9?Oe:9,M>>>0>>0){O=(1<>>Oe,oe=0,B=M;do Ge=n[B>>2]|0,n[B>>2]=(Ge>>>Oe)+oe,oe=He(Ge&O,j)|0,B=B+4|0;while(B>>>0>>0);B=n[M>>2]|0?M:M+4|0,oe?(n[F>>2]=oe,M=B,B=F+4|0):(M=B,B=F)}else M=n[M>>2]|0?M:M+4|0,B=F;F=Qe?Zt:M,F=(B-F>>2|0)>(f|0)?F+(f<<2)|0:B,B=(n[rt>>2]|0)+Oe|0,n[rt>>2]=B}while((B|0)<0);B=M,f=F}else B=M,f=F;if(Ge=Zt,B>>>0>>0){if(F=(Ge-B>>2)*9|0,O=n[B>>2]|0,O>>>0>=10){M=10;do M=M*10|0,F=F+1|0;while(O>>>0>=M>>>0)}}else F=0;if(Qe=(ct|0)==103,Xe=(k|0)!=0,M=k-((ct|0)!=102?F:0)+((Xe&Qe)<<31>>31)|0,(M|0)<(((f-Ge>>2)*9|0)+-9|0)){if(M=M+9216|0,Oe=Zt+4+(((M|0)/9|0)+-1024<<2)|0,M=((M|0)%9|0)+1|0,(M|0)<9){O=10;do O=O*10|0,M=M+1|0;while((M|0)!=9)}else O=10;if(j=n[Oe>>2]|0,oe=(j>>>0)%(O>>>0)|0,M=(Oe+4|0)==(f|0),M&(oe|0)==0)M=Oe;else if(We=((j>>>0)/(O>>>0)|0)&1|0?9007199254740994:9007199254740992,_e=(O|0)/2|0,l=oe>>>0<_e>>>0?.5:M&(oe|0)==(_e|0)?1:1.5,ur&&(_e=(o[_r>>0]|0)==45,l=_e?-l:l,We=_e?-We:We),M=j-oe|0,n[Oe>>2]=M,We+l!=We){if(_e=M+O|0,n[Oe>>2]=_e,_e>>>0>999999999)for(F=Oe;M=F+-4|0,n[F>>2]=0,M>>>0>>0&&(B=B+-4|0,n[B>>2]=0),_e=(n[M>>2]|0)+1|0,n[M>>2]=_e,_e>>>0>999999999;)F=M;else M=Oe;if(F=(Ge-B>>2)*9|0,j=n[B>>2]|0,j>>>0>=10){O=10;do O=O*10|0,F=F+1|0;while(j>>>0>=O>>>0)}}else M=Oe;M=M+4|0,M=f>>>0>M>>>0?M:f,_e=B}else M=f,_e=B;for(ct=M;;){if(ct>>>0<=_e>>>0){rt=0;break}if(B=ct+-4|0,!(n[B>>2]|0))ct=B;else{rt=1;break}}f=0-F|0;do if(Qe)if(B=((Xe^1)&1)+k|0,(B|0)>(F|0)&(F|0)>-5?(O=m+-1|0,k=B+-1-F|0):(O=m+-2|0,k=B+-1|0),B=d&8,B)Oe=B;else{if(rt&&(Nt=n[ct+-4>>2]|0,(Nt|0)!=0))if((Nt>>>0)%10|0)M=0;else{M=0,B=10;do B=B*10|0,M=M+1|0;while(!((Nt>>>0)%(B>>>0)|0|0))}else M=9;if(B=((ct-Ge>>2)*9|0)+-9|0,(O|32|0)==102){Oe=B-M|0,Oe=(Oe|0)>0?Oe:0,k=(k|0)<(Oe|0)?k:Oe,Oe=0;break}else{Oe=B+F-M|0,Oe=(Oe|0)>0?Oe:0,k=(k|0)<(Oe|0)?k:Oe,Oe=0;break}}else O=m,Oe=d&8;while(!1);if(Qe=k|Oe,j=(Qe|0)!=0&1,oe=(O|32|0)==102,oe)Xe=0,B=(F|0)>0?F:0;else{if(B=(F|0)<0?f:F,B=nm(B,((B|0)<0)<<31>>31,kr)|0,M=kr,(M-B|0)<2)do B=B+-1|0,o[B>>0]=48;while((M-B|0)<2);o[B+-1>>0]=(F>>31&2)+43,B=B+-2|0,o[B>>0]=O,Xe=B,B=M-B|0}if(B=ur+1+k+j+B|0,Es(s,32,c,B,d),os(s,_r,ur),Es(s,48,c,B,d^65536),oe){O=_e>>>0>Zt>>>0?Zt:_e,Oe=lr+9|0,j=Oe,oe=lr+8|0,M=O;do{if(F=nm(n[M>>2]|0,0,Oe)|0,(M|0)==(O|0))(F|0)==(Oe|0)&&(o[oe>>0]=48,F=oe);else if(F>>>0>lr>>>0){sm(lr|0,48,F-Or|0)|0;do F=F+-1|0;while(F>>>0>lr>>>0)}os(s,F,j-F|0),M=M+4|0}while(M>>>0<=Zt>>>0);if(Qe|0&&os(s,5710,1),M>>>0>>0&(k|0)>0)for(;;){if(F=nm(n[M>>2]|0,0,Oe)|0,F>>>0>lr>>>0){sm(lr|0,48,F-Or|0)|0;do F=F+-1|0;while(F>>>0>lr>>>0)}if(os(s,F,(k|0)<9?k:9),M=M+4|0,F=k+-9|0,M>>>0>>0&(k|0)>9)k=F;else{k=F;break}}Es(s,48,k+9|0,9,0)}else{if(Qe=rt?ct:_e+4|0,(k|0)>-1){rt=lr+9|0,Oe=(Oe|0)==0,f=rt,j=0-Or|0,oe=lr+8|0,O=_e;do{F=nm(n[O>>2]|0,0,rt)|0,(F|0)==(rt|0)&&(o[oe>>0]=48,F=oe);do if((O|0)==(_e|0)){if(M=F+1|0,os(s,F,1),Oe&(k|0)<1){F=M;break}os(s,5710,1),F=M}else{if(F>>>0<=lr>>>0)break;sm(lr|0,48,F+j|0)|0;do F=F+-1|0;while(F>>>0>lr>>>0)}while(!1);Or=f-F|0,os(s,F,(k|0)>(Or|0)?Or:k),k=k-Or|0,O=O+4|0}while(O>>>0>>0&(k|0)>-1)}Es(s,48,k+18|0,18,0),os(s,Xe,kr-Xe|0)}Es(s,32,c,B,d^8192)}else lr=(m&32|0)!=0,B=ur+3|0,Es(s,32,c,B,d&-65537),os(s,_r,ur),os(s,l!=l|!1?lr?5686:5690:lr?5678:5682,3),Es(s,32,c,B,d^8192);while(!1);return C=Ln,((B|0)<(c|0)?c:B)|0}function q7(s){s=+s;var l=0;return E[D>>3]=s,l=n[D>>2]|0,Ce=n[D+4>>2]|0,l|0}function kUe(s,l){return s=+s,l=l|0,+ +j7(s,l)}function j7(s,l){s=+s,l=l|0;var c=0,f=0,d=0;switch(E[D>>3]=s,c=n[D>>2]|0,f=n[D+4>>2]|0,d=GD(c|0,f|0,52)|0,d&2047){case 0:{s!=0?(s=+j7(s*18446744073709552e3,l),c=(n[l>>2]|0)+-64|0):c=0,n[l>>2]=c;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[D>>2]=c,n[D+4>>2]=f&-2146435073|1071644672,s=+E[D>>3]}return+s}function QUe(s,l,c){s=s|0,l=l|0,c=c|0;do if(s){if(l>>>0<128){o[s>>0]=l,s=1;break}if(!(n[n[(FUe()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){o[s>>0]=l,s=1;break}else{n[(rm()|0)>>2]=84,s=-1;break}if(l>>>0<2048){o[s>>0]=l>>>6|192,o[s+1>>0]=l&63|128,s=2;break}if(l>>>0<55296|(l&-8192|0)==57344){o[s>>0]=l>>>12|224,o[s+1>>0]=l>>>6&63|128,o[s+2>>0]=l&63|128,s=3;break}if((l+-65536|0)>>>0<1048576){o[s>>0]=l>>>18|240,o[s+1>>0]=l>>>12&63|128,o[s+2>>0]=l>>>6&63|128,o[s+3>>0]=l&63|128,s=4;break}else{n[(rm()|0)>>2]=84,s=-1;break}}else s=1;while(!1);return s|0}function FUe(){return oT()|0}function RUe(){return oT()|0}function TUe(s,l){s=s|0,l=l|0;var c=0,f=0;for(f=0;;){if((u[5712+f>>0]|0)==(s|0)){s=2;break}if(c=f+1|0,(c|0)==87){c=5800,f=87,s=5;break}else f=c}if((s|0)==2&&(f?(c=5800,s=5):c=5800),(s|0)==5)for(;;){do s=c,c=c+1|0;while(o[s>>0]|0);if(f=f+-1|0,f)s=5;else break}return LUe(c,n[l+20>>2]|0)|0}function LUe(s,l){return s=s|0,l=l|0,NUe(s,l)|0}function NUe(s,l){return s=s|0,l=l|0,l?l=OUe(n[l>>2]|0,n[l+4>>2]|0,s)|0:l=0,(l|0?l:s)|0}function OUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0;oe=(n[s>>2]|0)+1794895138|0,m=O0(n[s+8>>2]|0,oe)|0,f=O0(n[s+12>>2]|0,oe)|0,d=O0(n[s+16>>2]|0,oe)|0;e:do if(m>>>0>>2>>>0&&(j=l-(m<<2)|0,f>>>0>>0&d>>>0>>0)&&!((d|f)&3|0)){for(j=f>>>2,O=d>>>2,M=0;;){if(k=m>>>1,F=M+k|0,B=F<<1,d=B+j|0,f=O0(n[s+(d<<2)>>2]|0,oe)|0,d=O0(n[s+(d+1<<2)>>2]|0,oe)|0,!(d>>>0>>0&f>>>0<(l-d|0)>>>0)){f=0;break e}if(o[s+(d+f)>>0]|0){f=0;break e}if(f=O7(c,s+d|0)|0,!f)break;if(f=(f|0)<0,(m|0)==1){f=0;break e}else M=f?M:F,m=f?k:m-k|0}f=B+O|0,d=O0(n[s+(f<<2)>>2]|0,oe)|0,f=O0(n[s+(f+1<<2)>>2]|0,oe)|0,f>>>0>>0&d>>>0<(l-f|0)>>>0?f=o[s+(f+d)>>0]|0?0:s+f|0:f=0}else f=0;while(!1);return f|0}function O0(s,l){s=s|0,l=l|0;var c=0;return c=X7(s|0)|0,(l|0?c:s)|0}function MUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=c+16|0,d=n[f>>2]|0,d?m=5:UUe(c)|0?f=0:(d=n[f>>2]|0,m=5);e:do if((m|0)==5){if(k=c+20|0,B=n[k>>2]|0,f=B,(d-B|0)>>>0>>0){f=YD[n[c+36>>2]&7](c,s,l)|0;break}t:do if((o[c+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=s;break t}if(d=B+-1|0,(o[s+d>>0]|0)==10)break;B=d}if(f=YD[n[c+36>>2]&7](c,s,B)|0,f>>>0>>0)break e;m=B,d=s+B|0,l=l-B|0,f=n[k>>2]|0}else m=0,d=s;while(!1);br(f|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,f=m+l|0}while(!1);return f|0}function UUe(s){s=s|0;var l=0,c=0;return l=s+74|0,c=o[l>>0]|0,o[l>>0]=c+255|c,l=n[s>>2]|0,l&8?(n[s>>2]=l|32,s=-1):(n[s+8>>2]=0,n[s+4>>2]=0,c=n[s+44>>2]|0,n[s+28>>2]=c,n[s+20>>2]=c,n[s+16>>2]=c+(n[s+48>>2]|0),s=0),s|0}function Yn(s,l){s=y(s),l=y(l);var c=0,f=0;c=G7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=G7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?l:s;break}else{s=s>2]=s,n[D>>2]|0|0}function M0(s,l){s=y(s),l=y(l);var c=0,f=0;c=W7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=W7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?s:l;break}else{s=s>2]=s,n[D>>2]|0|0}function lT(s,l){s=y(s),l=y(l);var c=0,f=0,d=0,m=0,B=0,k=0,F=0,M=0;m=(h[D>>2]=s,n[D>>2]|0),k=(h[D>>2]=l,n[D>>2]|0),c=m>>>23&255,B=k>>>23&255,F=m&-2147483648,d=k<<1;e:do if(d|0&&!((c|0)==255|((_Ue(l)|0)&2147483647)>>>0>2139095040)){if(f=m<<1,f>>>0<=d>>>0)return l=y(s*y(0)),y((f|0)==(d|0)?l:s);if(c)f=m&8388607|8388608;else{if(c=m<<9,(c|0)>-1){f=c,c=0;do c=c+-1|0,f=f<<1;while((f|0)>-1)}else c=0;f=m<<1-c}if(B)k=k&8388607|8388608;else{if(m=k<<9,(m|0)>-1){d=0;do d=d+-1|0,m=m<<1;while((m|0)>-1)}else d=0;B=d,k=k<<1-d}d=f-k|0,m=(d|0)>-1;t:do if((c|0)>(B|0)){for(;;){if(m)if(d)f=d;else break;if(f=f<<1,c=c+-1|0,d=f-k|0,m=(d|0)>-1,(c|0)<=(B|0))break t}l=y(s*y(0));break e}while(!1);if(m)if(d)f=d;else{l=y(s*y(0));break}if(f>>>0<8388608)do f=f<<1,c=c+-1|0;while(f>>>0<8388608);(c|0)>0?c=f+-8388608|c<<23:c=f>>>(1-c|0),l=(n[D>>2]=c|F,y(h[D>>2]))}else M=3;while(!1);return(M|0)==3&&(l=y(s*l),l=y(l/l)),y(l)}function _Ue(s){return s=y(s),h[D>>2]=s,n[D>>2]|0|0}function HUe(s,l){return s=s|0,l=l|0,M7(n[582]|0,s,l)|0}function Zr(s){s=s|0,Tt()}function im(s){s=s|0}function qUe(s,l){return s=s|0,l=l|0,0}function jUe(s){return s=s|0,(Y7(s+4|0)|0)==-1?(ef[n[(n[s>>2]|0)+8>>2]&127](s),s=1):s=0,s|0}function Y7(s){s=s|0;var l=0;return l=n[s>>2]|0,n[s>>2]=l+-1,l+-1|0}function Rp(s){s=s|0,jUe(s)|0&&GUe(s)}function GUe(s){s=s|0;var l=0;l=s+8|0,n[l>>2]|0&&(Y7(l)|0)!=-1||ef[n[(n[s>>2]|0)+16>>2]&127](s)}function Yt(s){s=s|0;var l=0;for(l=s|0?s:1;s=_D(l)|0,!(s|0);){if(s=YUe()|0,!s){s=0;break}aW[s&0]()}return s|0}function V7(s){return s=s|0,Yt(s)|0}function yt(s){s=s|0,HD(s)}function WUe(s){s=s|0,(o[s+11>>0]|0)<0&&yt(n[s>>2]|0)}function YUe(){var s=0;return s=n[2923]|0,n[2923]=s+0,s|0}function VUe(){}function jD(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,f=l-f-(c>>>0>s>>>0|0)>>>0,Ce=f,s-c>>>0|0|0}function cT(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,c=s+c>>>0,Ce=l+f+(c>>>0>>0|0)>>>0,c|0|0}function sm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(m=s+c|0,l=l&255,(c|0)>=67){for(;s&3;)o[s>>0]=l,s=s+1|0;for(f=m&-4|0,d=f-64|0,B=l|l<<8|l<<16|l<<24;(s|0)<=(d|0);)n[s>>2]=B,n[s+4>>2]=B,n[s+8>>2]=B,n[s+12>>2]=B,n[s+16>>2]=B,n[s+20>>2]=B,n[s+24>>2]=B,n[s+28>>2]=B,n[s+32>>2]=B,n[s+36>>2]=B,n[s+40>>2]=B,n[s+44>>2]=B,n[s+48>>2]=B,n[s+52>>2]=B,n[s+56>>2]=B,n[s+60>>2]=B,s=s+64|0;for(;(s|0)<(f|0);)n[s>>2]=B,s=s+4|0}for(;(s|0)<(m|0);)o[s>>0]=l,s=s+1|0;return m-c|0}function K7(s,l,c){return s=s|0,l=l|0,c=c|0,(c|0)<32?(Ce=l<>>32-c,s<>>c,s>>>c|(l&(1<>>c-32|0)}function br(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;if((c|0)>=8192)return FA(s|0,l|0,c|0)|0;if(m=s|0,d=s+c|0,(s&3)==(l&3)){for(;s&3;){if(!c)return m|0;o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0,c=c-1|0}for(c=d&-4|0,f=c-64|0;(s|0)<=(f|0);)n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2],n[s+16>>2]=n[l+16>>2],n[s+20>>2]=n[l+20>>2],n[s+24>>2]=n[l+24>>2],n[s+28>>2]=n[l+28>>2],n[s+32>>2]=n[l+32>>2],n[s+36>>2]=n[l+36>>2],n[s+40>>2]=n[l+40>>2],n[s+44>>2]=n[l+44>>2],n[s+48>>2]=n[l+48>>2],n[s+52>>2]=n[l+52>>2],n[s+56>>2]=n[l+56>>2],n[s+60>>2]=n[l+60>>2],s=s+64|0,l=l+64|0;for(;(s|0)<(c|0);)n[s>>2]=n[l>>2],s=s+4|0,l=l+4|0}else for(c=d-4|0;(s|0)<(c|0);)o[s>>0]=o[l>>0]|0,o[s+1>>0]=o[l+1>>0]|0,o[s+2>>0]=o[l+2>>0]|0,o[s+3>>0]=o[l+3>>0]|0,s=s+4|0,l=l+4|0;for(;(s|0)<(d|0);)o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0;return m|0}function J7(s){s=s|0;var l=0;return l=o[N+(s&255)>>0]|0,(l|0)<8?l|0:(l=o[N+(s>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=o[N+(s>>16&255)>>0]|0,(l|0)<8?l+16|0:(o[N+(s>>>24)>>0]|0)+24|0))}function z7(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,F=0,M=0,O=0,j=0,oe=0,We=0,Oe=0;if(O=s,F=l,M=F,B=c,oe=f,k=oe,!M)return m=(d|0)!=0,k?m?(n[d>>2]=s|0,n[d+4>>2]=l&0,oe=0,d=0,Ce=oe,d|0):(oe=0,d=0,Ce=oe,d|0):(m&&(n[d>>2]=(O>>>0)%(B>>>0),n[d+4>>2]=0),oe=0,d=(O>>>0)/(B>>>0)>>>0,Ce=oe,d|0);m=(k|0)==0;do if(B){if(!m){if(m=(P(k|0)|0)-(P(M|0)|0)|0,m>>>0<=31){j=m+1|0,k=31-m|0,l=m-31>>31,B=j,s=O>>>(j>>>0)&l|M<>>(j>>>0)&l,m=0,k=O<>2]=s|0,n[d+4>>2]=F|l&0,oe=0,d=0,Ce=oe,d|0):(oe=0,d=0,Ce=oe,d|0)}if(m=B-1|0,m&B|0){k=(P(B|0)|0)+33-(P(M|0)|0)|0,Oe=64-k|0,j=32-k|0,F=j>>31,We=k-32|0,l=We>>31,B=k,s=j-1>>31&M>>>(We>>>0)|(M<>>(k>>>0))&l,l=l&M>>>(k>>>0),m=O<>>(We>>>0))&F|O<>31;break}return d|0&&(n[d>>2]=m&O,n[d+4>>2]=0),(B|0)==1?(We=F|l&0,Oe=s|0|0,Ce=We,Oe|0):(Oe=J7(B|0)|0,We=M>>>(Oe>>>0)|0,Oe=M<<32-Oe|O>>>(Oe>>>0)|0,Ce=We,Oe|0)}else{if(m)return d|0&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),We=0,Oe=(M>>>0)/(B>>>0)>>>0,Ce=We,Oe|0;if(!O)return d|0&&(n[d>>2]=0,n[d+4>>2]=(M>>>0)%(k>>>0)),We=0,Oe=(M>>>0)/(k>>>0)>>>0,Ce=We,Oe|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=s|0,n[d+4>>2]=m&M|l&0),We=0,Oe=M>>>((J7(k|0)|0)>>>0),Ce=We,Oe|0;if(m=(P(k|0)|0)-(P(M|0)|0)|0,m>>>0<=30){l=m+1|0,k=31-m|0,B=l,s=M<>>(l>>>0),l=M>>>(l>>>0),m=0,k=O<>2]=s|0,n[d+4>>2]=F|l&0,We=0,Oe=0,Ce=We,Oe|0):(We=0,Oe=0,Ce=We,Oe|0)}while(!1);if(!B)M=k,F=0,k=0;else{j=c|0|0,O=oe|f&0,M=cT(j|0,O|0,-1,-1)|0,c=Ce,F=k,k=0;do f=F,F=m>>>31|F<<1,m=k|m<<1,f=s<<1|f>>>31|0,oe=s>>>31|l<<1|0,jD(M|0,c|0,f|0,oe|0)|0,Oe=Ce,We=Oe>>31|((Oe|0)<0?-1:0)<<1,k=We&1,s=jD(f|0,oe|0,We&j|0,(((Oe|0)<0?-1:0)>>31|((Oe|0)<0?-1:0)<<1)&O|0)|0,l=Ce,B=B-1|0;while(B|0);M=F,F=0}return B=0,d|0&&(n[d>>2]=s,n[d+4>>2]=l),We=(m|0)>>>31|(M|B)<<1|(B<<1|m>>>31)&0|F,Oe=(m<<1|0)&-2|k,Ce=We,Oe|0}function uT(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,z7(s,l,c,f,0)|0}function Tp(s){s=s|0;var l=0,c=0;return c=s+15&-16|0,l=n[w>>2]|0,s=l+c|0,(c|0)>0&(s|0)<(l|0)|(s|0)<0?(se()|0,yc(12),-1):(n[w>>2]=s,(s|0)>($()|0)&&!(X()|0)?(n[w>>2]=l,yc(12),-1):l|0)}function rw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if((l|0)<(s|0)&(s|0)<(l+c|0)){for(f=s,l=l+c|0,s=s+c|0;(c|0)>0;)s=s-1|0,l=l-1|0,c=c-1|0,o[s>>0]=o[l>>0]|0;s=f}else br(s,l,c)|0;return s|0}function AT(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;return m=C,C=C+16|0,d=m|0,z7(s,l,c,f,d)|0,C=m,Ce=n[d+4>>2]|0,n[d>>2]|0|0}function X7(s){return s=s|0,(s&255)<<24|(s>>8&255)<<16|(s>>16&255)<<8|s>>>24|0}function KUe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,Z7[s&1](l|0,c|0,f|0,d|0,m|0)}function JUe(s,l,c){s=s|0,l=l|0,c=y(c),$7[s&1](l|0,y(c))}function zUe(s,l,c){s=s|0,l=l|0,c=+c,eW[s&31](l|0,+c)}function XUe(s,l,c,f){return s=s|0,l=l|0,c=y(c),f=y(f),y(tW[s&0](l|0,y(c),y(f)))}function ZUe(s,l){s=s|0,l=l|0,ef[s&127](l|0)}function $Ue(s,l,c){s=s|0,l=l|0,c=c|0,tf[s&31](l|0,c|0)}function e3e(s,l){return s=s|0,l=l|0,_0[s&31](l|0)|0}function t3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,rW[s&1](l|0,+c,+f,d|0)}function r3e(s,l,c,f){s=s|0,l=l|0,c=+c,f=+f,N3e[s&1](l|0,+c,+f)}function n3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,YD[s&7](l|0,c|0,f|0)|0}function i3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,+O3e[s&1](l|0,c|0,f|0)}function s3e(s,l){return s=s|0,l=l|0,+nW[s&15](l|0)}function o3e(s,l,c){return s=s|0,l=l|0,c=+c,M3e[s&1](l|0,+c)|0}function a3e(s,l,c){return s=s|0,l=l|0,c=c|0,pT[s&15](l|0,c|0)|0}function l3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=+f,d=+d,m=m|0,U3e[s&1](l|0,c|0,+f,+d,m|0)}function c3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,_3e[s&1](l|0,c|0,f|0,d|0,m|0,B|0)}function u3e(s,l,c){return s=s|0,l=l|0,c=c|0,+iW[s&7](l|0,c|0)}function A3e(s){return s=s|0,VD[s&7]()|0}function f3e(s,l,c,f,d,m){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,sW[s&1](l|0,c|0,f|0,d|0,m|0)|0}function p3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=+d,H3e[s&1](l|0,c|0,f|0,+d)}function h3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,oW[s&1](l|0,c|0,y(f),d|0,y(m),B|0)}function g3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,sw[s&15](l|0,c|0,f|0)}function d3e(s){s=s|0,aW[s&0]()}function m3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,lW[s&15](l|0,c|0,+f)}function y3e(s,l,c){return s=s|0,l=+l,c=+c,q3e[s&1](+l,+c)|0}function E3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,hT[s&15](l|0,c|0,f|0,d|0)}function C3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,R(0)}function I3e(s,l){s=s|0,l=y(l),R(1)}function Ca(s,l){s=s|0,l=+l,R(2)}function w3e(s,l,c){return s=s|0,l=y(l),c=y(c),R(3),Ze}function Cr(s){s=s|0,R(4)}function nw(s,l){s=s|0,l=l|0,R(5)}function tl(s){return s=s|0,R(6),0}function B3e(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,R(7)}function v3e(s,l,c){s=s|0,l=+l,c=+c,R(8)}function D3e(s,l,c){return s=s|0,l=l|0,c=c|0,R(9),0}function S3e(s,l,c){return s=s|0,l=l|0,c=c|0,R(10),0}function U0(s){return s=s|0,R(11),0}function P3e(s,l){return s=s|0,l=+l,R(12),0}function iw(s,l){return s=s|0,l=l|0,R(13),0}function x3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,R(14)}function b3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,R(15)}function fT(s,l){return s=s|0,l=l|0,R(16),0}function k3e(){return R(17),0}function Q3e(s,l,c,f,d){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,R(18),0}function F3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,R(19)}function R3e(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0,R(20)}function WD(s,l,c){s=s|0,l=l|0,c=c|0,R(21)}function T3e(){R(22)}function om(s,l,c){s=s|0,l=l|0,c=+c,R(23)}function L3e(s,l){return s=+s,l=+l,R(24),0}function am(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,R(25)}var Z7=[C3e,QNe],$7=[I3e,Od],eW=[Ca,B0,vp,UI,_I,HI,qI,ku,Wd,jI,Qu,v0,D0,GI,WI,bc,S0,YI,Yd,Ca,Ca,Ca,Ca,Ca,Ca,Ca,Ca,Ca,Ca,Ca,Ca,Ca],tW=[w3e],ef=[Cr,im,ADe,fDe,pDe,qxe,jxe,Gxe,oLe,aLe,lLe,yNe,ENe,CNe,_4e,H4e,q4e,qa,w0,LI,ir,bl,bD,kD,tDe,IDe,RDe,XDe,pSe,kSe,VSe,lPe,BPe,UPe,txe,mxe,Rxe,abe,Bbe,Ube,tke,mke,Rke,Zke,pQe,PQe,jQe,dD,CFe,NFe,tRe,ERe,TRe,tTe,ATe,hTe,QTe,TTe,XTe,uLe,pLe,kLe,KLe,M5,bOe,oMe,IMe,NMe,i4e,E4e,k4e,R4e,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr,Cr],tf=[nw,qd,YF,NI,OI,Pr,Os,Oi,ms,is,Gd,Bp,KI,ID,b0,JF,zF,wD,BD,$F,Fu,ne,rQe,dQe,BRe,FOe,rNe,w7,nw,nw,nw,nw],_0=[tl,mUe,_d,x0,Kd,qo,mD,Dp,VI,KF,ED,Jd,vD,eR,Zd,YQe,MRe,RLe,NOe,Za,tl,tl,tl,tl,tl,tl,tl,tl,tl,tl,tl,tl],rW=[B3e,sR],N3e=[v3e,eLe],YD=[D3e,N7,yUe,IUe,TSe,Abe,vFe,_Me],O3e=[S3e,sxe],nW=[U0,Sp,CD,JA,oR,v,S,Q,H,Y,U0,U0,U0,U0,U0,U0],M3e=[P3e,lTe],pT=[iw,qUe,DD,sDe,tSe,zSe,APe,Oxe,Pbe,QQe,Md,DMe,iw,iw,iw,iw],U3e=[x3e,ODe],_3e=[b3e,l4e],iW=[fT,XF,Be,Ue,ft,Ixe,fT,fT],VD=[k3e,jt,Ud,gD,yTe,MTe,mLe,O4e],sW=[Q3e,kd],H3e=[F3e,ske],oW=[R3e,tR],sw=[WD,oo,yD,ZF,Qc,mSe,SPe,Ike,Oke,WF,eOe,uMe,B4e,WD,WD,WD],aW=[T3e],lW=[om,VF,jd,KA,MI,kc,Vd,P0,jbe,_Fe,iTe,om,om,om,om,om],q3e=[L3e,iLe],hT=[am,jPe,eFe,sRe,VRe,vTe,GTe,vLe,$Le,qOe,K4e,am,am,am,am,am];return{_llvm_bswap_i32:X7,dynCall_idd:y3e,dynCall_i:A3e,_i64Subtract:jD,___udivdi3:uT,dynCall_vif:JUe,setThrew:No,dynCall_viii:g3e,_bitshift64Lshr:GD,_bitshift64Shl:K7,dynCall_vi:ZUe,dynCall_viiddi:l3e,dynCall_diii:i3e,dynCall_iii:a3e,_memset:sm,_sbrk:Tp,_memcpy:br,__GLOBAL__sub_I_Yoga_cpp:FI,dynCall_vii:$Ue,___uremdi3:AT,dynCall_vid:zUe,stackAlloc:ca,_nbind_init:sUe,getTempRet0:TA,dynCall_di:s3e,dynCall_iid:o3e,setTempRet0:RA,_i64Add:cT,dynCall_fiff:XUe,dynCall_iiii:n3e,_emscripten_get_global_libc:dUe,dynCall_viid:m3e,dynCall_viiid:p3e,dynCall_viififi:h3e,dynCall_ii:e3e,__GLOBAL__sub_I_Binding_cc:IOe,dynCall_viiii:E3e,dynCall_iiiiii:f3e,stackSave:mu,dynCall_viiiii:KUe,__GLOBAL__sub_I_nbind_cc:wr,dynCall_vidd:r3e,_free:HD,runPostSets:VUe,dynCall_viiiiii:c3e,establishStackSpace:dn,_memmove:rw,stackRestore:Bl,_malloc:_D,__GLOBAL__sub_I_common_cc:HLe,dynCall_viddi:t3e,dynCall_dii:u3e,dynCall_v:d3e}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function t(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=t)},Module.callMain=Module.callMain=function t(e){e=e||[],ensureInitRuntime();var r=e.length+1;function o(){for(var p=0;p<3;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];o();for(var n=0;n0||(preRun(),runDependencies>0)||Module.calledRun)return;function e(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(t),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),e()},1)):e()}Module.run=Module.run=run;function exit(t,e){e&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=t,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(t)),ENVIRONMENT_IS_NODE&&process.exit(t),Module.quit(t,new ExitStatus(t)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(t){Module.onAbort&&Module.onAbort(t),t!==void 0?(Module.print(t),Module.printErr(t),t=JSON.stringify(t)):t="",ABORT=!0,EXITSTATUS=1;var e=` +If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,r="abort("+t+") at "+stackTrace()+e;throw abortDecorators&&abortDecorators.forEach(function(o){r=o(r,t)}),r}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var id=_((nVt,PCe)=>{"use strict";var byt=DCe(),kyt=SCe(),pq=!1,hq=null;kyt({},function(t,e){if(!pq){if(pq=!0,t)throw t;hq=e}});if(!pq)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");PCe.exports=byt(hq.bind,hq.lib)});var dq=_((iVt,gq)=>{"use strict";var xCe=t=>Number.isNaN(t)?!1:t>=4352&&(t<=4447||t===9001||t===9002||11904<=t&&t<=12871&&t!==12351||12880<=t&&t<=19903||19968<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65131||65281<=t&&t<=65376||65504<=t&&t<=65510||110592<=t&&t<=110593||127488<=t&&t<=127569||131072<=t&&t<=262141);gq.exports=xCe;gq.exports.default=xCe});var kCe=_((sVt,bCe)=>{"use strict";bCe.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var SB=_((oVt,mq)=>{"use strict";var Qyt=hP(),Fyt=dq(),Ryt=kCe(),QCe=t=>{if(typeof t!="string"||t.length===0||(t=Qyt(t),t.length===0))return 0;t=t.replace(Ryt()," ");let e=0;for(let r=0;r=127&&o<=159||o>=768&&o<=879||(o>65535&&r++,e+=Fyt(o)?2:1)}return e};mq.exports=QCe;mq.exports.default=QCe});var Eq=_((aVt,yq)=>{"use strict";var Tyt=SB(),FCe=t=>{let e=0;for(let r of t.split(` +`))e=Math.max(e,Tyt(r));return e};yq.exports=FCe;yq.exports.default=FCe});var RCe=_(PB=>{"use strict";var Lyt=PB&&PB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(PB,"__esModule",{value:!0});var Nyt=Lyt(Eq()),Cq={};PB.default=t=>{if(t.length===0)return{width:0,height:0};if(Cq[t])return Cq[t];let e=Nyt.default(t),r=t.split(` +`).length;return Cq[t]={width:e,height:r},{width:e,height:r}}});var TCe=_(xB=>{"use strict";var Oyt=xB&&xB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xB,"__esModule",{value:!0});var In=Oyt(id()),Myt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?In.default.POSITION_TYPE_ABSOLUTE:In.default.POSITION_TYPE_RELATIVE)},Uyt=(t,e)=>{"marginLeft"in e&&t.setMargin(In.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(In.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(In.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(In.default.EDGE_BOTTOM,e.marginBottom||0)},_yt=(t,e)=>{"paddingLeft"in e&&t.setPadding(In.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(In.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(In.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(In.default.EDGE_BOTTOM,e.paddingBottom||0)},Hyt=(t,e)=>{var r;"flexGrow"in e&&t.setFlexGrow((r=e.flexGrow)!==null&&r!==void 0?r:0),"flexShrink"in e&&t.setFlexShrink(typeof e.flexShrink=="number"?e.flexShrink:1),"flexDirection"in e&&(e.flexDirection==="row"&&t.setFlexDirection(In.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(In.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(In.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(In.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in e&&(typeof e.flexBasis=="number"?t.setFlexBasis(e.flexBasis):typeof e.flexBasis=="string"?t.setFlexBasisPercent(Number.parseInt(e.flexBasis,10)):t.setFlexBasis(NaN)),"alignItems"in e&&((e.alignItems==="stretch"||!e.alignItems)&&t.setAlignItems(In.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(In.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(In.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(In.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(In.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(In.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(In.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(In.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(In.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(In.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(In.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(In.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(In.default.JUSTIFY_SPACE_AROUND))},qyt=(t,e)=>{var r,o;"width"in e&&(typeof e.width=="number"?t.setWidth(e.width):typeof e.width=="string"?t.setWidthPercent(Number.parseInt(e.width,10)):t.setWidthAuto()),"height"in e&&(typeof e.height=="number"?t.setHeight(e.height):typeof e.height=="string"?t.setHeightPercent(Number.parseInt(e.height,10)):t.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?t.setMinWidthPercent(Number.parseInt(e.minWidth,10)):t.setMinWidth((r=e.minWidth)!==null&&r!==void 0?r:0)),"minHeight"in e&&(typeof e.minHeight=="string"?t.setMinHeightPercent(Number.parseInt(e.minHeight,10)):t.setMinHeight((o=e.minHeight)!==null&&o!==void 0?o:0))},jyt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?In.default.DISPLAY_FLEX:In.default.DISPLAY_NONE)},Gyt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(In.default.EDGE_TOP,r),t.setBorder(In.default.EDGE_BOTTOM,r),t.setBorder(In.default.EDGE_LEFT,r),t.setBorder(In.default.EDGE_RIGHT,r)}};xB.default=(t,e={})=>{Myt(t,e),Uyt(t,e),_yt(t,e),Hyt(t,e),qyt(t,e),jyt(t,e),Gyt(t,e)}});var OCe=_((uVt,NCe)=>{"use strict";var bB=SB(),Wyt=hP(),Yyt=qw(),wq=new Set(["\x1B","\x9B"]),Vyt=39,LCe=t=>`${wq.values().next().value}[${t}m`,Kyt=t=>t.split(" ").map(e=>bB(e)),Iq=(t,e,r)=>{let o=[...e],a=!1,n=bB(Wyt(t[t.length-1]));for(let[u,A]of o.entries()){let p=bB(A);if(n+p<=r?t[t.length-1]+=A:(t.push(A),n=0),wq.has(A))a=!0;else if(a&&A==="m"){a=!1;continue}a||(n+=p,n===r&&u0&&t.length>1&&(t[t.length-2]+=t.pop())},Jyt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(bB(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},zyt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",a="",n,u=Kyt(t),A=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let E=bB(A[A.length-1]);if(p!==0&&(E>=e&&(r.wordWrap===!1||r.trim===!1)&&(A.push(""),E=0),(E>0||r.trim===!1)&&(A[A.length-1]+=" ",E++)),r.hard&&u[p]>e){let w=e-E,D=1+Math.floor((u[p]-w-1)/e);Math.floor((u[p]-1)/e)e&&E>0&&u[p]>0){if(r.wordWrap===!1&&Ee&&r.wordWrap===!1){Iq(A,h,e);continue}A[A.length-1]+=h}r.trim!==!1&&(A=A.map(Jyt)),o=A.join(` +`);for(let[p,h]of[...o].entries()){if(a+=h,wq.has(h)){let w=parseFloat(/\d[^m]*/.exec(o.slice(p,p+4)));n=w===Vyt?null:w}let E=Yyt.codes.get(Number(n));n&&E&&(o[p+1]===` +`?a+=LCe(E):h===` +`&&(a+=LCe(n)))}return a};NCe.exports=(t,e,r)=>String(t).normalize().replace(/\r\n/g,` +`).split(` +`).map(o=>zyt(o,e,r)).join(` +`)});var _Ce=_((AVt,UCe)=>{"use strict";var MCe="[\uD800-\uDBFF][\uDC00-\uDFFF]",Xyt=t=>t&&t.exact?new RegExp(`^${MCe}$`):new RegExp(MCe,"g");UCe.exports=Xyt});var Bq=_((fVt,GCe)=>{"use strict";var Zyt=dq(),$yt=_Ce(),HCe=qw(),jCe=["\x1B","\x9B"],vQ=t=>`${jCe[0]}[${t}m`,qCe=(t,e,r)=>{let o=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let u=HCe.codes.get(parseInt(a,10));if(u){let A=t.indexOf(u.toString());A>=0?t.splice(A,1):o.push(vQ(e?u:n))}else if(e){o.push(vQ(0));break}else o.push(vQ(n))}if(e&&(o=o.filter((a,n)=>o.indexOf(a)===n),r!==void 0)){let a=vQ(HCe.codes.get(parseInt(r,10)));o=o.reduce((n,u)=>u===a?[u,...n]:[...n,u],[])}return o.join("")};GCe.exports=(t,e,r)=>{let o=[...t.normalize()],a=[];r=typeof r=="number"?r:o.length;let n=!1,u,A=0,p="";for(let[h,E]of o.entries()){let w=!1;if(jCe.includes(E)){let D=/\d[^m]*/.exec(t.slice(h,h+18));u=D&&D.length>0?D[0]:void 0,Ae&&A<=r)p+=E;else if(A===e&&!n&&u!==void 0)p=qCe(a);else if(A>=r){p+=qCe(a,!0,u);break}}return p}});var YCe=_((pVt,WCe)=>{"use strict";var _h=Bq(),eEt=SB();function DQ(t,e,r){if(t.charAt(e)===" ")return e;for(let o=1;o<=3;o++)if(r){if(t.charAt(e+o)===" ")return e+o}else if(t.charAt(e-o)===" ")return e-o;return e}WCe.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:o,space:a,preferTruncationOnSpace:n}=r,u="\u2026",A=1;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof t}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return"";if(e===1)return u;let p=eEt(t);if(p<=e)return t;if(o==="start"){if(n){let h=DQ(t,p-e+1,!0);return u+_h(t,h,p).trim()}return a===!0&&(u+=" ",A=2),u+_h(t,p-e+A,p)}if(o==="middle"){a===!0&&(u=" "+u+" ",A=3);let h=Math.floor(e/2);if(n){let E=DQ(t,h),w=DQ(t,p-(e-h)+1,!0);return _h(t,0,E)+u+_h(t,w,p).trim()}return _h(t,0,h)+u+_h(t,p-(e-h)+A,p)}if(o==="end"){if(n){let h=DQ(t,e-1);return _h(t,0,h)+u}return a===!0&&(u=" "+u,A=2),_h(t,0,e-A)+u}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${o}`)}});var Dq=_(kB=>{"use strict";var VCe=kB&&kB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kB,"__esModule",{value:!0});var tEt=VCe(OCe()),rEt=VCe(YCe()),vq={};kB.default=(t,e,r)=>{let o=t+String(e)+String(r);if(vq[o])return vq[o];let a=t;if(r==="wrap"&&(a=tEt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=rEt.default(t,e,{position:n})}return vq[o]=a,a}});var Pq=_(Sq=>{"use strict";Object.defineProperty(Sq,"__esModule",{value:!0});var KCe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let o="";r.nodeName==="#text"?o=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(o=KCe(r)),o.length>0&&typeof r.internal_transform=="function"&&(o=r.internal_transform(o))),e+=o}return e};Sq.default=KCe});var xq=_(Ei=>{"use strict";var QB=Ei&&Ei.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Ei,"__esModule",{value:!0});Ei.setTextNodeValue=Ei.createTextNode=Ei.setStyle=Ei.setAttribute=Ei.removeChildNode=Ei.insertBeforeNode=Ei.appendChildNode=Ei.createNode=Ei.TEXT_NAME=void 0;var nEt=QB(id()),JCe=QB(RCe()),iEt=QB(TCe()),sEt=QB(Dq()),oEt=QB(Pq());Ei.TEXT_NAME="#text";Ei.createNode=t=>{var e;let r={nodeName:t,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:t==="ink-virtual-text"?void 0:nEt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(aEt.bind(null,r))),r};Ei.appendChildNode=(t,e)=>{var r;e.parentNode&&Ei.removeChildNode(e.parentNode,e),e.parentNode=t,t.childNodes.push(e),e.yogaNode&&((r=t.yogaNode)===null||r===void 0||r.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&SQ(t)};Ei.insertBeforeNode=(t,e,r)=>{var o,a;e.parentNode&&Ei.removeChildNode(e.parentNode,e),e.parentNode=t;let n=t.childNodes.indexOf(r);if(n>=0){t.childNodes.splice(n,0,e),e.yogaNode&&((o=t.yogaNode)===null||o===void 0||o.insertChild(e.yogaNode,n));return}t.childNodes.push(e),e.yogaNode&&((a=t.yogaNode)===null||a===void 0||a.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&SQ(t)};Ei.removeChildNode=(t,e)=>{var r,o;e.yogaNode&&((o=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||o===void 0||o.removeChild(e.yogaNode)),e.parentNode=null;let a=t.childNodes.indexOf(e);a>=0&&t.childNodes.splice(a,1),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&SQ(t)};Ei.setAttribute=(t,e,r)=>{t.attributes[e]=r};Ei.setStyle=(t,e)=>{t.style=e,t.yogaNode&&iEt.default(t.yogaNode,e)};Ei.createTextNode=t=>{let e={nodeName:"#text",nodeValue:t,yogaNode:void 0,parentNode:null,style:{}};return Ei.setTextNodeValue(e,t),e};var aEt=function(t,e){var r,o;let a=t.nodeName==="#text"?t.nodeValue:oEt.default(t),n=JCe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let u=(o=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&o!==void 0?o:"wrap",A=sEt.default(a,e,u);return JCe.default(A)},zCe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:zCe(t.parentNode)},SQ=t=>{let e=zCe(t);e?.markDirty()};Ei.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,SQ(t)}});var tIe=_(FB=>{"use strict";var eIe=FB&&FB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(FB,"__esModule",{value:!0});var XCe=uq(),lEt=eIe(ECe()),ZCe=eIe(id()),ko=xq(),$Ce=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};FB.default=lEt.default({schedulePassiveEffects:XCe.unstable_scheduleCallback,cancelPassiveEffects:XCe.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>null,preparePortalMount:()=>null,clearContainer:()=>!1,shouldDeprioritizeSubtree:()=>!1,resetAfterCommit:t=>{if(t.isStaticDirty){t.isStaticDirty=!1,typeof t.onImmediateRender=="function"&&t.onImmediateRender();return}typeof t.onRender=="function"&&t.onRender()},getChildHostContext:(t,e)=>{let r=t.isInsideText,o=e==="ink-text"||e==="ink-virtual-text";return r===o?t:{isInsideText:o}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,o)=>{if(o.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&o.isInsideText?"ink-virtual-text":t,n=ko.createNode(a);for(let[u,A]of Object.entries(e))u!=="children"&&(u==="style"?ko.setStyle(n,A):u==="internal_transform"?n.internal_transform=A:u==="internal_static"?n.internal_static=!0:ko.setAttribute(n,u,A));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return ko.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{ko.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{ko.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(ZCe.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(ZCe.default.DISPLAY_FLEX)},appendInitialChild:ko.appendChildNode,appendChild:ko.appendChildNode,insertBefore:ko.insertBeforeNode,finalizeInitialChildren:(t,e,r,o)=>(t.internal_static&&(o.isStaticDirty=!0,o.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:ko.appendChildNode,insertInContainerBefore:ko.insertBeforeNode,removeChildFromContainer:(t,e)=>{ko.removeChildNode(t,e),$Ce(e.yogaNode)},prepareUpdate:(t,e,r,o,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},u=Object.keys(o);for(let A of u)if(o[A]!==r[A]){if(A==="style"&&typeof o.style=="object"&&typeof r.style=="object"){let h=o.style,E=r.style,w=Object.keys(h);for(let D of w){if(D==="borderStyle"||D==="borderColor"){if(typeof n.style!="object"){let b={};n.style=b}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[D]!==E[D]){if(typeof n.style!="object"){let b={};n.style=b}n.style[D]=h[D]}}continue}n[A]=o[A]}return n},commitUpdate:(t,e)=>{for(let[r,o]of Object.entries(e))r!=="children"&&(r==="style"?ko.setStyle(t,o):r==="internal_transform"?t.internal_transform=o:r==="internal_static"?t.internal_static=!0:ko.setAttribute(t,r,o))},commitTextUpdate:(t,e,r)=>{ko.setTextNodeValue(t,r)},removeChild:(t,e)=>{ko.removeChildNode(t,e),$Ce(e.yogaNode)}})});var nIe=_((yVt,rIe)=>{"use strict";rIe.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let o=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(o,r.indent.repeat(e))}});var iIe=_(RB=>{"use strict";var cEt=RB&&RB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(RB,"__esModule",{value:!0});var PQ=cEt(id());RB.default=t=>t.getComputedWidth()-t.getComputedPadding(PQ.default.EDGE_LEFT)-t.getComputedPadding(PQ.default.EDGE_RIGHT)-t.getComputedBorder(PQ.default.EDGE_LEFT)-t.getComputedBorder(PQ.default.EDGE_RIGHT)});var sIe=_((CVt,uEt)=>{uEt.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var aIe=_((IVt,bq)=>{"use strict";var oIe=sIe();bq.exports=oIe;bq.exports.default=oIe});var cIe=_((wVt,lIe)=>{"use strict";var AEt=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},fEt=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`:` +`)+r,a=o+1,o=t.indexOf(` +`,a)}while(o!==-1);return n+=t.substr(a),n};lIe.exports={stringReplaceAll:AEt,stringEncaseCRLFWithFirstIndex:fEt}});var hIe=_((BVt,pIe)=>{"use strict";var pEt=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,uIe=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,hEt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,gEt=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,dEt=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function fIe(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)):dEt.get(t)||t}function mEt(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(hEt))r.push(a[2].replace(gEt,(A,p,h)=>p?fIe(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function yEt(t){uIe.lastIndex=0;let e=[],r;for(;(r=uIe.exec(t))!==null;){let o=r[1];if(r[2]){let a=mEt(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function AIe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}pIe.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(pEt,(n,u,A,p,h,E)=>{if(u)a.push(fIe(u));else if(p){let w=a.join("");a=[],o.push(r.length===0?w:AIe(t,r)(w)),r.push({inverse:A,styles:yEt(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(AIe(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var FQ=_((vVt,CIe)=>{"use strict";var TB=qw(),{stdout:Qq,stderr:Fq}=$L(),{stringReplaceAll:EEt,stringEncaseCRLFWithFirstIndex:CEt}=cIe(),{isArray:xQ}=Array,dIe=["ansi","ansi","ansi256","ansi16m"],DC=Object.create(null),IEt=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=Qq?Qq.level:0;t.level=e.level===void 0?r:e.level},Rq=class{constructor(e){return mIe(e)}},mIe=t=>{let e={};return IEt(e,t),e.template=(...r)=>EIe(e.template,...r),Object.setPrototypeOf(e,bQ.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=Rq,e.template};function bQ(t){return mIe(t)}for(let[t,e]of Object.entries(TB))DC[t]={get(){let r=kQ(this,Tq(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};DC.visible={get(){let t=kQ(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var yIe=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of yIe)DC[t]={get(){let{level:e}=this;return function(...r){let o=Tq(TB.color[dIe[e]][t](...r),TB.color.close,this._styler);return kQ(this,o,this._isEmpty)}}};for(let t of yIe){let e="bg"+t[0].toUpperCase()+t.slice(1);DC[e]={get(){let{level:r}=this;return function(...o){let a=Tq(TB.bgColor[dIe[r]][t](...o),TB.bgColor.close,this._styler);return kQ(this,a,this._isEmpty)}}}}var wEt=Object.defineProperties(()=>{},{...DC,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),Tq=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},kQ=(t,e,r)=>{let o=(...a)=>xQ(a[0])&&xQ(a[0].raw)?gIe(o,EIe(o,...a)):gIe(o,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(o,wEt),o._generator=t,o._styler=e,o._isEmpty=r,o},gIe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=EEt(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=CEt(e,a,o,n)),o+e+a},kq,EIe=(t,...e)=>{let[r]=e;if(!xQ(r)||!xQ(r.raw))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";var BEt=NB&&NB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(NB,"__esModule",{value:!0});var LB=BEt(FQ()),vEt=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,DEt=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,RQ=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);NB.default=(t,e,r)=>{if(!e)return t;if(e in LB.default){let a=RQ(e,r);return LB.default[a](t)}if(e.startsWith("#")){let a=RQ("hex",r);return LB.default[a](e)(t)}if(e.startsWith("ansi")){let a=DEt.exec(e);if(!a)return t;let n=RQ(a[1],r),u=Number(a[2]);return LB.default[n](u)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=vEt.exec(e);if(!a)return t;let n=RQ(a[1],r),u=Number(a[2]),A=Number(a[3]),p=Number(a[4]);return LB.default[n](u,A,p)(t)}return t}});var wIe=_(OB=>{"use strict";var IIe=OB&&OB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(OB,"__esModule",{value:!0});var SEt=IIe(aIe()),Nq=IIe(Lq());OB.default=(t,e,r,o)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),u=r.style.borderColor,A=SEt.default[r.style.borderStyle],p=Nq.default(A.topLeft+A.horizontal.repeat(a-2)+A.topRight,u,"foreground"),h=(Nq.default(A.vertical,u,"foreground")+` +`).repeat(n-2),E=Nq.default(A.bottomLeft+A.horizontal.repeat(a-2)+A.bottomRight,u,"foreground");o.write(t,e,p,{transformers:[]}),o.write(t,e+1,h,{transformers:[]}),o.write(t+a-1,e+1,h,{transformers:[]}),o.write(t,e+n-1,E,{transformers:[]})}}});var vIe=_(MB=>{"use strict";var sd=MB&&MB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(MB,"__esModule",{value:!0});var PEt=sd(id()),xEt=sd(Eq()),bEt=sd(nIe()),kEt=sd(Dq()),QEt=sd(iIe()),FEt=sd(Pq()),REt=sd(wIe()),TEt=(t,e)=>{var r;let o=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(o){let a=o.getComputedLeft(),n=o.getComputedTop();e=` +`.repeat(n)+bEt.default(e,a)}return e},BIe=(t,e,r)=>{var o;let{offsetX:a=0,offsetY:n=0,transformers:u=[],skipStaticElements:A}=r;if(A&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===PEt.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),E=n+p.getComputedTop(),w=u;if(typeof t.internal_transform=="function"&&(w=[t.internal_transform,...u]),t.nodeName==="ink-text"){let D=FEt.default(t);if(D.length>0){let b=xEt.default(D),C=QEt.default(p);if(b>C){let T=(o=t.style.textWrap)!==null&&o!==void 0?o:"wrap";D=kEt.default(D,C,T)}D=TEt(t,D),e.write(h,E,D,{transformers:w})}return}if(t.nodeName==="ink-box"&&REt.default(h,E,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let D of t.childNodes)BIe(D,e,{offsetX:h,offsetY:E,transformers:w,skipStaticElements:A})}};MB.default=BIe});var PIe=_(UB=>{"use strict";var SIe=UB&&UB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(UB,"__esModule",{value:!0});var DIe=SIe(Bq()),LEt=SIe(SB()),Oq=class{constructor(e){this.writes=[];let{width:r,height:o}=e;this.width=r,this.height=o}write(e,r,o,a){let{transformers:n}=a;o&&this.writes.push({x:e,y:r,text:o,transformers:n})}get(){let e=[];for(let o=0;oo.trimRight()).join(` +`),height:e.length}}};UB.default=Oq});var kIe=_(_B=>{"use strict";var Mq=_B&&_B.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(_B,"__esModule",{value:!0});var NEt=Mq(id()),xIe=Mq(vIe()),bIe=Mq(PIe());_B.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,NEt.default.DIRECTION_LTR);let o=new bIe.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});xIe.default(t,o,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new bIe.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),xIe.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:u}=o.get();return{output:n,outputHeight:u,staticOutput:a?`${a.get().output} +`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var TIe=_((kVt,RIe)=>{"use strict";var QIe=ve("stream"),FIe=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],Uq={},OEt=t=>{let e=new QIe.PassThrough,r=new QIe.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let o=new console.Console(e,r);for(let a of FIe)Uq[a]=console[a],console[a]=o[a];return()=>{for(let a of FIe)console[a]=Uq[a];Uq={}}};RIe.exports=OEt});var Hq=_(_q=>{"use strict";Object.defineProperty(_q,"__esModule",{value:!0});_q.default=new WeakMap});var jq=_(qq=>{"use strict";Object.defineProperty(qq,"__esModule",{value:!0});var MEt=ln(),LIe=MEt.createContext({exit:()=>{}});LIe.displayName="InternalAppContext";qq.default=LIe});var Wq=_(Gq=>{"use strict";Object.defineProperty(Gq,"__esModule",{value:!0});var UEt=ln(),NIe=UEt.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});NIe.displayName="InternalStdinContext";Gq.default=NIe});var Vq=_(Yq=>{"use strict";Object.defineProperty(Yq,"__esModule",{value:!0});var _Et=ln(),OIe=_Et.createContext({stdout:void 0,write:()=>{}});OIe.displayName="InternalStdoutContext";Yq.default=OIe});var Jq=_(Kq=>{"use strict";Object.defineProperty(Kq,"__esModule",{value:!0});var HEt=ln(),MIe=HEt.createContext({stderr:void 0,write:()=>{}});MIe.displayName="InternalStderrContext";Kq.default=MIe});var TQ=_(zq=>{"use strict";Object.defineProperty(zq,"__esModule",{value:!0});var qEt=ln(),UIe=qEt.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{},focus:()=>{}});UIe.displayName="InternalFocusContext";zq.default=UIe});var HIe=_((OVt,_Ie)=>{"use strict";var jEt=/[|\\{}()[\]^$+*?.-]/g;_Ie.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(jEt,"\\$&")}});var WIe=_((MVt,GIe)=>{"use strict";var GEt=HIe(),WEt=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",jIe=[].concat(ve("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));jIe.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var Xq=class t{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=t.nodeInternals()),"cwd"in e||(e.cwd=WEt),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,YEt(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...jIe]}clean(e,r=0){r=" ".repeat(r),Array.isArray(e)||(e=e.split(` +`)),!/^\s*at /.test(e[0])&&/^\s*at /.test(e[1])&&(e=e.slice(1));let o=!1,a=null,n=[];return e.forEach(u=>{if(u=u.replace(/\\/g,"/"),this._internals.some(p=>p.test(u)))return;let A=/^\s*at /.test(u);o?u=u.trimEnd().replace(/^(\s+)at /,"$1"):(u=u.trim(),A&&(u=u.slice(3))),u=u.replace(`${this._cwd}/`,""),u&&(A?(a&&(n.push(a),a=null),n.push(u)):(o=!0,a=u))}),n.map(u=>`${r}${u} +`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:o}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=o,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:o,stackTraceLimit:a}=Error;Error.prepareStackTrace=(A,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:u}=n;return Object.assign(Error,{prepareStackTrace:o,stackTraceLimit:a}),u}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let o={line:r.getLineNumber(),column:r.getColumnNumber()};qIe(o,r.getFileName(),this._cwd),r.isConstructor()&&(o.constructor=!0),r.isEval()&&(o.evalOrigin=r.getEvalOrigin()),r.isNative()&&(o.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(o.type=a);let n=r.getFunctionName();n&&(o.function=n);let u=r.getMethodName();return u&&n!==u&&(o.method=u),o}parseLine(e){let r=e&&e.match(VEt);if(!r)return null;let o=r[1]==="new",a=r[2],n=r[3],u=r[4],A=Number(r[5]),p=Number(r[6]),h=r[7],E=r[8],w=r[9],D=r[10]==="native",b=r[11]===")",C,T={};if(E&&(T.line=Number(E)),w&&(T.column=Number(w)),b&&h){let N=0;for(let U=h.length-1;U>0;U--)if(h.charAt(U)===")")N++;else if(h.charAt(U)==="("&&h.charAt(U-1)===" "&&(N--,N===-1&&h.charAt(U-1)===" ")){let J=h.slice(0,U-1);h=h.slice(U+1),a+=` (${J}`;break}}if(a){let N=a.match(KEt);N&&(a=N[1],C=N[2])}return qIe(T,h,this._cwd),o&&(T.constructor=!0),n&&(T.evalOrigin=n,T.evalLine=A,T.evalColumn=p,T.evalFile=u&&u.replace(/\\/g,"/")),D&&(T.native=!0),a&&(T.function=a),C&&a!==C&&(T.method=C),T}};function qIe(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function YEt(t){if(t.length===0)return[];let e=t.map(r=>GEt(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var VEt=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),KEt=/^(.*?) \[as (.*?)\]$/;GIe.exports=Xq});var VIe=_((UVt,YIe)=>{"use strict";YIe.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var JIe=_((_Vt,KIe)=>{"use strict";var JEt=VIe(),zEt=(t,e)=>{let r=[],o=t-e,a=t+e;for(let n=o;n<=a;n++)r.push(n);return r};KIe.exports=(t,e,r)=>{if(typeof t!="string")throw new TypeError("Source code is missing.");if(!e||e<1)throw new TypeError("Line number must start from `1`.");if(t=JEt(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},zEt(e,r.around).filter(o=>t[o-1]!==void 0).map(o=>({line:o,value:t[o-1]}))}});var LQ=_(lu=>{"use strict";var XEt=lu&&lu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),ZEt=lu&&lu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),$Et=lu&&lu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&XEt(e,t,r);return ZEt(e,t),e},eCt=lu&&lu.__rest||function(t,e){var r={};for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.indexOf(o)<0&&(r[o]=t[o]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(t);a{var{children:r}=t,o=eCt(t,["children"]);let a=Object.assign(Object.assign({},o),{marginLeft:o.marginLeft||o.marginX||o.margin||0,marginRight:o.marginRight||o.marginX||o.margin||0,marginTop:o.marginTop||o.marginY||o.margin||0,marginBottom:o.marginBottom||o.marginY||o.margin||0,paddingLeft:o.paddingLeft||o.paddingX||o.padding||0,paddingRight:o.paddingRight||o.paddingX||o.padding||0,paddingTop:o.paddingTop||o.paddingY||o.padding||0,paddingBottom:o.paddingBottom||o.paddingY||o.padding||0});return zIe.default.createElement("ink-box",{ref:e,style:a},r)});Zq.displayName="Box";Zq.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};lu.default=Zq});var tj=_(HB=>{"use strict";var $q=HB&&HB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(HB,"__esModule",{value:!0});var tCt=$q(ln()),SC=$q(FQ()),XIe=$q(Lq()),ej=({color:t,backgroundColor:e,dimColor:r,bold:o,italic:a,underline:n,strikethrough:u,inverse:A,wrap:p,children:h})=>{if(h==null)return null;let E=w=>(r&&(w=SC.default.dim(w)),t&&(w=XIe.default(w,t,"foreground")),e&&(w=XIe.default(w,e,"background")),o&&(w=SC.default.bold(w)),a&&(w=SC.default.italic(w)),n&&(w=SC.default.underline(w)),u&&(w=SC.default.strikethrough(w)),A&&(w=SC.default.inverse(w)),w);return tCt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:E},h)};ej.displayName="Text";ej.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};HB.default=ej});var twe=_(cu=>{"use strict";var rCt=cu&&cu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),nCt=cu&&cu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),iCt=cu&&cu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&rCt(e,t,r);return nCt(e,t),e},qB=cu&&cu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(cu,"__esModule",{value:!0});var ZIe=iCt(ve("fs")),ps=qB(ln()),$Ie=qB(WIe()),sCt=qB(JIe()),Jf=qB(LQ()),mA=qB(tj()),ewe=new $Ie.default({cwd:process.cwd(),internals:$Ie.default.nodeInternals()}),oCt=({error:t})=>{let e=t.stack?t.stack.split(` +`).slice(1):void 0,r=e?ewe.parseLine(e[0]):void 0,o,a=0;if(r?.file&&r?.line&&ZIe.existsSync(r.file)){let n=ZIe.readFileSync(r.file,"utf8");if(o=sCt.default(n,r.line),o)for(let{line:u}of o)a=Math.max(a,String(u).length)}return ps.default.createElement(Jf.default,{flexDirection:"column",padding:1},ps.default.createElement(Jf.default,null,ps.default.createElement(mA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),ps.default.createElement(mA.default,null," ",t.message)),r&&ps.default.createElement(Jf.default,{marginTop:1},ps.default.createElement(mA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&o&&ps.default.createElement(Jf.default,{marginTop:1,flexDirection:"column"},o.map(({line:n,value:u})=>ps.default.createElement(Jf.default,{key:n},ps.default.createElement(Jf.default,{width:a+1},ps.default.createElement(mA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),ps.default.createElement(mA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+u)))),t.stack&&ps.default.createElement(Jf.default,{marginTop:1,flexDirection:"column"},t.stack.split(` +`).slice(1).map(n=>{let u=ewe.parseLine(n);return u?ps.default.createElement(Jf.default,{key:n},ps.default.createElement(mA.default,{dimColor:!0},"- "),ps.default.createElement(mA.default,{dimColor:!0,bold:!0},u.function),ps.default.createElement(mA.default,{dimColor:!0,color:"gray"}," ","(",u.file,":",u.line,":",u.column,")")):ps.default.createElement(Jf.default,{key:n},ps.default.createElement(mA.default,{dimColor:!0},"- "),ps.default.createElement(mA.default,{dimColor:!0,bold:!0},n))})))};cu.default=oCt});var nwe=_(uu=>{"use strict";var aCt=uu&&uu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),lCt=uu&&uu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),cCt=uu&&uu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&aCt(e,t,r);return lCt(e,t),e},ad=uu&&uu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(uu,"__esModule",{value:!0});var od=cCt(ln()),rwe=ad(Z6()),uCt=ad(jq()),ACt=ad(Wq()),fCt=ad(Vq()),pCt=ad(Jq()),hCt=ad(TQ()),gCt=ad(twe()),dCt=" ",mCt="\x1B[Z",yCt="\x1B",NQ=class extends od.PureComponent{constructor(){super(...arguments),this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=e=>{let{stdin:r}=this.props;if(!this.isRawModeSupported())throw r===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(r.setEncoding("utf8"),e){this.rawModeEnabledCount===0&&(r.addListener("data",this.handleInput),r.resume(),r.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount===0&&(r.setRawMode(!1),r.removeListener("data",this.handleInput),r.pause())},this.handleInput=e=>{e===""&&this.props.exitOnCtrlC&&this.handleExit(),e===yCt&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===dCt&&this.focusNext(),e===mCt&&this.focusPrevious())},this.handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focus=e=>{this.setState(r=>r.focusables.some(a=>a?.id===e)?{activeFocusId:e}:r)},this.focusNext=()=>{this.setState(e=>{var r;let o=(r=e.focusables[0])===null||r===void 0?void 0:r.id;return{activeFocusId:this.findNextFocusable(e)||o}})},this.focusPrevious=()=>{this.setState(e=>{var r;let o=(r=e.focusables[e.focusables.length-1])===null||r===void 0?void 0:r.id;return{activeFocusId:this.findPreviousFocusable(e)||o}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(o=>{let a=o.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...o.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(o=>o.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{var r;let o=e.focusables.findIndex(a=>a.id===e.activeFocusId);for(let a=o+1;a{var r;let o=e.focusables.findIndex(a=>a.id===e.activeFocusId);for(let a=o-1;a>=0;a--)if(!((r=e.focusables[a])===null||r===void 0)&&r.isActive)return e.focusables[a].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return od.default.createElement(uCt.default.Provider,{value:{exit:this.handleExit}},od.default.createElement(ACt.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},od.default.createElement(fCt.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},od.default.createElement(pCt.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},od.default.createElement(hCt.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious,focus:this.focus}},this.state.error?od.default.createElement(gCt.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){rwe.default.hide(this.props.stdout)}componentWillUnmount(){rwe.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};uu.default=NQ;NQ.displayName="InternalApp"});var owe=_(Au=>{"use strict";var ECt=Au&&Au.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),CCt=Au&&Au.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),ICt=Au&&Au.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&ECt(e,t,r);return CCt(e,t),e},fu=Au&&Au.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Au,"__esModule",{value:!0});var wCt=fu(ln()),iwe=WM(),BCt=fu(tCe()),vCt=fu(V6()),DCt=fu(aCe()),SCt=fu(cCe()),rj=fu(tIe()),PCt=fu(kIe()),xCt=fu(X6()),bCt=fu(TIe()),kCt=ICt(xq()),QCt=fu(Hq()),FCt=fu(nwe()),PC=process.env.CI==="false"?!1:DCt.default,swe=()=>{},nj=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:o,staticOutput:a}=PCt.default(this.rootNode,this.options.stdout.columns||80),n=a&&a!==` +`;if(this.options.debug){n&&(this.fullStaticOutput+=a),this.options.stdout.write(this.fullStaticOutput+r);return}if(PC){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),o>=this.options.stdout.rows){this.options.stdout.write(vCt.default.clearTerminal+this.fullStaticOutput+r),this.lastOutput=r;return}n&&(this.log.clear(),this.options.stdout.write(a),this.log(r)),!n&&r!==this.lastOutput&&this.throttledLog(r),this.lastOutput=r},SCt.default(this),this.options=e,this.rootNode=kCt.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:iwe(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=BCt.default.create(e.stdout),this.throttledLog=e.debug?this.log:iwe(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=rj.default.createContainer(this.rootNode,0,!1,null),this.unsubscribeExit=xCt.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),PC||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=wCt.default.createElement(FCt.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},e);rj.default.updateContainer(r,this.container,null,swe)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(PC){this.options.stdout.write(e);return}this.log.clear(),this.options.stdout.write(e),this.log(this.lastOutput)}}writeToStderr(e){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(e),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(PC){this.options.stderr.write(e);return}this.log.clear(),this.options.stderr.write(e),this.log(this.lastOutput)}}unmount(e){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),PC?this.options.stdout.write(this.lastOutput+` +`):this.options.debug||this.log.done(),this.isUnmounted=!0,rj.default.updateContainer(null,this.container,null,swe),QCt.default.delete(this.options.stdout),e instanceof Error?this.rejectExitPromise(e):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((e,r)=>{this.resolveExitPromise=e,this.rejectExitPromise=r})),this.exitPromise}clear(){!PC&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=bCt.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};Au.default=nj});var lwe=_(jB=>{"use strict";var awe=jB&&jB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(jB,"__esModule",{value:!0});var RCt=awe(owe()),OQ=awe(Hq()),TCt=ve("stream"),LCt=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},NCt(e)),o=OCt(r.stdout,()=>new RCt.default(r));return o.render(t),{rerender:o.render,unmount:()=>o.unmount(),waitUntilExit:o.waitUntilExit,cleanup:()=>OQ.default.delete(r.stdout),clear:o.clear}};jB.default=LCt;var NCt=(t={})=>t instanceof TCt.Stream?{stdout:t,stdin:process.stdin}:t,OCt=(t,e)=>{let r;return OQ.default.has(t)?r=OQ.default.get(t):(r=e(),OQ.default.set(t,r)),r}});var uwe=_(zf=>{"use strict";var MCt=zf&&zf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),UCt=zf&&zf.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),_Ct=zf&&zf.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&MCt(e,t,r);return UCt(e,t),e};Object.defineProperty(zf,"__esModule",{value:!0});var GB=_Ct(ln()),cwe=t=>{let{items:e,children:r,style:o}=t,[a,n]=GB.useState(0),u=GB.useMemo(()=>e.slice(a),[e,a]);GB.useLayoutEffect(()=>{n(e.length)},[e.length]);let A=u.map((h,E)=>r(h,a+E)),p=GB.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},o),[o]);return GB.default.createElement("ink-box",{internal_static:!0,style:p},A)};cwe.displayName="Static";zf.default=cwe});var fwe=_(WB=>{"use strict";var HCt=WB&&WB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(WB,"__esModule",{value:!0});var qCt=HCt(ln()),Awe=({children:t,transform:e})=>t==null?null:qCt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);Awe.displayName="Transform";WB.default=Awe});var hwe=_(YB=>{"use strict";var jCt=YB&&YB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(YB,"__esModule",{value:!0});var GCt=jCt(ln()),pwe=({count:t=1})=>GCt.default.createElement("ink-text",null,` +`.repeat(t));pwe.displayName="Newline";YB.default=pwe});var mwe=_(VB=>{"use strict";var gwe=VB&&VB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(VB,"__esModule",{value:!0});var WCt=gwe(ln()),YCt=gwe(LQ()),dwe=()=>WCt.default.createElement(YCt.default,{flexGrow:1});dwe.displayName="Spacer";VB.default=dwe});var MQ=_(KB=>{"use strict";var VCt=KB&&KB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(KB,"__esModule",{value:!0});var KCt=ln(),JCt=VCt(Wq()),zCt=()=>KCt.useContext(JCt.default);KB.default=zCt});var Ewe=_(JB=>{"use strict";var XCt=JB&&JB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(JB,"__esModule",{value:!0});var ywe=ln(),ZCt=XCt(MQ()),$Ct=(t,e={})=>{let{stdin:r,setRawMode:o,internal_exitOnCtrlC:a}=ZCt.default();ywe.useEffect(()=>{if(e.isActive!==!1)return o(!0),()=>{o(!1)}},[e.isActive,o]),ywe.useEffect(()=>{if(e.isActive===!1)return;let n=u=>{let A=String(u),p={upArrow:A==="\x1B[A",downArrow:A==="\x1B[B",leftArrow:A==="\x1B[D",rightArrow:A==="\x1B[C",pageDown:A==="\x1B[6~",pageUp:A==="\x1B[5~",return:A==="\r",escape:A==="\x1B",ctrl:!1,shift:!1,tab:A===" "||A==="\x1B[Z",backspace:A==="\b",delete:A==="\x7F"||A==="\x1B[3~",meta:!1};A<=""&&!p.return&&(A=String.fromCharCode(A.charCodeAt(0)+97-1),p.ctrl=!0),A.startsWith("\x1B")&&(A=A.slice(1),p.meta=!0);let h=A>="A"&&A<="Z",E=A>="\u0410"&&A<="\u042F";A.length===1&&(h||E)&&(p.shift=!0),p.tab&&A==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(A=""),(!(A==="c"&&p.ctrl)||!a)&&t(A,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};JB.default=$Ct});var Cwe=_(zB=>{"use strict";var eIt=zB&&zB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(zB,"__esModule",{value:!0});var tIt=ln(),rIt=eIt(jq()),nIt=()=>tIt.useContext(rIt.default);zB.default=nIt});var Iwe=_(XB=>{"use strict";var iIt=XB&&XB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(XB,"__esModule",{value:!0});var sIt=ln(),oIt=iIt(Vq()),aIt=()=>sIt.useContext(oIt.default);XB.default=aIt});var wwe=_(ZB=>{"use strict";var lIt=ZB&&ZB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ZB,"__esModule",{value:!0});var cIt=ln(),uIt=lIt(Jq()),AIt=()=>cIt.useContext(uIt.default);ZB.default=AIt});var vwe=_(ev=>{"use strict";var Bwe=ev&&ev.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ev,"__esModule",{value:!0});var $B=ln(),fIt=Bwe(TQ()),pIt=Bwe(MQ()),hIt=({isActive:t=!0,autoFocus:e=!1,id:r}={})=>{let{isRawModeSupported:o,setRawMode:a}=pIt.default(),{activeId:n,add:u,remove:A,activate:p,deactivate:h,focus:E}=$B.useContext(fIt.default),w=$B.useMemo(()=>r??Math.random().toString().slice(2,7),[r]);return $B.useEffect(()=>(u(w,{autoFocus:e}),()=>{A(w)}),[w,e]),$B.useEffect(()=>{t?p(w):h(w)},[t,w]),$B.useEffect(()=>{if(!(!o||!t))return a(!0),()=>{a(!1)}},[t]),{isFocused:!!w&&n===w,focus:E}};ev.default=hIt});var Dwe=_(tv=>{"use strict";var gIt=tv&&tv.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(tv,"__esModule",{value:!0});var dIt=ln(),mIt=gIt(TQ()),yIt=()=>{let t=dIt.useContext(mIt.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious,focus:t.focus}};tv.default=yIt});var Swe=_(ij=>{"use strict";Object.defineProperty(ij,"__esModule",{value:!0});ij.default=t=>{var e,r,o,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(o=t.yogaNode)===null||o===void 0?void 0:o.getComputedHeight())!==null&&a!==void 0?a:0}}});var ac=_(Js=>{"use strict";Object.defineProperty(Js,"__esModule",{value:!0});var EIt=lwe();Object.defineProperty(Js,"render",{enumerable:!0,get:function(){return EIt.default}});var CIt=LQ();Object.defineProperty(Js,"Box",{enumerable:!0,get:function(){return CIt.default}});var IIt=tj();Object.defineProperty(Js,"Text",{enumerable:!0,get:function(){return IIt.default}});var wIt=uwe();Object.defineProperty(Js,"Static",{enumerable:!0,get:function(){return wIt.default}});var BIt=fwe();Object.defineProperty(Js,"Transform",{enumerable:!0,get:function(){return BIt.default}});var vIt=hwe();Object.defineProperty(Js,"Newline",{enumerable:!0,get:function(){return vIt.default}});var DIt=mwe();Object.defineProperty(Js,"Spacer",{enumerable:!0,get:function(){return DIt.default}});var SIt=Ewe();Object.defineProperty(Js,"useInput",{enumerable:!0,get:function(){return SIt.default}});var PIt=Cwe();Object.defineProperty(Js,"useApp",{enumerable:!0,get:function(){return PIt.default}});var xIt=MQ();Object.defineProperty(Js,"useStdin",{enumerable:!0,get:function(){return xIt.default}});var bIt=Iwe();Object.defineProperty(Js,"useStdout",{enumerable:!0,get:function(){return bIt.default}});var kIt=wwe();Object.defineProperty(Js,"useStderr",{enumerable:!0,get:function(){return kIt.default}});var QIt=vwe();Object.defineProperty(Js,"useFocus",{enumerable:!0,get:function(){return QIt.default}});var FIt=Dwe();Object.defineProperty(Js,"useFocusManager",{enumerable:!0,get:function(){return FIt.default}});var RIt=Swe();Object.defineProperty(Js,"measureElement",{enumerable:!0,get:function(){return RIt.default}})});var oj={};Vt(oj,{Gem:()=>sj});var Pwe,ld,sj,UQ=It(()=>{Pwe=et(ac()),ld=et(ln()),sj=(0,ld.memo)(({active:t})=>{let e=(0,ld.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,ld.useMemo)(()=>t?"green":"yellow",[t]);return ld.default.createElement(Pwe.Text,{color:r},e)})});var bwe={};Vt(bwe,{useKeypress:()=>cd});function cd({active:t},e,r){let{stdin:o}=(0,xwe.useStdin)(),a=(0,_Q.useCallback)((n,u)=>e(n,u),r);(0,_Q.useEffect)(()=>{if(!(!t||!o))return o.on("keypress",a),()=>{o.off("keypress",a)}},[t,a,o])}var xwe,_Q,rv=It(()=>{xwe=et(ac()),_Q=et(ln())});var Qwe={};Vt(Qwe,{FocusRequest:()=>kwe,useFocusRequest:()=>aj});var kwe,aj,lj=It(()=>{rv();kwe=(r=>(r.BEFORE="before",r.AFTER="after",r))(kwe||{}),aj=function({active:t},e,r){cd({active:t},(o,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var Fwe={};Vt(Fwe,{useListInput:()=>nv});var nv,HQ=It(()=>{rv();nv=function(t,e,{active:r,minus:o,plus:a,set:n,loop:u=!0}){cd({active:r},(A,p)=>{let h=e.indexOf(t);switch(p.name){case o:{let E=h-1;if(u){n(e[(e.length+E)%e.length]);return}if(E<0)return;n(e[E])}break;case a:{let E=h+1;if(u){n(e[E%e.length]);return}if(E>=e.length)return;n(e[E])}break}},[e,t,a,n,u])}});var qQ={};Vt(qQ,{ScrollableItems:()=>TIt});var Hh,Ua,TIt,jQ=It(()=>{Hh=et(ac()),Ua=et(ln());lj();HQ();TIt=({active:t=!0,children:e=[],radius:r=10,size:o=1,loop:a=!0,onFocusRequest:n,willReachEnd:u})=>{let A=N=>{if(N.key===null)throw new Error("Expected all children to have a key");return N.key},p=Ua.default.Children.map(e,N=>A(N)),h=p[0],[E,w]=(0,Ua.useState)(h),D=p.indexOf(E);(0,Ua.useEffect)(()=>{p.includes(E)||w(h)},[e]),(0,Ua.useEffect)(()=>{u&&D>=p.length-2&&u()},[D]),aj({active:t&&!!n},N=>{n?.(N)},[n]),nv(E,p,{active:t,minus:"up",plus:"down",set:w,loop:a});let b=D-r,C=D+r;C>p.length&&(b-=C-p.length,C=p.length),b<0&&(C+=-b,b=0),C>=p.length&&(C=p.length-1);let T=[];for(let N=b;N<=C;++N){let U=p[N],J=t&&U===E;T.push(Ua.default.createElement(Hh.Box,{key:U,height:o},Ua.default.createElement(Hh.Box,{marginLeft:1,marginRight:1},Ua.default.createElement(Hh.Text,null,J?Ua.default.createElement(Hh.Text,{color:"cyan",bold:!0},">"):" ")),Ua.default.createElement(Hh.Box,null,Ua.default.cloneElement(e[N],{active:J}))))}return Ua.default.createElement(Hh.Box,{flexDirection:"column",width:"100%"},T)}});var Rwe,Xf,Twe,cj,Lwe,uj=It(()=>{Rwe=et(ac()),Xf=et(ln()),Twe=ve("readline"),cj=Xf.default.createContext(null),Lwe=({children:t})=>{let{stdin:e,setRawMode:r}=(0,Rwe.useStdin)();(0,Xf.useEffect)(()=>{r&&r(!0),e&&(0,Twe.emitKeypressEvents)(e)},[e,r]);let[o,a]=(0,Xf.useState)(new Map),n=(0,Xf.useMemo)(()=>({getAll:()=>o,get:u=>o.get(u),set:(u,A)=>a(new Map([...o,[u,A]]))}),[o,a]);return Xf.default.createElement(cj.Provider,{value:n,children:t})}});var Aj={};Vt(Aj,{useMinistore:()=>LIt});function LIt(t,e){let r=(0,GQ.useContext)(cj);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let o=(0,GQ.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,o]}var GQ,fj=It(()=>{GQ=et(ln());uj()});var YQ={};Vt(YQ,{renderForm:()=>NIt});async function NIt(t,e,{stdin:r,stdout:o,stderr:a}){let n,u=p=>{let{exit:h}=(0,WQ.useApp)();cd({active:!0},(E,w)=>{w.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:A}=(0,WQ.render)(pj.default.createElement(Lwe,null,pj.default.createElement(t,{...e,useSubmit:u})),{stdin:r,stdout:o,stderr:a});return await A(),n}var WQ,pj,VQ=It(()=>{WQ=et(ac()),pj=et(ln());uj();rv()});var Uwe=_(iv=>{"use strict";Object.defineProperty(iv,"__esModule",{value:!0});iv.UncontrolledTextInput=void 0;var Owe=ln(),hj=ln(),Nwe=ac(),ud=FQ(),Mwe=({value:t,placeholder:e="",focus:r=!0,mask:o,highlightPastedText:a=!1,showCursor:n=!0,onChange:u,onSubmit:A})=>{let[{cursorOffset:p,cursorWidth:h},E]=hj.useState({cursorOffset:(t||"").length,cursorWidth:0});hj.useEffect(()=>{E(T=>{if(!r||!n)return T;let N=t||"";return T.cursorOffset>N.length-1?{cursorOffset:N.length,cursorWidth:0}:T})},[t,r,n]);let w=a?h:0,D=o?o.repeat(t.length):t,b=D,C=e?ud.grey(e):void 0;if(n&&r){C=e.length>0?ud.inverse(e[0])+ud.grey(e.slice(1)):ud.inverse(" "),b=D.length>0?"":ud.inverse(" ");let T=0;for(let N of D)T>=p-w&&T<=p?b+=ud.inverse(N):b+=N,T++;D.length>0&&p===D.length&&(b+=ud.inverse(" "))}return Nwe.useInput((T,N)=>{if(N.upArrow||N.downArrow||N.ctrl&&T==="c"||N.tab||N.shift&&N.tab)return;if(N.return){A&&A(t);return}let U=p,J=t,te=0;N.leftArrow?n&&U--:N.rightArrow?n&&U++:N.backspace||N.delete?p>0&&(J=t.slice(0,p-1)+t.slice(p,t.length),U--):(J=t.slice(0,p)+T+t.slice(p,t.length),U+=T.length,T.length>1&&(te=T.length)),p<0&&(U=0),p>t.length&&(U=t.length),E({cursorOffset:U,cursorWidth:te}),J!==t&&u(J)},{isActive:r}),Owe.createElement(Nwe.Text,null,e?D.length>0?b:C:b)};iv.default=Mwe;iv.UncontrolledTextInput=({initialValue:t="",...e})=>{let[r,o]=hj.useState(t);return Owe.createElement(Mwe,Object.assign({},e,{value:r,onChange:o}))}});var qwe={};Vt(qwe,{Pad:()=>gj});var _we,Hwe,gj,dj=It(()=>{_we=et(ac()),Hwe=et(ln()),gj=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return Hwe.default.createElement(_we.Text,{dimColor:!e},r)}});var jwe={};Vt(jwe,{ItemOptions:()=>OIt});var ov,qh,OIt,Gwe=It(()=>{ov=et(ac()),qh=et(ln());HQ();UQ();dj();OIt=function({active:t,skewer:e,options:r,value:o,onChange:a,sizes:n=[]}){let u=r.filter(({label:p})=>!!p).map(({value:p})=>p),A=r.findIndex(p=>p.value===o&&p.label!="");return nv(o,u,{active:t,minus:"left",plus:"right",set:a}),qh.default.createElement(qh.default.Fragment,null,r.map(({label:p},h)=>{let E=h===A,w=n[h]-1||0,D=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),b=Math.max(0,w-D.length-2);return p?qh.default.createElement(ov.Box,{key:p,width:w,marginLeft:1},qh.default.createElement(ov.Text,{wrap:"truncate"},qh.default.createElement(sj,{active:E})," ",p),e?qh.default.createElement(gj,{active:t,length:b}):null):qh.default.createElement(ov.Box,{key:`spacer-${h}`,width:w,marginLeft:1})}))}});var s1e=_((xJt,i1e)=>{var Dj;i1e.exports=()=>(typeof Dj>"u"&&(Dj=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),Dj)});var S1e=_(($Jt,D1e)=>{var Tj=Symbol("arg flag"),lc=class t extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,t.prototype)}};function wv(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:o=!1}={}){if(!t)throw new lc("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},u={};for(let A of Object.keys(t)){if(!A)throw new lc("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(A[0]!=="-")throw new lc(`argument key must start with '-' but found: '${A}'`,"ARG_CONFIG_NONOPT_KEY");if(A.length===1)throw new lc(`argument key must have a name; singular '-' keys are not allowed: ${A}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[A]=="string"){n[A]=t[A];continue}let p=t[A],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[E]=p;p=(w,D,b=[])=>(b.push(E(w,D,b[b.length-1])),b),h=E===Boolean||E[Tj]===!0}else if(typeof p=="function")h=p===Boolean||p[Tj]===!0;else throw new lc(`type missing or not a function or valid array type: ${A}`,"ARG_CONFIG_VAD_TYPE");if(A[1]!=="-"&&A.length>2)throw new lc(`short argument keys (with a single hyphen) must have only one character: ${A}`,"ARG_CONFIG_SHORTOPT_TOOLONG");u[A]=[p,h]}for(let A=0,p=e.length;A0){a._=a._.concat(e.slice(A));break}if(h==="--"){a._=a._.concat(e.slice(A+1));break}if(h.length>1&&h[0]==="-"){let E=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(w=>`-${w}`);for(let w=0;w1&&e[A+1][0]==="-"&&!(e[A+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(N===Number||typeof BigInt<"u"&&N===BigInt))){let J=b===T?"":` (alias for ${T})`;throw new lc(`option requires argument: ${b}${J}`,"ARG_MISSING_REQUIRED_LONGARG")}a[T]=N(e[A+1],T,a[T]),++A}else a[T]=N(C,T,a[T])}}else a._.push(h)}return a}wv.flag=t=>(t[Tj]=!0,t);wv.COUNT=wv.flag((t,e,r)=>(r||0)+1);wv.ArgError=lc;D1e.exports=wv});var T1e=_((bzt,R1e)=>{var Mj;R1e.exports=()=>(typeof Mj>"u"&&(Mj=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),Mj)});var U1e=_((Gj,Wj)=>{(function(t){Gj&&typeof Gj=="object"&&typeof Wj<"u"?Wj.exports=t():typeof define=="function"&&define.amd?define([],t):typeof window<"u"?window.isWindows=t():typeof global<"u"?global.isWindows=t():typeof self<"u"?self.isWindows=t():this.isWindows=t()})(function(){"use strict";return function(){return process&&(process.platform==="win32"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var j1e=_((PXt,q1e)=>{"use strict";Yj.ifExists=Twt;var FC=ve("util"),cc=ve("path"),_1e=U1e(),Qwt=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,Fwt={createPwshFile:!0,createCmdFile:_1e(),fs:ve("fs")},Rwt=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function H1e(t){let e={...Fwt,...t},r=e.fs;return e.fs_={chmod:r.chmod?FC.promisify(r.chmod):async()=>{},mkdir:FC.promisify(r.mkdir),readFile:FC.promisify(r.readFile),stat:FC.promisify(r.stat),unlink:FC.promisify(r.unlink),writeFile:FC.promisify(r.writeFile)},e}async function Yj(t,e,r){let o=H1e(r);await o.fs_.stat(t),await Nwt(t,e,o)}function Twt(t,e,r){return Yj(t,e,r).catch(()=>{})}function Lwt(t,e){return e.fs_.unlink(t).catch(()=>{})}async function Nwt(t,e,r){let o=await Hwt(t,r);return await Owt(e,r),Mwt(t,e,o,r)}function Owt(t,e){return e.fs_.mkdir(cc.dirname(t),{recursive:!0})}function Mwt(t,e,r,o){let a=H1e(o),n=[{generator:Gwt,extension:""}];return a.createCmdFile&&n.push({generator:jwt,extension:".cmd"}),a.createPwshFile&&n.push({generator:Wwt,extension:".ps1"}),Promise.all(n.map(u=>qwt(t,e+u.extension,r,u.generator,a)))}function Uwt(t,e){return Lwt(t,e)}function _wt(t,e){return Ywt(t,e)}async function Hwt(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(Qwt);if(!a){let n=cc.extname(t).toLowerCase();return{program:Rwt.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function qwt(t,e,r,o,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",u=[r.additionalArgs,n].filter(A=>A).join(" ");return a=Object.assign({},a,{prog:r.program,args:u}),await Uwt(e,a),await a.fs_.writeFile(e,o(t,e,a),"utf8"),_wt(e,a)}function jwt(t,e,r){let a=cc.relative(cc.dirname(e),t).split("/").join("\\"),n=cc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,u,A=r.prog,p=r.args||"",h=Vj(r.nodePath).win32;A?(u=`"%~dp0\\${A}.exe"`,a=n):(A=n,p="",a="");let E=r.progArgs?`${r.progArgs.join(" ")} `:"",w=h?`@SET NODE_PATH=${h}\r +`:"";return u?w+=`@IF EXIST ${u} (\r + ${u} ${p} ${a} ${E}%*\r +) ELSE (\r + @SETLOCAL\r + @SET PATHEXT=%PATHEXT:;.JS;=;%\r + ${A} ${p} ${a} ${E}%*\r +)\r +`:w+=`@${A} ${p} ${a} ${E}%*\r +`,w}function Gwt(t,e,r){let o=cc.relative(cc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;o=o.split("\\").join("/");let u=cc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,A=r.args||"",p=Vj(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,o=u):(a=u,A="",o="");let h=r.progArgs?`${r.progArgs.join(" ")} `:"",E=`#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") + +case \`uname\` in + *CYGWIN*) basedir=\`cygpath -w "$basedir"\`;; +esac + +`,w=r.nodePath?`export NODE_PATH="${p}" +`:"";return n?E+=`${w}if [ -x ${n} ]; then + exec ${n} ${A} ${o} ${h}"$@" +else + exec ${a} ${A} ${o} ${h}"$@" +fi +`:E+=`${w}${a} ${A} ${o} ${h}"$@" +exit $? +`,E}function Wwt(t,e,r){let o=cc.relative(cc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,u;o=o.split("\\").join("/");let A=cc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,p=r.args||"",h=Vj(r.nodePath),E=h.win32,w=h.posix;n?(u=`"$basedir/${r.prog}$exe"`,o=A):(n=A,p="",o="");let D=r.progArgs?`${r.progArgs.join(" ")} `:"",b=`#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +${r.nodePath?`$env_node_path=$env:NODE_PATH +$env:NODE_PATH="${E}" +`:""}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&&(b+=` else { + $env:NODE_PATH="${w}" +}`),u?b+=` +$ret=0 +if (Test-Path ${u}) { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${u} ${p} ${o} ${D}$args + } else { + & ${u} ${p} ${o} ${D}$args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${n} ${p} ${o} ${D}$args + } else { + & ${n} ${p} ${o} ${D}$args + } + $ret=$LASTEXITCODE +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $ret +`:b+=` +# Support pipeline input +if ($MyInvocation.ExpectingInput) { + $input | & ${n} ${p} ${o} ${D}$args +} else { + & ${n} ${p} ${o} ${D}$args +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $LASTEXITCODE +`,b}function Ywt(t,e){return e.fs_.chmod(t,493)}function Vj(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(cc.delimiter):Array.from(t),r={};for(let o=0;o`/mnt/${A.toLowerCase()}`):e[o];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[o]={win32:a,posix:n}}return r}q1e.exports=Yj});var aG=_((KZt,c2e)=>{c2e.exports=ve("stream")});var p2e=_((JZt,f2e)=>{"use strict";function u2e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function E1t(t){for(var e=1;e0?this.tail.next=o:this.head=o,this.tail=o,++this.length}},{key:"unshift",value:function(r){var o={data:r,next:this.head};this.length===0&&(this.tail=o),this.head=o,++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 o=this.head,a=""+o.data;o=o.next;)a+=r+o.data;return a}},{key:"concat",value:function(r){if(this.length===0)return sF.alloc(0);for(var o=sF.allocUnsafe(r>>>0),a=this.head,n=0;a;)S1t(a.data,o,n),n+=a.data.length,a=a.next;return o}},{key:"consume",value:function(r,o){var a;return ru.length?u.length:r;if(A===u.length?n+=u:n+=u.slice(0,r),r-=A,r===0){A===u.length?(++a,o.next?this.head=o.next:this.head=this.tail=null):(this.head=o,o.data=u.slice(A));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var o=sF.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(o),r-=a.data.length;a=a.next;){var u=a.data,A=r>u.length?u.length:r;if(u.copy(o,o.length-r,0,A),r-=A,r===0){A===u.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=u.slice(A));break}++n}return this.length-=n,o}},{key:D1t,value:function(r,o){return lG(this,E1t({},o,{depth:0,customInspect:!1}))}}]),t}()});var uG=_((zZt,g2e)=>{"use strict";function P1t(t,e){var r=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(cG,this,t)):process.nextTick(cG,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(n){!e&&n?r._writableState?r._writableState.errorEmitted?process.nextTick(oF,r):(r._writableState.errorEmitted=!0,process.nextTick(h2e,r,n)):process.nextTick(h2e,r,n):e?(process.nextTick(oF,r),e(n)):process.nextTick(oF,r)}),this)}function h2e(t,e){cG(t,e),oF(t)}function oF(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function x1t(){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 cG(t,e){t.emit("error",e)}function b1t(t,e){var r=t._readableState,o=t._writableState;r&&r.autoDestroy||o&&o.autoDestroy?t.destroy(e):t.emit("error",e)}g2e.exports={destroy:P1t,undestroy:x1t,errorOrDestroy:b1t}});var Jh=_((XZt,y2e)=>{"use strict";var m2e={};function Ac(t,e,r){r||(r=Error);function o(n,u,A){return typeof e=="string"?e:e(n,u,A)}class a extends r{constructor(u,A,p){super(o(u,A,p))}}a.prototype.name=r.name,a.prototype.code=t,m2e[t]=a}function d2e(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(o=>String(o)),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 k1t(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function Q1t(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function F1t(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}Ac("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);Ac("ERR_INVALID_ARG_TYPE",function(t,e,r){let o;typeof e=="string"&&k1t(e,"not ")?(o="must not be",e=e.replace(/^not /,"")):o="must be";let a;if(Q1t(t," argument"))a=`The ${t} ${o} ${d2e(e,"type")}`;else{let n=F1t(t,".")?"property":"argument";a=`The "${t}" ${n} ${o} ${d2e(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);Ac("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");Ac("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});Ac("ERR_STREAM_PREMATURE_CLOSE","Premature close");Ac("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});Ac("ERR_MULTIPLE_CALLBACK","Callback called multiple times");Ac("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");Ac("ERR_STREAM_WRITE_AFTER_END","write after end");Ac("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);Ac("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);Ac("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");y2e.exports.codes=m2e});var AG=_((ZZt,E2e)=>{"use strict";var R1t=Jh().codes.ERR_INVALID_OPT_VALUE;function T1t(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function L1t(t,e,r,o){var a=T1t(e,o,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=o?r:"highWaterMark";throw new R1t(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}E2e.exports={getHighWaterMark:L1t}});var C2e=_(($Zt,fG)=>{typeof Object.create=="function"?fG.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:fG.exports=function(e,r){if(r){e.super_=r;var o=function(){};o.prototype=r.prototype,e.prototype=new o,e.prototype.constructor=e}}});var zh=_((e$t,hG)=>{try{if(pG=ve("util"),typeof pG.inherits!="function")throw"";hG.exports=pG.inherits}catch{hG.exports=C2e()}var pG});var w2e=_((t$t,I2e)=>{I2e.exports=ve("util").deprecate});var mG=_((r$t,x2e)=>{"use strict";x2e.exports=Li;function v2e(t){var e=this;this.next=null,this.entry=null,this.finish=function(){l2t(e,t)}}var OC;Li.WritableState=Tv;var N1t={deprecate:w2e()},D2e=aG(),lF=ve("buffer").Buffer,O1t=global.Uint8Array||function(){};function M1t(t){return lF.from(t)}function U1t(t){return lF.isBuffer(t)||t instanceof O1t}var dG=uG(),_1t=AG(),H1t=_1t.getHighWaterMark,Xh=Jh().codes,q1t=Xh.ERR_INVALID_ARG_TYPE,j1t=Xh.ERR_METHOD_NOT_IMPLEMENTED,G1t=Xh.ERR_MULTIPLE_CALLBACK,W1t=Xh.ERR_STREAM_CANNOT_PIPE,Y1t=Xh.ERR_STREAM_DESTROYED,V1t=Xh.ERR_STREAM_NULL_VALUES,K1t=Xh.ERR_STREAM_WRITE_AFTER_END,J1t=Xh.ERR_UNKNOWN_ENCODING,MC=dG.errorOrDestroy;zh()(Li,D2e);function z1t(){}function Tv(t,e,r){OC=OC||dd(),t=t||{},typeof r!="boolean"&&(r=e instanceof OC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=H1t(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){n2t(e,a)},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 v2e(this)}Tv.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(Tv.prototype,"buffer",{get:N1t.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var aF;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(aF=Function.prototype[Symbol.hasInstance],Object.defineProperty(Li,Symbol.hasInstance,{value:function(e){return aF.call(this,e)?!0:this!==Li?!1:e&&e._writableState instanceof Tv}})):aF=function(e){return e instanceof this};function Li(t){OC=OC||dd();var e=this instanceof OC;if(!e&&!aF.call(Li,this))return new Li(t);this._writableState=new Tv(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)),D2e.call(this)}Li.prototype.pipe=function(){MC(this,new W1t)};function X1t(t,e){var r=new K1t;MC(t,r),process.nextTick(e,r)}function Z1t(t,e,r,o){var a;return r===null?a=new V1t:typeof r!="string"&&!e.objectMode&&(a=new q1t("chunk",["string","Buffer"],r)),a?(MC(t,a),process.nextTick(o,a),!1):!0}Li.prototype.write=function(t,e,r){var o=this._writableState,a=!1,n=!o.objectMode&&U1t(t);return n&&!lF.isBuffer(t)&&(t=M1t(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=o.defaultEncoding),typeof r!="function"&&(r=z1t),o.ending?X1t(this,r):(n||Z1t(this,o,t,r))&&(o.pendingcb++,a=e2t(this,o,n,t,e,r)),a};Li.prototype.cork=function(){this._writableState.corked++};Li.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&S2e(this,t))};Li.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 J1t(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Li.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function $1t(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=lF.from(e,r)),e}Object.defineProperty(Li.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function e2t(t,e,r,o,a,n){if(!r){var u=$1t(e,o,a);o!==u&&(r=!0,a="buffer",o=u)}var A=e.objectMode?1:o.length;e.length+=A;var p=e.length{"use strict";var c2t=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};k2e.exports=IA;var b2e=CG(),EG=mG();zh()(IA,b2e);for(yG=c2t(EG.prototype),cF=0;cF{var AF=ve("buffer"),np=AF.Buffer;function Q2e(t,e){for(var r in t)e[r]=t[r]}np.from&&np.alloc&&np.allocUnsafe&&np.allocUnsafeSlow?F2e.exports=AF:(Q2e(AF,IG),IG.Buffer=UC);function UC(t,e,r){return np(t,e,r)}Q2e(np,UC);UC.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return np(t,e,r)};UC.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var o=np(t);return e!==void 0?typeof r=="string"?o.fill(e,r):o.fill(e):o.fill(0),o};UC.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return np(t)};UC.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return AF.SlowBuffer(t)}});var vG=_(L2e=>{"use strict";var BG=R2e().Buffer,T2e=BG.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 f2t(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 p2t(t){var e=f2t(t);if(typeof e!="string"&&(BG.isEncoding===T2e||!T2e(t)))throw new Error("Unknown encoding: "+t);return e||t}L2e.StringDecoder=Lv;function Lv(t){this.encoding=p2t(t);var e;switch(this.encoding){case"utf16le":this.text=E2t,this.end=C2t,e=4;break;case"utf8":this.fillLast=d2t,e=4;break;case"base64":this.text=I2t,this.end=w2t,e=3;break;default:this.write=B2t,this.end=v2t;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=BG.allocUnsafe(e)}Lv.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 h2t(t,e,r){var o=e.length-1;if(o=0?(a>0&&(t.lastNeed=a-1),a):--o=0?(a>0&&(t.lastNeed=a-2),a):--o=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function g2t(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 d2t(t){var e=this.lastTotal-this.lastNeed,r=g2t(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 m2t(t,e){var r=h2t(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var o=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,o),t.toString("utf8",e,o)}function y2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function E2t(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var o=r.charCodeAt(r.length-1);if(o>=55296&&o<=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 C2t(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 I2t(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 w2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function B2t(t){return t.toString(this.encoding)}function v2t(t){return t&&t.length?this.write(t):""}});var fF=_((s$t,M2e)=>{"use strict";var N2e=Jh().codes.ERR_STREAM_PREMATURE_CLOSE;function D2t(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";var pF;function Zh(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var x2t=fF(),$h=Symbol("lastResolve"),md=Symbol("lastReject"),Nv=Symbol("error"),hF=Symbol("ended"),yd=Symbol("lastPromise"),DG=Symbol("handlePromise"),Ed=Symbol("stream");function e0(t,e){return{value:t,done:e}}function b2t(t){var e=t[$h];if(e!==null){var r=t[Ed].read();r!==null&&(t[yd]=null,t[$h]=null,t[md]=null,e(e0(r,!1)))}}function k2t(t){process.nextTick(b2t,t)}function Q2t(t,e){return function(r,o){t.then(function(){if(e[hF]){r(e0(void 0,!0));return}e[DG](r,o)},o)}}var F2t=Object.getPrototypeOf(function(){}),R2t=Object.setPrototypeOf((pF={get stream(){return this[Ed]},next:function(){var e=this,r=this[Nv];if(r!==null)return Promise.reject(r);if(this[hF])return Promise.resolve(e0(void 0,!0));if(this[Ed].destroyed)return new Promise(function(u,A){process.nextTick(function(){e[Nv]?A(e[Nv]):u(e0(void 0,!0))})});var o=this[yd],a;if(o)a=new Promise(Q2t(o,this));else{var n=this[Ed].read();if(n!==null)return Promise.resolve(e0(n,!1));a=new Promise(this[DG])}return this[yd]=a,a}},Zh(pF,Symbol.asyncIterator,function(){return this}),Zh(pF,"return",function(){var e=this;return new Promise(function(r,o){e[Ed].destroy(null,function(a){if(a){o(a);return}r(e0(void 0,!0))})})}),pF),F2t),T2t=function(e){var r,o=Object.create(R2t,(r={},Zh(r,Ed,{value:e,writable:!0}),Zh(r,$h,{value:null,writable:!0}),Zh(r,md,{value:null,writable:!0}),Zh(r,Nv,{value:null,writable:!0}),Zh(r,hF,{value:e._readableState.endEmitted,writable:!0}),Zh(r,DG,{value:function(n,u){var A=o[Ed].read();A?(o[yd]=null,o[$h]=null,o[md]=null,n(e0(A,!1))):(o[$h]=n,o[md]=u)},writable:!0}),r));return o[yd]=null,x2t(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=o[md];n!==null&&(o[yd]=null,o[$h]=null,o[md]=null,n(a)),o[Nv]=a;return}var u=o[$h];u!==null&&(o[yd]=null,o[$h]=null,o[md]=null,u(e0(void 0,!0))),o[hF]=!0}),e.on("readable",k2t.bind(null,o)),o};U2e.exports=T2t});var G2e=_((a$t,j2e)=>{"use strict";function H2e(t,e,r,o,a,n,u){try{var A=t[n](u),p=A.value}catch(h){r(h);return}A.done?e(p):Promise.resolve(p).then(o,a)}function L2t(t){return function(){var e=this,r=arguments;return new Promise(function(o,a){var n=t.apply(e,r);function u(p){H2e(n,o,a,u,A,"next",p)}function A(p){H2e(n,o,a,u,A,"throw",p)}u(void 0)})}}function q2e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function N2t(t){for(var e=1;e{"use strict";eBe.exports=wn;var _C;wn.ReadableState=K2e;var l$t=ve("events").EventEmitter,V2e=function(e,r){return e.listeners(r).length},Mv=aG(),gF=ve("buffer").Buffer,_2t=global.Uint8Array||function(){};function H2t(t){return gF.from(t)}function q2t(t){return gF.isBuffer(t)||t instanceof _2t}var SG=ve("util"),tn;SG&&SG.debuglog?tn=SG.debuglog("stream"):tn=function(){};var j2t=p2e(),RG=uG(),G2t=AG(),W2t=G2t.getHighWaterMark,dF=Jh().codes,Y2t=dF.ERR_INVALID_ARG_TYPE,V2t=dF.ERR_STREAM_PUSH_AFTER_EOF,K2t=dF.ERR_METHOD_NOT_IMPLEMENTED,J2t=dF.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,HC,PG,xG;zh()(wn,Mv);var Ov=RG.errorOrDestroy,bG=["error","close","destroy","pause","resume"];function z2t(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 K2e(t,e,r){_C=_C||dd(),t=t||{},typeof r!="boolean"&&(r=e instanceof _C),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=W2t(this,t,"readableHighWaterMark",r),this.buffer=new j2t,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&&(HC||(HC=vG().StringDecoder),this.decoder=new HC(t.encoding),this.encoding=t.encoding)}function wn(t){if(_C=_C||dd(),!(this instanceof wn))return new wn(t);var e=this instanceof _C;this._readableState=new K2e(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),Mv.call(this)}Object.defineProperty(wn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}});wn.prototype.destroy=RG.destroy;wn.prototype._undestroy=RG.undestroy;wn.prototype._destroy=function(t,e){e(t)};wn.prototype.push=function(t,e){var r=this._readableState,o;return r.objectMode?o=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=gF.from(t,e),e=""),o=!0),J2e(this,t,e,!1,o)};wn.prototype.unshift=function(t){return J2e(this,t,null,!0,!1)};function J2e(t,e,r,o,a){tn("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,$2t(t,n);else{var u;if(a||(u=X2t(n,e)),u)Ov(t,u);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==gF.prototype&&(e=H2t(e)),o)n.endEmitted?Ov(t,new J2t):kG(t,n,e,!0);else if(n.ended)Ov(t,new V2t);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?kG(t,n,e,!1):FG(t,n)):kG(t,n,e,!1)}else o||(n.reading=!1,FG(t,n))}return!n.ended&&(n.length=W2e?t=W2e:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function Y2e(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=Z2t(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}wn.prototype.read=function(t){tn("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 tn("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?QG(this):mF(this),null;if(t=Y2e(t,e),t===0&&e.ended)return e.length===0&&QG(this),null;var o=e.needReadable;tn("need readable",o),(e.length===0||e.length-t0?a=Z2e(t,e):a=null,a===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&&QG(this)),a!==null&&this.emit("data",a),a};function $2t(t,e){if(tn("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?mF(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,z2e(t)))}}function mF(t){var e=t._readableState;tn("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||(tn("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(z2e,t))}function z2e(t){var e=t._readableState;tn("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,TG(t)}function FG(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(eBt,t,e))}function eBt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&$2e(o.pipes,t)!==-1)&&!h&&(tn("false write response, pause",o.awaitDrain),o.awaitDrain++),r.pause())}function D(N){tn("onerror",N),T(),t.removeListener("error",D),V2e(t,"error")===0&&Ov(t,N)}z2t(t,"error",D);function b(){t.removeListener("finish",C),T()}t.once("close",b);function C(){tn("onfinish"),t.removeListener("close",b),T()}t.once("finish",C);function T(){tn("unpipe"),r.unpipe(t)}return t.emit("pipe",r),o.flowing||(tn("pipe resume"),r.resume()),t};function tBt(t){return function(){var r=t._readableState;tn("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&V2e(t,"data")&&(r.flowing=!0,TG(t))}}wn.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 o=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,o.flowing!==!1&&this.resume()):t==="readable"&&!o.endEmitted&&!o.readableListening&&(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,tn("on readable",o.length,o.reading),o.length?mF(this):o.reading||process.nextTick(rBt,this)),r};wn.prototype.addListener=wn.prototype.on;wn.prototype.removeListener=function(t,e){var r=Mv.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(X2e,this),r};wn.prototype.removeAllListeners=function(t){var e=Mv.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(X2e,this),e};function X2e(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 rBt(t){tn("readable nexttick read 0"),t.read(0)}wn.prototype.resume=function(){var t=this._readableState;return t.flowing||(tn("resume"),t.flowing=!t.readableListening,nBt(this,t)),t.paused=!1,this};function nBt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(iBt,t,e))}function iBt(t,e){tn("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),TG(t),e.flowing&&!e.reading&&t.read(0)}wn.prototype.pause=function(){return tn("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(tn("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function TG(t){var e=t._readableState;for(tn("flow",e.flowing);e.flowing&&t.read()!==null;);}wn.prototype.wrap=function(t){var e=this,r=this._readableState,o=!1;t.on("end",function(){if(tn("wrapped end"),r.decoder&&!r.ended){var u=r.decoder.end();u&&u.length&&e.push(u)}e.push(null)}),t.on("data",function(u){if(tn("wrapped data"),r.decoder&&(u=r.decoder.write(u)),!(r.objectMode&&u==null)&&!(!r.objectMode&&(!u||!u.length))){var A=e.push(u);A||(o=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(A){return function(){return t[A].apply(t,arguments)}}(a));for(var n=0;n=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 QG(t){var e=t._readableState;tn("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(sBt,e,t))}function sBt(t,e){if(tn("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"&&(wn.from=function(t,e){return xG===void 0&&(xG=G2e()),xG(wn,t,e)});function $2e(t,e){for(var r=0,o=t.length;r{"use strict";rBe.exports=ip;var yF=Jh().codes,oBt=yF.ERR_METHOD_NOT_IMPLEMENTED,aBt=yF.ERR_MULTIPLE_CALLBACK,lBt=yF.ERR_TRANSFORM_ALREADY_TRANSFORMING,cBt=yF.ERR_TRANSFORM_WITH_LENGTH_0,EF=dd();zh()(ip,EF);function uBt(t,e){var r=this._transformState;r.transforming=!1;var o=r.writecb;if(o===null)return this.emit("error",new aBt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),o(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";iBe.exports=Uv;var nBe=LG();zh()(Uv,nBe);function Uv(t){if(!(this instanceof Uv))return new Uv(t);nBe.call(this,t)}Uv.prototype._transform=function(t,e,r){r(null,t)}});var uBe=_((f$t,cBe)=>{"use strict";var NG;function fBt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var lBe=Jh().codes,pBt=lBe.ERR_MISSING_ARGS,hBt=lBe.ERR_STREAM_DESTROYED;function oBe(t){if(t)throw t}function gBt(t){return t.setHeader&&typeof t.abort=="function"}function dBt(t,e,r,o){o=fBt(o);var a=!1;t.on("close",function(){a=!0}),NG===void 0&&(NG=fF()),NG(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,gBt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();o(u||new hBt("pipe"))}}}function aBe(t){t()}function mBt(t,e){return t.pipe(e)}function yBt(t){return!t.length||typeof t[t.length-1]!="function"?oBe:t.pop()}function EBt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return dBt(u,p,h,function(E){a||(a=E),E&&n.forEach(aBe),!p&&(n.forEach(aBe),o(a))})});return e.reduce(mBt)}cBe.exports=EBt});var qC=_((fc,Hv)=>{var _v=ve("stream");process.env.READABLE_STREAM==="disable"&&_v?(Hv.exports=_v.Readable,Object.assign(Hv.exports,_v),Hv.exports.Stream=_v):(fc=Hv.exports=CG(),fc.Stream=_v||fc,fc.Readable=fc,fc.Writable=mG(),fc.Duplex=dd(),fc.Transform=LG(),fc.PassThrough=sBe(),fc.finished=fF(),fc.pipeline=uBe())});var pBe=_((p$t,fBe)=>{"use strict";var{Buffer:hu}=ve("buffer"),ABe=Symbol.for("BufferList");function fi(t){if(!(this instanceof fi))return new fi(t);fi._init.call(this,t)}fi._init=function(e){Object.defineProperty(this,ABe,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};fi.prototype._new=function(e){return new fi(e)};fi.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let o=0;othis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};fi.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)};fi.prototype.copy=function(e,r,o,a){if((typeof o!="number"||o<0)&&(o=0),(typeof a!="number"||a>this.length)&&(a=this.length),o>=this.length||a<=0)return e||hu.alloc(0);let n=!!e,u=this._offset(o),A=a-o,p=A,h=n&&r||0,E=u[1];if(o===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:hu.concat(this._bufs,this.length);for(let w=0;wD)this._bufs[w].copy(e,h,E),h+=D;else{this._bufs[w].copy(e,h,E,E+p),h+=D;break}p-=D,E&&(E=0)}return e.length>h?e.slice(0,h):e};fi.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 o=this._offset(e),a=this._offset(r),n=this._bufs.slice(o[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),o[1]!==0&&(n[0]=n[0].slice(o[1])),this._new(n)};fi.prototype.toString=function(e,r,o){return this.slice(r,o).toString(e)};fi.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};fi.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let o=this._offset(e),a=o[0],n=o[1];for(;a=t.length){let p=u.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=u.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};fi.prototype._match=function(t,e){if(this.length-t{"use strict";var OG=qC().Duplex,CBt=zh(),qv=pBe();function Fo(t){if(!(this instanceof Fo))return new Fo(t);if(typeof t=="function"){this._callback=t;let e=function(o){this._callback&&(this._callback(o),this._callback=null)}.bind(this);this.on("pipe",function(o){o.on("error",e)}),this.on("unpipe",function(o){o.removeListener("error",e)}),t=null}qv._init.call(this,t),OG.call(this)}CBt(Fo,OG);Object.assign(Fo.prototype,qv.prototype);Fo.prototype._new=function(e){return new Fo(e)};Fo.prototype._write=function(e,r,o){this._appendBuffer(e),typeof o=="function"&&o()};Fo.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)};Fo.prototype.end=function(e){OG.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Fo.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};Fo.prototype._isBufferList=function(e){return e instanceof Fo||e instanceof qv||Fo.isBufferList(e)};Fo.isBufferList=qv.isBufferList;CF.exports=Fo;CF.exports.BufferListStream=Fo;CF.exports.BufferList=qv});var _G=_(GC=>{var IBt=Buffer.alloc,wBt="0000000000000000000",BBt="7777777777777777777",gBe=48,dBe=Buffer.from("ustar\0","binary"),vBt=Buffer.from("00","binary"),DBt=Buffer.from("ustar ","binary"),SBt=Buffer.from(" \0","binary"),PBt=parseInt("7777",8),jv=257,UG=263,xBt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},bBt=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},kBt=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},mBe=function(t,e,r,o){for(;re?BBt.slice(0,e)+" ":wBt.slice(0,e-t.length)+t+" "};function QBt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],o=t.length-1;o>0;o--){var a=t[o];e?r.push(a):r.push(255-a)}var n=0,u=r.length;for(o=0;o=Math.pow(10,r)&&r++,e+r+t};GC.decodeLongPath=function(t,e){return jC(t,0,t.length,e)};GC.encodePax=function(t){var e="";t.name&&(e+=MG(" path="+t.name+` +`)),t.linkname&&(e+=MG(" linkpath="+t.linkname+` +`));var r=t.pax;if(r)for(var o in r)e+=MG(" "+o+"="+r[o]+` +`);return Buffer.from(e)};GC.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;o+=o?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(o)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(t0(t.mode&PBt,6),100),e.write(t0(t.uid,6),108),e.write(t0(t.gid,6),116),e.write(t0(t.size,11),124),e.write(t0(t.mtime.getTime()/1e3|0,11),136),e[156]=gBe+kBt(t.type),t.linkname&&e.write(t.linkname,157),dBe.copy(e,jv),vBt.copy(e,UG),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(t0(t.devmajor||0,6),329),e.write(t0(t.devminor||0,6),337),o&&e.write(o,345),e.write(t0(yBe(e),6),148),e)};GC.decode=function(t,e,r){var o=t[156]===0?0:t[156]-gBe,a=jC(t,0,100,e),n=r0(t,100,8),u=r0(t,108,8),A=r0(t,116,8),p=r0(t,124,12),h=r0(t,136,12),E=bBt(o),w=t[157]===0?null:jC(t,157,100,e),D=jC(t,265,32),b=jC(t,297,32),C=r0(t,329,8),T=r0(t,337,8),N=yBe(t);if(N===8*32)return null;if(N!==r0(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(dBe.compare(t,jv,jv+6)===0)t[345]&&(a=jC(t,345,155,e)+"/"+a);else if(!(DBt.compare(t,jv,jv+6)===0&&SBt.compare(t,UG,UG+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return o===0&&a&&a[a.length-1]==="/"&&(o=5),{name:a,mode:n,uid:u,gid:A,size:p,mtime:new Date(1e3*h),type:E,linkname:w,uname:D,gname:b,devmajor:C,devminor:T}}});var DBe=_((d$t,vBe)=>{var CBe=ve("util"),FBt=hBe(),Gv=_G(),IBe=qC().Writable,wBe=qC().PassThrough,BBe=function(){},EBe=function(t){return t&=511,t&&512-t},RBt=function(t,e){var r=new IF(t,e);return r.end(),r},TBt=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},IF=function(t,e){this._parent=t,this.offset=e,wBe.call(this,{autoDestroy:!1})};CBe.inherits(IF,wBe);IF.prototype.destroy=function(t){this._parent.destroy(t)};var sp=function(t){if(!(this instanceof sp))return new sp(t);IBe.call(this,t),t=t||{},this._offset=0,this._buffer=FBt(),this._missing=0,this._partial=!1,this._onparse=BBe,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,o=function(){e._continue()},a=function(D){if(e._locked=!1,D)return e.destroy(D);e._stream||o()},n=function(){e._stream=null;var D=EBe(e._header.size);D?e._parse(D,u):e._parse(512,w),e._locked||o()},u=function(){e._buffer.consume(EBe(e._header.size)),e._parse(512,w),o()},A=function(){var D=e._header.size;e._paxGlobal=Gv.decodePax(r.slice(0,D)),r.consume(D),n()},p=function(){var D=e._header.size;e._pax=Gv.decodePax(r.slice(0,D)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(D),n()},h=function(){var D=e._header.size;this._gnuLongPath=Gv.decodeLongPath(r.slice(0,D),t.filenameEncoding),r.consume(D),n()},E=function(){var D=e._header.size;this._gnuLongLinkPath=Gv.decodeLongPath(r.slice(0,D),t.filenameEncoding),r.consume(D),n()},w=function(){var D=e._offset,b;try{b=e._header=Gv.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(C){e.emit("error",C)}if(r.consume(512),!b){e._parse(512,w),o();return}if(b.type==="gnu-long-path"){e._parse(b.size,h),o();return}if(b.type==="gnu-long-link-path"){e._parse(b.size,E),o();return}if(b.type==="pax-global-header"){e._parse(b.size,A),o();return}if(b.type==="pax-header"){e._parse(b.size,p),o();return}if(e._gnuLongPath&&(b.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(b.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=b=TBt(b,e._pax),e._pax=null),e._locked=!0,!b.size||b.type==="directory"){e._parse(512,w),e.emit("entry",b,RBt(e,D),a);return}e._stream=new IF(e,D),e.emit("entry",b,e._stream,a),e._parse(b.size,n),o()};this._onheader=w,this._parse(512,w)};CBe.inherits(sp,IBe);sp.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};sp.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};sp.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=BBe,this._overflow?this._write(this._overflow,void 0,t):t()}};sp.prototype._write=function(t,e,r){if(!this._destroyed){var o=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(u=t.slice(n),t=t.slice(0,n)),o?o.end(t):a.append(t),this._overflow=u,this._onparse()}};sp.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};vBe.exports=sp});var PBe=_((m$t,SBe)=>{SBe.exports=ve("fs").constants||ve("constants")});var FBe=_((y$t,QBe)=>{var WC=PBe(),xBe=E4(),BF=zh(),LBt=Buffer.alloc,bBe=qC().Readable,YC=qC().Writable,NBt=ve("string_decoder").StringDecoder,wF=_G(),OBt=parseInt("755",8),MBt=parseInt("644",8),kBe=LBt(1024),qG=function(){},HG=function(t,e){e&=511,e&&t.push(kBe.slice(0,512-e))};function UBt(t){switch(t&WC.S_IFMT){case WC.S_IFBLK:return"block-device";case WC.S_IFCHR:return"character-device";case WC.S_IFDIR:return"directory";case WC.S_IFIFO:return"fifo";case WC.S_IFLNK:return"symlink"}return"file"}var vF=function(t){YC.call(this),this.written=0,this._to=t,this._destroyed=!1};BF(vF,YC);vF.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};vF.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var DF=function(){YC.call(this),this.linkname="",this._decoder=new NBt("utf-8"),this._destroyed=!1};BF(DF,YC);DF.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};DF.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var Wv=function(){YC.call(this),this._destroyed=!1};BF(Wv,YC);Wv.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};Wv.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var wA=function(t){if(!(this instanceof wA))return new wA(t);bBe.call(this,t),this._drain=qG,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};BF(wA,bBe);wA.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=qG);var o=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=UBt(t.mode)),t.mode||(t.mode=t.type==="directory"?OBt:MBt),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 a=this.push(e);return HG(o,t.size),a?process.nextTick(r):this._drain=r,new Wv}if(t.type==="symlink"&&!t.linkname){var n=new DF;return xBe(n,function(A){if(A)return o.destroy(),r(A);t.linkname=n.linkname,o._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new Wv;var u=new vF(this);return this._stream=u,xBe(u,function(A){if(o._stream=null,A)return o.destroy(),r(A);if(u.written!==t.size)return o.destroy(),r(new Error("size mismatch"));HG(o,t.size),o._finalizing&&o.finalize(),r()}),u}};wA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push(kBe),this.push(null))};wA.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())};wA.prototype._encode=function(t){if(!t.pax){var e=wF.encode(t);if(e){this.push(e);return}}this._encodePax(t)};wA.prototype._encodePax=function(t){var e=wF.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(wF.encode(r)),this.push(e),HG(this,e.length),r.size=t.size,r.type=t.type,this.push(wF.encode(r))};wA.prototype._read=function(t){var e=this._drain;this._drain=qG,e()};QBe.exports=wA});var RBe=_(jG=>{jG.extract=DBe();jG.pack=FBe()});var WBe=_((M$t,GBe)=>{"use strict";var Yv=class t{constructor(e,r,o){this.__specs=e||{},Object.keys(this.__specs).forEach(a=>{if(typeof this.__specs[a]=="string"){let n=this.__specs[a],u=this.__specs[n];if(u){let A=u.aliases||[];A.push(a,n),u.aliases=[...new Set(A)],this.__specs[a]=u}else throw new Error(`Alias refers to invalid key: ${n} -> ${a}`)}}),this.__opts=r||{},this.__providers=qBe(o.filter(a=>a!=null&&typeof a=="object")),this.__isFiggyPudding=!0}get(e){return JG(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[o,a]of this.entries())e.call(r,a,o,this)}toJSON(){let e={};return this.forEach((r,o)=>{e[o]=r}),e}*entries(e){for(let o of Object.keys(this.__specs))yield[o,this.get(o)];let r=e||this.__opts.other;if(r){let o=new Set;for(let a of this.__providers){let n=a.entries?a.entries(r):evt(a);for(let[u,A]of n)r(u)&&!o.has(u)&&(o.add(u),yield[u,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 t(this.__specs,this.__opts,qBe(this.__providers).concat(e)),jBe)}};try{let t=ve("util");Yv.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch{}function ZBt(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function JG(t,e,r){let o=t.__specs[e];if(r&&!o&&(!t.__opts.other||!t.__opts.other(e)))ZBt(e);else{o||(o={});let a;for(let n of t.__providers){if(a=HBe(e,n),a===void 0&&o.aliases&&o.aliases.length){for(let u of o.aliases)if(u!==e&&(a=HBe(u,n),a!==void 0))break}if(a!==void 0)break}return a===void 0&&o.default!==void 0?typeof o.default=="function"?o.default(t):o.default:a}}function HBe(t,e){let r;return e.__isFiggyPudding?r=JG(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var jBe={has(t,e){return e in t.__specs&&JG(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 Yv.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.")}};GBe.exports=$Bt;function $Bt(t,e){function r(...o){return new Proxy(new Yv(t,e,o),jBe)}return r}function qBe(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function evt(t){return Object.keys(t).map(e=>[e,t[e]])}});var KBe=_((U$t,DA)=>{"use strict";var Kv=ve("crypto"),tvt=WBe(),rvt=ve("stream").Transform,YBe=["sha256","sha384","sha512"],nvt=/^[a-z0-9+/]+(?:=?=?)$/i,ivt=/^([^-]+)-([^?]+)([?\S*]*)$/,svt=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,ovt=/^[\x21-\x7E]+$/,na=tvt({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>hvt},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),n0=class{get isHash(){return!0}constructor(e,r){r=na(r);let o=!!r.strict;this.source=e.trim();let a=this.source.match(o?svt:ivt);if(!a||o&&!YBe.some(u=>u===a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];this.options=n?n.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=na(e),e.strict&&!(YBe.some(o=>o===this.algorithm)&&this.digest.match(nvt)&&(this.options||[]).every(o=>o.match(ovt))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},Cd=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=na(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(o=>this[o].map(a=>n0.prototype.toString.call(a,e)).filter(a=>a.length).join(r)).filter(o=>o.length).join(r)}concat(e,r){r=na(r);let o=typeof e=="string"?e:Vv(e,r);return vA(`${this.toString(r)} ${o}`,r)}hexDigest(){return vA(this,{single:!0}).hexDigest()}match(e,r){r=na(r);let o=vA(e,r),a=o.pickAlgorithm(r);return this[a]&&o[a]&&this[a].find(n=>o[a].find(u=>n.digest===u.digest))||!1}pickAlgorithm(e){e=na(e);let r=e.pickAlgorithm,o=Object.keys(this);if(!o.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return o.reduce((a,n)=>r(a,n)||a)}};DA.exports.parse=vA;function vA(t,e){if(e=na(e),typeof t=="string")return zG(t,e);if(t.algorithm&&t.digest){let r=new Cd;return r[t.algorithm]=[t],zG(Vv(r,e),e)}else return zG(Vv(t,e),e)}function zG(t,e){return e.single?new n0(t,e):t.trim().split(/\s+/).reduce((r,o)=>{let a=new n0(o,e);if(a.algorithm&&a.digest){let n=a.algorithm;r[n]||(r[n]=[]),r[n].push(a)}return r},new Cd)}DA.exports.stringify=Vv;function Vv(t,e){return e=na(e),t.algorithm&&t.digest?n0.prototype.toString.call(t,e):typeof t=="string"?Vv(vA(t,e),e):Cd.prototype.toString.call(t,e)}DA.exports.fromHex=avt;function avt(t,e,r){r=na(r);let o=r.options&&r.options.length?`?${r.options.join("?")}`:"";return vA(`${e}-${Buffer.from(t,"hex").toString("base64")}${o}`,r)}DA.exports.fromData=lvt;function lvt(t,e){e=na(e);let r=e.algorithms,o=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((a,n)=>{let u=Kv.createHash(n).update(t).digest("base64"),A=new n0(`${n}-${u}${o}`,e);if(A.algorithm&&A.digest){let p=A.algorithm;a[p]||(a[p]=[]),a[p].push(A)}return a},new Cd)}DA.exports.fromStream=cvt;function cvt(t,e){e=na(e);let r=e.Promise||Promise,o=XG(e);return new r((a,n)=>{t.pipe(o),t.on("error",n),o.on("error",n);let u;o.on("integrity",A=>{u=A}),o.on("end",()=>a(u)),o.on("data",()=>{})})}DA.exports.checkData=uvt;function uvt(t,e,r){if(r=na(r),e=vA(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 o=e.pickAlgorithm(r),a=Kv.createHash(o).update(t).digest("base64"),n=vA({algorithm:o,digest:a}),u=n.match(e,r);if(u||!r.error)return u;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 ${o}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw A.code="EINTEGRITY",A.found=n,A.expected=e,A.algorithm=o,A.sri=e,A}}DA.exports.checkStream=Avt;function Avt(t,e,r){r=na(r);let o=r.Promise||Promise,a=XG(r.concat({integrity:e}));return new o((n,u)=>{t.pipe(a),t.on("error",u),a.on("error",u);let A;a.on("verified",p=>{A=p}),a.on("end",()=>n(A)),a.on("data",()=>{})})}DA.exports.integrityStream=XG;function XG(t){t=na(t);let e=t.integrity&&vA(t.integrity,t),r=e&&Object.keys(e).length,o=r&&e.pickAlgorithm(t),a=r&&e[o],n=Array.from(new Set(t.algorithms.concat(o?[o]:[]))),u=n.map(Kv.createHash),A=0,p=new rvt({transform(h,E,w){A+=h.length,u.forEach(D=>D.update(h,E)),w(null,h,E)}}).on("end",()=>{let h=t.options&&t.options.length?`?${t.options.join("?")}`:"",E=vA(u.map((D,b)=>`${n[b]}-${D.digest("base64")}${h}`).join(" "),t),w=r&&E.match(e,t);if(typeof t.size=="number"&&A!==t.size){let D=new Error(`stream size mismatch when checking ${e}. + Wanted: ${t.size} + Found: ${A}`);D.code="EBADSIZE",D.found=A,D.expected=t.size,D.sri=e,p.emit("error",D)}else if(t.integrity&&!w){let D=new Error(`${e} integrity checksum failed when using ${o}: wanted ${a} but got ${E}. (${A} bytes)`);D.code="EINTEGRITY",D.found=E,D.expected=a,D.algorithm=o,D.sri=e,p.emit("error",D)}else p.emit("size",A),p.emit("integrity",E),w&&p.emit("verified",w)});return p}DA.exports.create=fvt;function fvt(t){t=na(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",o=e.map(Kv.createHash);return{update:function(a,n){return o.forEach(u=>u.update(a,n)),this},digest:function(a){return e.reduce((u,A)=>{let p=o.shift().digest("base64"),h=new n0(`${A}-${p}${r}`,t);if(h.algorithm&&h.digest){let E=h.algorithm;u[E]||(u[E]=[]),u[E].push(h)}return u},new Cd)}}}var pvt=new Set(Kv.getHashes()),VBe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>pvt.has(t));function hvt(t,e){return VBe.indexOf(t.toLowerCase())>=VBe.indexOf(e.toLowerCase())?t:e}});var Bve=_((qnr,wve)=>{var hDt=WN();function gDt(t){return hDt(t)?void 0:t}wve.exports=gDt});var Dve=_((jnr,vve)=>{var dDt=Cb(),mDt=hH(),yDt=yH(),EDt=Wg(),CDt=Eg(),IDt=Bve(),wDt=l8(),BDt=pH(),vDt=1,DDt=2,SDt=4,PDt=wDt(function(t,e){var r={};if(t==null)return r;var o=!1;e=dDt(e,function(n){return n=EDt(n,t),o||(o=n.length>1),n}),CDt(t,BDt(t),r),o&&(r=mDt(r,vDt|DDt|SDt,IDt));for(var a=e.length;a--;)yDt(r,e[a]);return r});vve.exports=PDt});St();Ve();St();var kve=ve("child_process"),Qve=et(sg());Gt();var oE=new Map([]);var P2={};Vt(P2,{BaseCommand:()=>ut,WorkspaceRequiredError:()=>or,getCli:()=>qhe,getDynamicLibs:()=>Hhe,getPluginConfiguration:()=>lE,openWorkspace:()=>aE,pluginCommands:()=>oE,runExit:()=>Nk});Gt();var ut=class extends ot{constructor(){super(...arguments);this.cwd=de.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new it("The --cwd option is ambiguous when used anywhere else than the very first parameter provided in the command line, before even the command path");return super.validateAndExecute()}};Ve();St();Gt();var or=class extends it{constructor(e,r){let o=V.relative(e,r),a=V.join(e,_t.fileName);super(`This command can only be run from within a workspace of your project (${o} isn't a workspace of ${a}).`)}};Ve();St();sA();Ol();z1();Gt();var PAt=et(ni());il();var Hhe=()=>new Map([["@yarnpkg/cli",P2],["@yarnpkg/core",S2],["@yarnpkg/fslib",Aw],["@yarnpkg/libzip",K1],["@yarnpkg/parsers",Ew],["@yarnpkg/shell",e2],["clipanion",Qw],["semver",PAt],["typanion",Yo]]);Ve();async function aE(t,e){let{project:r,workspace:o}=await Qt.find(t,e);if(!o)throw new or(r.cwd,e);return o}Ve();St();sA();Ol();z1();Gt();var NDt=et(ni());il();var MH={};Vt(MH,{AddCommand:()=>fE,BinCommand:()=>pE,CacheCleanCommand:()=>hE,ClipanionCommand:()=>CE,ConfigCommand:()=>yE,ConfigGetCommand:()=>gE,ConfigSetCommand:()=>dE,ConfigUnsetCommand:()=>mE,DedupeCommand:()=>EE,EntryCommand:()=>wE,ExecCommand:()=>vE,ExplainCommand:()=>PE,ExplainPeerRequirementsCommand:()=>DE,HelpCommand:()=>IE,InfoCommand:()=>xE,LinkCommand:()=>kE,NodeCommand:()=>QE,PluginCheckCommand:()=>FE,PluginImportCommand:()=>LE,PluginImportSourcesCommand:()=>NE,PluginListCommand:()=>RE,PluginRemoveCommand:()=>OE,PluginRuntimeCommand:()=>ME,RebuildCommand:()=>UE,RemoveCommand:()=>_E,RunCommand:()=>qE,RunIndexCommand:()=>HE,SetResolutionCommand:()=>jE,SetVersionCommand:()=>SE,SetVersionSourcesCommand:()=>TE,UnlinkCommand:()=>GE,UpCommand:()=>WE,VersionCommand:()=>BE,WhyCommand:()=>YE,WorkspaceCommand:()=>XE,WorkspacesListCommand:()=>zE,YarnCommand:()=>bE,dedupeUtils:()=>Yk,default:()=>Igt,suggestUtils:()=>nu});var Eme=et(sg());Ve();Ve();Ve();Gt();var bge=et(Q2());il();var nu={};Vt(nu,{Modifier:()=>lH,Strategy:()=>jk,Target:()=>F2,WorkspaceModifier:()=>vge,applyModifier:()=>Vft,extractDescriptorFromPath:()=>cH,extractRangeModifier:()=>Dge,fetchDescriptorFrom:()=>uH,findProjectDescriptors:()=>xge,getModifier:()=>R2,getSuggestedDescriptors:()=>T2,makeWorkspaceDescriptor:()=>Pge,toWorkspaceModifier:()=>Sge});Ve();Ve();St();var aH=et(ni()),Wft="workspace:",F2=(o=>(o.REGULAR="dependencies",o.DEVELOPMENT="devDependencies",o.PEER="peerDependencies",o))(F2||{}),lH=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="",o))(lH||{}),vge=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="*",o))(vge||{}),jk=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))(jk||{});function R2(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var Yft=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function Dge(t,{project:e}){let r=t.match(Yft);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function Vft(t,e){let{protocol:r,source:o,params:a,selector:n}=G.parseRange(t.range);return aH.default.valid(n)&&(n=`${e}${t.range}`),G.makeDescriptor(t,G.makeRange({protocol:r,source:o,params:a,selector:n}))}function Sge(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function Pge(t,e){return G.makeDescriptor(t.anchoredDescriptor,`${Wft}${Sge(e)}`)}async function xge(t,{project:e,target:r}){let o=new Map,a=n=>{let u=o.get(n.descriptorHash);return u||o.set(n.descriptorHash,u={descriptor:n,locators:[]}),u};for(let n of e.workspaces)if(r==="peerDependencies"){let u=n.manifest.peerDependencies.get(t.identHash);u!==void 0&&a(u).locators.push(n.anchoredLocator)}else{let u=n.manifest.dependencies.get(t.identHash),A=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?A!==void 0?a(A).locators.push(n.anchoredLocator):u!==void 0&&a(u).locators.push(n.anchoredLocator):u!==void 0?a(u).locators.push(n.anchoredLocator):A!==void 0&&a(A).locators.push(n.anchoredLocator)}return o}async function cH(t,{cwd:e,workspace:r}){return await Kft(async o=>{V.isAbsolute(t)||(t=V.relative(r.cwd,V.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await uH(G.makeIdent(null,"archive"),t,{project:r.project,cache:o,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let u=new Ri,A=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:o,fetcher:p,report:u,resolver:A},E=A.bindDescriptor(n,r.anchoredLocator,h),w=G.convertDescriptorToLocator(E),D=await p.fetch(w,h),b=await _t.find(D.prefixPath,{baseFs:D.packageFs});if(!b.name)throw new Error("Target path doesn't have a name");return G.makeDescriptor(b.name,t)})}async function T2(t,{project:e,workspace:r,cache:o,target:a,fixed:n,modifier:u,strategies:A,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let[h,E]=t.range!=="unknown"?n||Ur.validRange(t.range)||!t.range.match(/^[a-z0-9._-]+$/i)?[t.range,"latest"]:["unknown",t.range]:["unknown","latest"];if(h!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${G.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let w=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,D=[],b=[],C=async T=>{try{await T()}catch(N){b.push(N)}};for(let T of A){if(D.length>=p)break;switch(T){case"keep":await C(async()=>{w&&D.push({descriptor:w,name:`Keep ${G.prettyDescriptor(e.configuration,w)}`,reason:"(no changes)"})});break;case"reuse":await C(async()=>{for(let{descriptor:N,locators:U}of(await xge(t,{project:e,target:a})).values()){if(U.length===1&&U[0].locatorHash===r.anchoredLocator.locatorHash&&A.includes("keep"))continue;let J=`(originally used by ${G.prettyLocator(e.configuration,U[0])}`;J+=U.length>1?` and ${U.length-1} other${U.length>2?"s":""})`:")",D.push({descriptor:N,name:`Reuse ${G.prettyDescriptor(e.configuration,N)}`,reason:J})}});break;case"cache":await C(async()=>{for(let N of e.storedDescriptors.values())N.identHash===t.identHash&&D.push({descriptor:N,name:`Reuse ${G.prettyDescriptor(e.configuration,N)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await C(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let N=e.tryWorkspaceByIdent(t);if(N===null)return;let U=Pge(N,u);D.push({descriptor:U,name:`Attach ${G.prettyDescriptor(e.configuration,U)}`,reason:`(local workspace at ${pe.pretty(e.configuration,N.relativeCwd,pe.Type.PATH)})`})});break;case"latest":{let N=e.configuration.get("enableNetwork"),U=e.configuration.get("enableOfflineMode");await C(async()=>{if(a==="peerDependencies")D.push({descriptor:G.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!N&&!U)D.push({descriptor:null,name:"Resolve from latest",reason:pe.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let J=await uH(t,E,{project:e,cache:o,workspace:r,modifier:u});J&&D.push({descriptor:J,name:`Use ${G.prettyDescriptor(e.configuration,J)}`,reason:`(resolved from ${U?"the cache":"latest"})`})}})}break}}return{suggestions:D.slice(0,p),rejections:b.slice(0,p)}}async function uH(t,e,{project:r,cache:o,workspace:a,preserveModifier:n=!0,modifier:u}){let A=r.configuration.normalizeDependency(G.makeDescriptor(t,e)),p=new Ri,h=r.configuration.makeFetcher(),E=r.configuration.makeResolver(),w={project:r,fetcher:h,cache:o,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},D={...w,resolver:E,fetchOptions:w},b=E.bindDescriptor(A,a.anchoredLocator,D),C=await E.getCandidates(b,{},D);if(C.length===0)return null;let T=C[0],{protocol:N,source:U,params:J,selector:te}=G.parseRange(G.convertToManifestRange(T.reference));if(N===r.configuration.get("defaultProtocol")&&(N=null),aH.default.valid(te)){let le=te;if(typeof u<"u")te=u+te;else if(n!==!1){let Ie=typeof n=="string"?n:A.range;te=Dge(Ie,{project:r})+te}let ce=G.makeDescriptor(T,G.makeRange({protocol:N,source:U,params:J,selector:te}));(await E.getCandidates(r.configuration.normalizeDependency(ce),{},D)).length!==1&&(te=le)}return G.makeDescriptor(T,G.makeRange({protocol:N,source:U,params:J,selector:te}))}async function Kft(t){return await ae.mktempPromise(async e=>{let r=ze.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Wr(e,{configuration:r,check:!1,immutable:!1}))})}var fE=class extends ut{constructor(){super(...arguments);this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.fixed=de.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=de.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=de.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=de.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=de.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=de.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=de.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=de.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=de.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=de.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=de.String("--mode",{description:"Change what artifacts installs generate",validator:js(yl)});this.silent=de.Boolean("--silent",{hidden:!0});this.packages=de.Rest()}static{this.paths=[["add"]]}static{this.usage=ot.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 latter 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/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"],["Add a local package (gzipped tarball format) to the current workspace","$0 add local-package-name@file:../path/to/local-package-name-v0.1.2.tgz"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n=await Wr.find(r);if(!a)throw new or(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=r.isInteractive({interactive:this.interactive,stdout:this.context.stdout}),p=A||r.get("preferReuse"),h=R2(this,o),E=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(U=>typeof U<"u"),w=A?1/0:1,D=await Promise.all(this.packages.map(async U=>{let J=U.match(/^\.{0,2}\//)?await cH(U,{cwd:this.context.cwd,workspace:a}):G.tryParseDescriptor(U),te=U.match(/^(https?:|git@github)/);if(te)throw new it(`It seems you are trying to add a package using a ${pe.pretty(r,`${te[0]}...`,pe.Type.RANGE)} url; we now require package names to be explicitly specified. +Try running the command again with the package name prefixed: ${pe.pretty(r,"yarn add",pe.Type.CODE)} ${pe.pretty(r,G.makeDescriptor(G.makeIdent(null,"my-package"),`${te[0]}...`),pe.Type.DESCRIPTOR)}`);if(!J)throw new it(`The ${pe.pretty(r,U,pe.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let le=Jft(a,J,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(le.map(async ue=>{let Ie=await T2(J,{project:o,workspace:a,cache:n,fixed:u,target:ue,modifier:h,strategies:E,maxResults:w});return{request:J,suggestedDescriptors:Ie,target:ue}}))})).then(U=>U.flat()),b=await pA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async U=>{for(let{request:J,suggestedDescriptors:{suggestions:te,rejections:le}}of D)if(te.filter(ue=>ue.descriptor!==null).length===0){let[ue]=le;if(typeof ue>"u")throw new Error("Assertion failed: Expected an error to have been set");o.configuration.get("enableNetwork")?U.reportError(27,`${G.prettyDescriptor(r,J)} can't be resolved to a satisfying range`):U.reportError(27,`${G.prettyDescriptor(r,J)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),U.reportSeparator(),U.reportExceptionOnce(ue)}});if(b.hasErrors())return b.exitCode();let C=!1,T=[],N=[];for(let{suggestedDescriptors:{suggestions:U},target:J}of D){let te,le=U.filter(he=>he.descriptor!==null),ce=le[0].descriptor,ue=le.every(he=>G.areDescriptorsEqual(he.descriptor,ce));le.length===1||ue?te=ce:(C=!0,{answer:te}=await(0,bge.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:U.map(({descriptor:he,name:De,reason:Ee})=>he?{name:De,hint:Ee,descriptor:he}:{name:De,hint:Ee,disabled:!0}),onCancel:()=>process.exit(130),result(he){return this.find(he,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let Ie=a.manifest[J].get(te.identHash);(typeof Ie>"u"||Ie.descriptorHash!==te.descriptorHash)&&(a.manifest[J].set(te.identHash,te),this.optional&&(J==="dependencies"?a.manifest.ensureDependencyMeta({...te,range:"unknown"}).optional=!0:J==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...te,range:"unknown"}).optional=!0)),typeof Ie>"u"?T.push([a,J,te,E]):N.push([a,J,Ie,te]))}return await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyAddition,T),await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyReplacement,N),C&&this.context.stdout.write(` +`),await o.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};function Jft(t,e,{dev:r,peer:o,preferDev:a,optional:n}){let u=t.manifest.dependencies.has(e.identHash),A=t.manifest.devDependencies.has(e.identHash),p=t.manifest.peerDependencies.has(e.identHash);if((r||o)&&u)throw new it(`Package "${G.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&&!o&&p)throw new it(`Package "${G.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(n&&A)throw new it(`Package "${G.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(n&&!o&&p)throw new it(`Package "${G.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||a)&&n)throw new it(`Package "${G.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return o&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:A?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ve();Ve();Gt();var pE=class extends ut{constructor(){super(...arguments);this.verbose=de.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=de.String({required:!1})}static{this.paths=[["bin"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await Qt.find(r,this.context.cwd);if(await o.restoreInstallState(),this.name){let A=(await hn.getPackageAccessibleBinaries(a,{project:o})).get(this.name);if(!A)throw new it(`Couldn't find a binary named "${this.name}" for package "${G.prettyLocator(r,a)}"`);let[,p]=A;return this.context.stdout.write(`${p} +`),0}return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async u=>{let A=await hn.getPackageAccessibleBinaries(a,{project:o}),h=Array.from(A.keys()).reduce((E,w)=>Math.max(E,w.length),0);for(let[E,[w,D]]of A)u.reportJson({name:E,source:G.stringifyIdent(w),path:D});if(this.verbose)for(let[E,[w]]of A)u.reportInfo(null,`${E.padEnd(h," ")} ${G.prettyLocator(r,w)}`);else for(let E of A.keys())u.reportInfo(null,E)})).exitCode()}};Ve();St();Gt();var hE=class extends ut{constructor(){super(...arguments);this.mirror=de.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=de.Boolean("--all",!1,{description:"Remove both the global cache files and the local cache files of the current project"})}static{this.paths=[["cache","clean"],["cache","clear"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);if(!r.get("enableCacheClean"))throw new it("Cache cleaning is currently disabled. To enable it, set `enableCacheClean: true` in your configuration file. Note: Cache cleaning is typically not required and should be avoided when using Zero-Installs.");let o=await Wr.find(r);return(await Lt.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&o.mirrorCwd!==null,u=!this.mirror;n&&(await ae.removePromise(o.mirrorCwd),await r.triggerHook(A=>A.cleanGlobalArtifacts,r)),u&&await ae.removePromise(o.cwd)})).exitCode()}};Ve();Gt();var Qge=et(L2()),AH=ve("util"),gE=class extends ut{constructor(){super(...arguments);this.why=de.Boolean("--why",!1,{description:"Print the explanation for why a setting has its value"});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=de.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=de.String()}static{this.paths=[["config","get"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),o=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(o)>"u")throw new it(`Couldn't find a configuration settings named "${o}"`);let u=r.getSpecial(o,{hideSecrets:!this.unsafe,getNativePaths:!0}),A=qe.convertMapsToIndexableObjects(u),p=a?(0,Qge.default)(A,a):A,h=await Lt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async E=>{E.reportJson(p)});if(!this.json){if(typeof p=="string")return this.context.stdout.write(`${p} +`),h.exitCode();AH.inspect.styles.name="cyan",this.context.stdout.write(`${(0,AH.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} +`)}return h.exitCode()}};Ve();Gt();var Ide=et(gH()),wde=et(L2()),Bde=et(dH()),mH=ve("util"),dE=class extends ut{constructor(){super(...arguments);this.json=de.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=de.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=de.String();this.value=de.String()}static{this.paths=[["config","set"]]}static{this.usage=ot.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"`]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new it("This setting only affects the file it's in, and thus cannot be set from the CLI");let A=this.json?JSON.parse(this.value):this.value;await(this.home?C=>ze.updateHomeConfiguration(C):C=>ze.updateConfiguration(o(),C))(C=>{if(n){let T=(0,Ide.default)(C);return(0,Bde.default)(T,this.name,A),T}else return{...C,[a]:A}});let E=(await ze.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),w=qe.convertMapsToIndexableObjects(E),D=n?(0,wde.default)(w,n):w;return(await Lt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async C=>{mH.inspect.styles.name="cyan",C.reportInfo(0,`Successfully set ${this.name} to ${(0,mH.inspect)(D,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Ve();Gt();var Tde=et(gH()),Lde=et(Pde()),Nde=et(EH()),mE=class extends ut{constructor(){super(...arguments);this.home=de.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=de.String()}static{this.paths=[["config","unset"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);let A=this.home?h=>ze.updateHomeConfiguration(h):h=>ze.updateConfiguration(o(),h);return(await Lt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let E=!1;await A(w=>{if(!(0,Lde.default)(w,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),E=!0,w;let D=n?(0,Tde.default)(w):{...w};return(0,Nde.default)(D,this.name),D}),E||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Ve();St();Gt();var Wk=ve("util"),yE=class extends ut{constructor(){super(...arguments);this.noDefaults=de.Boolean("--no-defaults",!1,{description:"Omit the default values from the display"});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.verbose=de.Boolean("-v,--verbose",{hidden:!0});this.why=de.Boolean("--why",{hidden:!0});this.names=de.Rest()}static{this.paths=[["config"]]}static{this.usage=ot.Usage({description:"display the current configuration",details:` + This command prints the current active configuration settings. + `,examples:[["Print the active configuration settings","$0 config"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins,{strict:!1}),o=await Qy({configuration:r,stdout:this.context.stdout,forceError:this.json},[{option:this.verbose,message:"The --verbose option is deprecated, the settings' descriptions are now always displayed"},{option:this.why,message:"The --why option is deprecated, the settings' sources are now always displayed"}]);if(o!==null)return o;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,u=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async A=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)A.reportError(34,`Invalid configuration key "${p}" in ${h}`);A.reportSeparator()}if(this.json)for(let p of a){let h=r.settings.get(p);typeof h>"u"&&A.reportError(34,`No configuration key named "${p}"`);let E=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),w=r.sources.get(p)??"",D=w&&w[0]!=="<"?Ae.fromPortablePath(w):w;A.reportJson({key:p,effective:E,source:D,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},E={children:h};for(let w of a){if(this.noDefaults&&!r.sources.has(w))continue;let D=r.settings.get(w),b=r.sources.get(w)??"",C=r.getSpecial(w,{hideSecrets:!0,getNativePaths:!0}),T={Description:{label:"Description",value:pe.tuple(pe.Type.MARKDOWN,{text:D.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:pe.tuple(b[0]==="<"?pe.Type.CODE:pe.Type.PATH,b)}};h[w]={value:pe.tuple(pe.Type.CODE,w),children:T};let N=(U,J)=>{for(let[te,le]of J)if(le instanceof Map){let ce={};U[te]={children:ce},N(ce,le)}else U[te]={label:te,value:pe.tuple(pe.Type.NO_HINT,(0,Wk.inspect)(le,p))}};C instanceof Map?N(T,C):T.Value={label:"Value",value:pe.tuple(pe.Type.NO_HINT,(0,Wk.inspect)(C,p))}}a.length!==1&&(n=void 0),As.emitTree(E,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let A=a[0],p=(0,Wk.inspect)(r.getSpecial(A,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` +`),this.context.stdout.write(`${p} +`)}return u.exitCode()}};Ve();Gt();il();var Yk={};Vt(Yk,{Strategy:()=>N2,acceptedStrategies:()=>Q0t,dedupe:()=>CH});Ve();Ve();var Ode=et(Xo()),N2=(e=>(e.HIGHEST="highest",e))(N2||{}),Q0t=new Set(Object.values(N2)),F0t={highest:async(t,e,{resolver:r,fetcher:o,resolveOptions:a,fetchOptions:n})=>{let u=new Map;for(let[p,h]of t.storedResolutions){let E=t.storedDescriptors.get(p);if(typeof E>"u")throw new Error(`Assertion failed: The descriptor (${p}) should have been registered`);qe.getSetWithDefault(u,E.identHash).add(h)}let A=new Map(qe.mapAndFilter(t.storedDescriptors.values(),p=>G.isVirtualDescriptor(p)?qe.mapAndFilter.skip:[p.descriptorHash,qe.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=A.get(p.descriptorHash);if(typeof h>"u")throw new Error(`Assertion failed: The descriptor (${p.descriptorHash}) should have been registered`);let E=t.storedResolutions.get(p.descriptorHash);if(typeof E>"u")throw new Error(`Assertion failed: The resolution (${p.descriptorHash}) should have been registered`);let w=t.originalPackages.get(E);if(typeof w>"u")throw new Error(`Assertion failed: The package (${E}) should have been registered`);Promise.resolve().then(async()=>{let D=r.getResolutionDependencies(p,a),b=Object.fromEntries(await qe.allSettledSafe(Object.entries(D).map(async([te,le])=>{let ce=A.get(le.descriptorHash);if(typeof ce>"u")throw new Error(`Assertion failed: The descriptor (${le.descriptorHash}) should have been registered`);let ue=await ce.promise;if(!ue)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[te,ue.updatedPackage]})));if(e.length&&!Ode.default.isMatch(G.stringifyIdent(p),e)||!r.shouldPersistResolution(w,a))return w;let C=u.get(p.identHash);if(typeof C>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(C.size===1)return w;let T=[...C].map(te=>{let le=t.originalPackages.get(te);if(typeof le>"u")throw new Error(`Assertion failed: The package (${te}) should have been registered`);return le}),N=await r.getSatisfying(p,b,T,a),U=N.locators?.[0];if(typeof U>"u"||!N.sorted)return w;let J=t.originalPackages.get(U.locatorHash);if(typeof J>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return J}).then(async D=>{let b=await t.preparePackage(D,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:w,updatedPackage:D,resolvedPackage:b})}).catch(D=>{h.reject(D)})}return[...A.values()].map(p=>p.promise)}};async function CH(t,{strategy:e,patterns:r,cache:o,report:a}){let{configuration:n}=t,u=new Ri,A=n.makeResolver(),p=n.makeFetcher(),h={cache:o,checksums:t.storedChecksums,fetcher:p,project:t,report:u,cacheOptions:{skipIntegrityCheck:!0}},E={project:t,resolver:A,report:u,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let w=F0t[e],D=await w(t,r,{resolver:A,resolveOptions:E,fetcher:p,fetchOptions:h}),b=Ws.progressViaCounter(D.length);await a.reportProgress(b);let C=0;await Promise.all(D.map(U=>U.then(J=>{if(J===null||J.currentPackage.locatorHash===J.updatedPackage.locatorHash)return;C++;let{descriptor:te,currentPackage:le,updatedPackage:ce}=J;a.reportInfo(0,`${G.prettyDescriptor(n,te)} can be deduped from ${G.prettyLocator(n,le)} to ${G.prettyLocator(n,ce)}`),a.reportJson({descriptor:G.stringifyDescriptor(te),currentResolution:G.stringifyLocator(le),updatedResolution:G.stringifyLocator(ce)}),t.storedResolutions.set(te.descriptorHash,ce.locatorHash)}).finally(()=>b.tick())));let T;switch(C){case 0:T="No packages";break;case 1:T="One package";break;default:T=`${C} packages`}let N=pe.pretty(n,e,pe.Type.CODE);return a.reportInfo(0,`${T} can be deduped using the ${N} strategy`),C})}var EE=class extends ut{constructor(){super(...arguments);this.strategy=de.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:js(N2)});this.check=de.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=de.String("--mode",{description:"Change what artifacts installs generate",validator:js(yl)});this.patterns=de.Rest()}static{this.paths=[["dedupe"]]}static{this.usage=ot.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 latter 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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o}=await Qt.find(r,this.context.cwd),a=await Wr.find(r);await o.restoreInstallState({restoreResolutions:!1});let n=0,u=await Lt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async A=>{n=await CH(o,{strategy:this.strategy,patterns:this.patterns,cache:a,report:A})});return u.hasErrors()?u.exitCode():this.check?n?1:0:await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Ve();Gt();var CE=class extends ut{static{this.paths=[["--clipanion=definitions"]]}async execute(){let{plugins:e}=await ze.find(this.context.cwd,this.context.plugins),r=[];for(let u of e){let{commands:A}=u[1];if(A){let h=Ko.from(A).definitions();r.push([u[0],h])}}let o=this.cli.definitions(),a=(u,A)=>u.split(" ").slice(1).join()===A.split(" ").slice(1).join(),n=Mde()["@yarnpkg/builder"].bundles.standard;for(let u of r){let A=u[1];for(let p of A)o.find(h=>a(h.path,p.path)).plugin={name:u[0],isDefault:n.includes(u[0])}}this.context.stdout.write(`${JSON.stringify(o,null,2)} +`)}};var IE=class extends ut{static{this.paths=[["help"],["--help"],["-h"]]}async execute(){this.context.stdout.write(this.cli.usage(null))}};Ve();St();Gt();var wE=class extends ut{constructor(){super(...arguments);this.leadingArgument=de.String();this.args=de.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!G.tryParseIdent(this.leadingArgument)){let r=V.resolve(this.context.cwd,Ae.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ve();var BE=class extends ut{static{this.paths=[["-v"],["--version"]]}async execute(){this.context.stdout.write(`${nn||""} +`)}};Ve();Ve();Gt();var vE=class extends ut{constructor(){super(...arguments);this.commandName=de.String();this.args=de.Proxy()}static{this.paths=[["exec"]]}static{this.usage=ot.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"']]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await Qt.find(r,this.context.cwd);return await o.restoreInstallState(),await hn.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:o})}};Ve();Gt();il();var DE=class extends ut{constructor(){super(...arguments);this.hash=de.String({required:!1,validator:NS(Pm(),[Bw(/^p[0-9a-f]{5}$/)])})}static{this.paths=[["explain","peer-requirements"]]}static{this.usage=ot.Usage({description:"explain a set of peer requirements",details:` + A peer requirement represents all peer requests that a subject must satisfy when providing a requested package to requesters. + + When the hash argument is specified, this command prints a detailed explanation of the peer requirement corresponding to the hash and whether it is satisfied or not. + + When used without arguments, this command lists all peer requirements and the corresponding hash that can be used to get detailed information about a given requirement. + + **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 peer requirement for a hash","$0 explain peer-requirements p1a4ed"],["List all peer requirements","$0 explain peer-requirements"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o}=await Qt.find(r,this.context.cwd);return await o.restoreInstallState({restoreResolutions:!1}),await o.applyLightResolution(),typeof this.hash<"u"?await T0t(this.hash,o,{stdout:this.context.stdout}):await L0t(o,{stdout:this.context.stdout})}};async function T0t(t,e,r){let o=e.peerRequirementNodes.get(t);if(typeof o>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);let a=new Set,n=p=>a.has(p.requester.locatorHash)?{value:pe.tuple(pe.Type.DEPENDENT,{locator:p.requester,descriptor:p.descriptor}),children:p.children.size>0?[{value:pe.tuple(pe.Type.NO_HINT,"...")}]:[]}:(a.add(p.requester.locatorHash),{value:pe.tuple(pe.Type.DEPENDENT,{locator:p.requester,descriptor:p.descriptor}),children:Object.fromEntries(Array.from(p.children.values(),h=>[G.stringifyLocator(h.requester),n(h)]))}),u=e.peerWarnings.find(p=>p.hash===t);return(await Lt.start({configuration:e.configuration,stdout:r.stdout,includeFooter:!1,includePrefix:!1},async p=>{let h=pe.mark(e.configuration),E=u?h.Cross:h.Check;if(p.reportInfo(0,`Package ${pe.pretty(e.configuration,o.subject,pe.Type.LOCATOR)} is requested to provide ${pe.pretty(e.configuration,o.ident,pe.Type.IDENT)} by its descendants`),p.reportSeparator(),p.reportInfo(0,pe.pretty(e.configuration,o.subject,pe.Type.LOCATOR)),As.emitTree({children:Object.fromEntries(Array.from(o.requests.values(),w=>[G.stringifyLocator(w.requester),n(w)]))},{configuration:e.configuration,stdout:r.stdout,json:!1}),p.reportSeparator(),o.provided.range==="missing:"){let w=u?"":" , but all peer requests are optional";p.reportInfo(0,`${E} Package ${pe.pretty(e.configuration,o.subject,pe.Type.LOCATOR)} does not provide ${pe.pretty(e.configuration,o.ident,pe.Type.IDENT)}${w}.`)}else{let w=e.storedResolutions.get(o.provided.descriptorHash);if(!w)throw new Error("Assertion failed: Expected the descriptor to be registered");let D=e.storedPackages.get(w);if(!D)throw new Error("Assertion failed: Expected the package to be registered");p.reportInfo(0,`${E} Package ${pe.pretty(e.configuration,o.subject,pe.Type.LOCATOR)} provides ${pe.pretty(e.configuration,o.ident,pe.Type.IDENT)} with version ${G.prettyReference(e.configuration,D.version??"0.0.0")}, ${u?"which does not satisfy all requests.":"which satisfies all requests"}`),u?.type===3&&(u.range?p.reportInfo(0,` The combined requested range is ${pe.pretty(e.configuration,u.range,pe.Type.RANGE)}`):p.reportInfo(0," Unfortunately, the requested ranges have no overlap"))}})).exitCode()}async function L0t(t,e){return(await Lt.start({configuration:t.configuration,stdout:e.stdout,includeFooter:!1,includePrefix:!1},async o=>{let a=pe.mark(t.configuration),n=qe.sortMap(t.peerRequirementNodes,[([,u])=>G.stringifyLocator(u.subject),([,u])=>G.stringifyIdent(u.ident)]);for(let[,u]of n.values()){if(!u.root)continue;let A=t.peerWarnings.find(E=>E.hash===u.hash),p=[...G.allPeerRequests(u)],h;if(p.length>2?h=` and ${p.length-1} other dependencies`:p.length===2?h=" and 1 other dependency":h="",u.provided.range!=="missing:"){let E=t.storedResolutions.get(u.provided.descriptorHash);if(!E)throw new Error("Assertion failed: Expected the resolution to have been registered");let w=t.storedPackages.get(E);if(!w)throw new Error("Assertion failed: Expected the provided package to have been registered");let D=`${pe.pretty(t.configuration,u.hash,pe.Type.CODE)} \u2192 ${A?a.Cross:a.Check} ${G.prettyLocator(t.configuration,u.subject)} provides ${G.prettyLocator(t.configuration,w)} to ${G.prettyLocator(t.configuration,p[0].requester)}${h}`;A?o.reportWarning(0,D):o.reportInfo(0,D)}else{let E=`${pe.pretty(t.configuration,u.hash,pe.Type.CODE)} \u2192 ${A?a.Cross:a.Check} ${G.prettyLocator(t.configuration,u.subject)} doesn't provide ${G.prettyIdent(t.configuration,u.ident)} to ${G.prettyLocator(t.configuration,p[0].requester)}${h}`;A?o.reportWarning(0,E):o.reportInfo(0,E)}}})).exitCode()}Ve();Gt();il();Ve();Ve();St();Gt();var Ude=et(ni()),SE=class extends ut{constructor(){super(...arguments);this.useYarnPath=de.Boolean("--yarn-path",{description:"Set the yarnPath setting even if the version can be accessed by Corepack"});this.onlyIfNeeded=de.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=de.String()}static{this.paths=[["set","version"]]}static{this.usage=ot.Usage({description:"lock the Yarn version used by the project",details:"\n This command will set a specific release of Yarn to be used by Corepack: https://nodejs.org/api/corepack.html.\n\n By default it only will set the `packageManager` field at the root of your project, but if the referenced release cannot be represented this way, if you already have `yarnPath` configured, or if you set the `--yarn-path` command line flag, then the release will also be downloaded from the Yarn GitHub repository, stored inside your project, and referenced via the `yarnPath` settings from your project `.yarnrc.yml` file.\n\n A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over 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 different behavior.\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"],["Use a release from a URL","$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js"],["Download the version used to invoke the command","$0 set version self"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&r.get("yarnPath")){let A=r.sources.get("yarnPath");if(!A)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(V.contains(p,A))return 0}let o=()=>{if(typeof nn>"u")throw new it("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(A,p)=>({version:p,url:A.replace(/\{\}/g,p)});if(this.version==="self")a={url:o(),version:nn??"self"};else if(this.version==="latest"||this.version==="berry"||this.version==="stable")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await O2(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await O2(r,"canary"));else if(this.version==="classic")a={url:"https://classic.yarnpkg.com/latest.js",version:"classic"};else if(this.version.match(/^https?:/))a={url:this.version,version:"remote"};else if(this.version.match(/^\.{0,2}[\\/]/)||Ae.isAbsolute(this.version))a={url:`file://${V.resolve(Ae.toPortablePath(this.version))}`,version:"file"};else if(Ur.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(Ur.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(Ur.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await N0t(r,this.version));else throw new it(`Invalid version descriptor "${this.version}"`);return(await Lt.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async A=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(A.reportInfo(0,`Retrieving ${pe.pretty(r,a.url,pe.Type.PATH)}`),await ae.readFilePromise(a.url.slice(h.length))):(A.reportInfo(0,`Downloading ${pe.pretty(r,a.url,pe.Type.URL)}`),await on.get(a.url,{configuration:r}))};await IH(r,a.version,p,{report:A,useYarnPath:this.useYarnPath})})).exitCode()}};async function N0t(t,e){let o=(await on.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>Ur.satisfiesWithPrereleases(a,e));if(o.length===0)throw new it(`No matching release found for range ${pe.pretty(t,e,pe.Type.RANGE)}.`);return o[0]}async function O2(t,e){let r=await on.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new it(`Tag ${pe.pretty(t,e,pe.Type.RANGE)} not found`);return r.latest[e]}async function IH(t,e,r,{report:o,useYarnPath:a}){let n,u=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let te=await u();await ae.mktempPromise(async le=>{let ce=V.join(le,"yarn.cjs");await ae.writeFilePromise(ce,te);let{stdout:ue}=await Hr.execvp(process.execPath,[Ae.fromPortablePath(ce),"--version"],{cwd:le,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=ue.trim(),!Ude.default.valid(e))throw new Error(`Invalid semver version. ${pe.pretty(t,"yarn --version",pe.Type.CODE)} returned: +${e}`)})}let A=t.projectCwd??t.startingCwd,p=V.resolve(A,".yarn/releases"),h=V.resolve(p,`yarn-${e}.cjs`),E=V.relative(t.startingCwd,h),w=qe.isTaggedYarnVersion(e),D=t.get("yarnPath"),b=!w,C=b||!!D||!!a;if(a===!1){if(b)throw new Jt(0,"You explicitly opted out of yarnPath usage in your command line, but the version you specified cannot be represented by Corepack");C=!1}else!C&&!process.env.COREPACK_ROOT&&(o.reportWarning(0,`You don't seem to have ${pe.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${pe.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),C=!0);if(C){let te=await u();o.reportInfo(0,`Saving the new release in ${pe.pretty(t,E,"magenta")}`),await ae.removePromise(V.dirname(h)),await ae.mkdirPromise(V.dirname(h),{recursive:!0}),await ae.writeFilePromise(h,te,{mode:493}),await ze.updateConfiguration(A,{yarnPath:V.relative(A,h)})}else await ae.removePromise(V.dirname(h)),await ze.updateConfiguration(A,{yarnPath:ze.deleteProperty});let T=await _t.tryFind(A)||new _t;T.packageManager=`yarn@${w?e:await O2(t,"stable")}`;let N={};T.exportTo(N);let U=V.join(A,_t.fileName),J=`${JSON.stringify(N,null,T.indent)} +`;return await ae.changeFilePromise(U,J,{automaticNewlines:!0}),{bundleVersion:e}}function _de(t){return vr[jS(t)]}var O0t=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?
(?:.(?!##))+)/gs;async function M0t(t){let r=`https://repo.yarnpkg.com/${qe.isTaggedYarnVersion(nn)?nn:await O2(t,"canary")}/packages/docusaurus/docs/advanced/01-general-reference/error-codes.mdx`,o=await on.get(r,{configuration:t});return new Map(Array.from(o.toString().matchAll(O0t),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=_de(a.code);if(a.name!==n)throw new Error(`Assertion failed: Invalid error code data: Expected "${a.name}" to be named "${n}"`);return[a.code,a.details]}))}var PE=class extends ut{constructor(){super(...arguments);this.code=de.String({required:!1,validator:vw(Pm(),[Bw(/^YN[0-9]{4}$/)])});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["explain"]]}static{this.usage=ot.Usage({description:"explain an error code",details:` + When the code argument is specified, this command prints its name and its details. + + When used without arguments, this command lists all error codes and their names. + `,examples:[["Explain an error code","$0 explain YN0006"],["List all error codes","$0 explain"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);if(typeof this.code<"u"){let o=_de(this.code),a=pe.pretty(r,o,pe.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),A=(await M0t(r)).get(this.code),p=typeof A<"u"?pe.jsonOrPretty(this.json,r,pe.tuple(pe.Type.MARKDOWN,{text:A,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description. + +You can help us by editing this page on GitHub \u{1F642}: +${pe.jsonOrPretty(this.json,r,pe.tuple(pe.Type.URL,"https://github.com/yarnpkg/berry/blob/master/packages/docusaurus/docs/advanced/01-general-reference/error-codes.mdx"))} +`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:o,details:p})} +`):this.context.stdout.write(`${n} + +${p} +`)}else{let o={children:qe.mapAndFilter(Object.entries(vr),([a,n])=>Number.isNaN(Number(a))?qe.mapAndFilter.skip:{label:Ju(Number(a)),value:pe.tuple(pe.Type.CODE,n)})};As.emitTree(o,{configuration:r,stdout:this.context.stdout,json:this.json})}}};Ve();St();Gt();var Hde=et(Xo()),xE=class extends ut{constructor(){super(...arguments);this.all=de.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=de.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=de.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=de.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=de.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=de.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=de.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=de.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=de.Rest()}static{this.paths=[["info"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n=await Wr.find(r);if(!a&&!this.all)throw new or(o.cwd,this.context.cwd);await o.restoreInstallState();let u=new Set(this.extra);this.cache&&u.add("cache"),this.dependents&&u.add("dependents"),this.manifest&&u.add("manifest");let A=(le,{recursive:ce})=>{let ue=le.anchoredLocator.locatorHash,Ie=new Map,he=[ue];for(;he.length>0;){let De=he.shift();if(Ie.has(De))continue;let Ee=o.storedPackages.get(De);if(typeof Ee>"u")throw new Error("Assertion failed: Expected the package to be registered");if(Ie.set(De,Ee),G.isVirtualLocator(Ee)&&he.push(G.devirtualizeLocator(Ee).locatorHash),!(!ce&&De!==ue))for(let g of Ee.dependencies.values()){let me=o.storedResolutions.get(g.descriptorHash);if(typeof me>"u")throw new Error("Assertion failed: Expected the resolution to be registered");he.push(me)}}return Ie.values()},p=({recursive:le})=>{let ce=new Map;for(let ue of o.workspaces)for(let Ie of A(ue,{recursive:le}))ce.set(Ie.locatorHash,Ie);return ce.values()},h=({all:le,recursive:ce})=>le&&ce?o.storedPackages.values():le?p({recursive:ce}):A(a,{recursive:ce}),E=({all:le,recursive:ce})=>{let ue=h({all:le,recursive:ce}),Ie=this.patterns.map(Ee=>{let g=G.parseLocator(Ee),me=Hde.default.makeRe(G.stringifyIdent(g)),Ce=G.isVirtualLocator(g),fe=Ce?G.devirtualizeLocator(g):g;return ie=>{let Z=G.stringifyIdent(ie);if(!me.test(Z))return!1;if(g.reference==="unknown")return!0;let Se=G.isVirtualLocator(ie),Re=Se?G.devirtualizeLocator(ie):ie;return!(Ce&&Se&&g.reference!==ie.reference||fe.reference!==Re.reference)}}),he=qe.sortMap([...ue],Ee=>G.stringifyLocator(Ee));return{selection:he.filter(Ee=>Ie.length===0||Ie.some(g=>g(Ee))),sortedLookup:he}},{selection:w,sortedLookup:D}=E({all:this.all,recursive:this.recursive});if(w.length===0)throw new it("No package matched your request");let b=new Map;if(this.dependents)for(let le of D)for(let ce of le.dependencies.values()){let ue=o.storedResolutions.get(ce.descriptorHash);if(typeof ue>"u")throw new Error("Assertion failed: Expected the resolution to be registered");qe.getArrayWithDefault(b,ue).push(le)}let C=new Map;for(let le of D){if(!G.isVirtualLocator(le))continue;let ce=G.devirtualizeLocator(le);qe.getArrayWithDefault(C,ce.locatorHash).push(le)}let T={},N={children:T},U=r.makeFetcher(),J={project:o,fetcher:U,cache:n,checksums:o.storedChecksums,report:new Ri,cacheOptions:{skipIntegrityCheck:!0}},te=[async(le,ce,ue)=>{if(!ce.has("manifest"))return;let Ie=await U.fetch(le,J),he;try{he=await _t.find(Ie.prefixPath,{baseFs:Ie.packageFs})}finally{Ie.releaseFs?.()}ue("Manifest",{License:pe.tuple(pe.Type.NO_HINT,he.license),Homepage:pe.tuple(pe.Type.URL,he.raw.homepage??null)})},async(le,ce,ue)=>{if(!ce.has("cache"))return;let Ie=o.storedChecksums.get(le.locatorHash)??null,he=n.getLocatorPath(le,Ie),De;if(he!==null)try{De=await ae.statPromise(he)}catch{}let Ee=typeof De<"u"?[De.size,pe.Type.SIZE]:void 0;ue("Cache",{Checksum:pe.tuple(pe.Type.NO_HINT,Ie),Path:pe.tuple(pe.Type.PATH,he),Size:Ee})}];for(let le of w){let ce=G.isVirtualLocator(le);if(!this.virtuals&&ce)continue;let ue={},Ie={value:[le,pe.Type.LOCATOR],children:ue};if(T[G.stringifyLocator(le)]=Ie,this.nameOnly){delete Ie.children;continue}let he=C.get(le.locatorHash);typeof he<"u"&&(ue.Instances={label:"Instances",value:pe.tuple(pe.Type.NUMBER,he.length)}),ue.Version={label:"Version",value:pe.tuple(pe.Type.NO_HINT,le.version)};let De=(g,me)=>{let Ce={};if(ue[g]=Ce,Array.isArray(me))Ce.children=me.map(fe=>({value:fe}));else{let fe={};Ce.children=fe;for(let[ie,Z]of Object.entries(me))typeof Z>"u"||(fe[ie]={label:ie,value:Z})}};if(!ce){for(let g of te)await g(le,u,De);await r.triggerHook(g=>g.fetchPackageInfo,le,u,De)}le.bin.size>0&&!ce&&De("Exported Binaries",[...le.bin.keys()].map(g=>pe.tuple(pe.Type.PATH,g)));let Ee=b.get(le.locatorHash);typeof Ee<"u"&&Ee.length>0&&De("Dependents",Ee.map(g=>pe.tuple(pe.Type.LOCATOR,g))),le.dependencies.size>0&&!ce&&De("Dependencies",[...le.dependencies.values()].map(g=>{let me=o.storedResolutions.get(g.descriptorHash),Ce=typeof me<"u"?o.storedPackages.get(me)??null:null;return pe.tuple(pe.Type.RESOLUTION,{descriptor:g,locator:Ce})})),le.peerDependencies.size>0&&ce&&De("Peer dependencies",[...le.peerDependencies.values()].map(g=>{let me=le.dependencies.get(g.identHash),Ce=typeof me<"u"?o.storedResolutions.get(me.descriptorHash)??null:null,fe=Ce!==null?o.storedPackages.get(Ce)??null:null;return pe.tuple(pe.Type.RESOLUTION,{descriptor:g,locator:fe})}))}As.emitTree(N,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Ve();St();Ol();var Vk=et(sg());Gt();var wH=et(ni());il();var U0t=[{selector:t=>t===-1,name:"nodeLinker",value:"node-modules"},{selector:t=>t!==-1&&t<8,name:"enableGlobalCache",value:!1},{selector:t=>t!==-1&&t<8,name:"compressionLevel",value:"mixed"}],bE=class extends ut{constructor(){super(...arguments);this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=de.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=de.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.refreshLockfile=de.Boolean("--refresh-lockfile",{description:"Refresh the package metadata stored in the lockfile"});this.checkCache=de.Boolean("--check-cache",{description:"Always refetch the packages and ensure that their checksums are consistent"});this.checkResolutions=de.Boolean("--check-resolutions",{description:"Validates that the package resolutions are coherent"});this.inlineBuilds=de.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=de.String("--mode",{description:"Change what artifacts installs generate",validator:js(yl)});this.cacheFolder=de.String("--cache-folder",{hidden:!0});this.frozenLockfile=de.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=de.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=de.Boolean("--non-interactive",{hidden:!0});this.preferOffline=de.Boolean("--prefer-offline",{hidden:!0});this.production=de.Boolean("--production",{hidden:!0});this.registry=de.String("--registry",{hidden:!0});this.silent=de.Boolean("--silent",{hidden:!0});this.networkTimeout=de.String("--network-timeout",{hidden:!0})}static{this.paths=[["install"],ot.Default]}static{this.usage=ot.Usage({description:"install the project dependencies",details:"\n This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n - **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: ).\n\n - **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).\n\n - **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).\n\n - **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.\n\n 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.\n\n 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.\n\n 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).\n\n If the `--refresh-lockfile` option is set, Yarn will keep the same resolution for the packages currently in the lockfile but will refresh their metadata. If used together with `--immutable`, it can validate that the lockfile information are consistent. This flag is enabled by default when Yarn detects it runs within a pull request context.\n\n 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.\n\n 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.\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 latter 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 ",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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<"u"&&r.useWithSource("",{enableInlineBuilds:this.inlineBuilds},r.startingCwd,{overwrite:!0});let o=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await Qy({configuration:r,stdout:this.context.stdout},[{option:this.ignoreEngines,message:"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",error:!Vk.default.VERCEL},{option:this.registry,message:"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file"},{option:this.preferOffline,message:"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",error:!Vk.default.VERCEL},{option:this.production,message:"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",error:!0},{option:this.nonInteractive,message:"The --non-interactive option is deprecated",error:!o},{option:this.frozenLockfile,message:"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",callback:()=>this.immutable=this.frozenLockfile},{option:this.cacheFolder,message:"The cache-folder option has been deprecated; use rc settings instead",error:!Vk.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new it(`${pe.pretty(r,"--immutable",pe.Type.CODE)} and ${pe.pretty(r,"--immutable-cache",pe.Type.CODE)} cannot be used with ${pe.pretty(r,"--mode=update-lockfile",pe.Type.CODE)}`);let u=(this.immutable??r.get("enableImmutableInstalls"))&&!n,A=this.immutableCache&&!n;if(r.projectCwd!==null){let T=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{let U=!1;await q0t(r,u)&&(N.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),U=!0),await H0t(r,u)&&(N.reportInfo(48,"Automatically fixed merge conflicts \u{1F44D}"),U=!0),U&&N.reportSeparator()});if(T.hasErrors())return T.exitCode()}if(r.projectCwd!==null){let T=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{if(ze.telemetry?.isNew)ze.telemetry.commitTips(),N.reportInfo(65,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),N.reportInfo(65,`Run ${pe.pretty(r,"yarn config set --home enableTelemetry 0",pe.Type.CODE)} to disable`),N.reportSeparator();else if(ze.telemetry?.shouldShowTips){let U=await on.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(U!==null){let J=null;if(nn!==null){let le=wH.default.prerelease(nn)?"canary":"stable",ce=U.latest[le];wH.default.gt(ce,nn)&&(J=[le,ce])}if(J)ze.telemetry.commitTips(),N.reportInfo(88,`${pe.applyStyle(r,`A new ${J[0]} version of Yarn is available:`,pe.Style.BOLD)} ${G.prettyReference(r,J[1])}!`),N.reportInfo(88,`Upgrade now by running ${pe.pretty(r,`yarn set version ${J[1]}`,pe.Type.CODE)}`),N.reportSeparator();else{let te=ze.telemetry.selectTip(U.tips);te&&(N.reportInfo(89,pe.pretty(r,te.message,pe.Type.MARKDOWN_INLINE)),te.url&&N.reportInfo(89,`Learn more at ${te.url}`),N.reportSeparator())}}}});if(T.hasErrors())return T.exitCode()}let{project:p,workspace:h}=await Qt.find(r,this.context.cwd),E=p.lockfileLastVersion;if(E!==null){let T=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async N=>{let U={};for(let J of U0t)J.selector(E)&&typeof r.sources.get(J.name)>"u"&&(r.use("",{[J.name]:J.value},p.cwd,{overwrite:!0}),U[J.name]=J.value);Object.keys(U).length>0&&(await ze.updateConfiguration(p.cwd,U),N.reportInfo(87,"Migrated your project to the latest Yarn version \u{1F680}"),N.reportSeparator())});if(T.hasErrors())return T.exitCode()}let w=await Wr.find(r,{immutable:A,check:this.checkCache});if(!h)throw new or(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let D=r.get("enableHardenedMode");D&&typeof r.sources.get("enableHardenedMode")>"u"&&await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async T=>{T.reportWarning(0,"Yarn detected that the current workflow is executed from a public pull request. For safety the hardened mode has been enabled."),T.reportWarning(0,`It will prevent malicious lockfile manipulations, in exchange for a slower install time. You can opt-out if necessary; check our ${pe.applyHyperlink(r,"documentation","https://yarnpkg.com/features/security#hardened-mode")} for more details.`),T.reportSeparator()}),(this.refreshLockfile??D)&&(p.lockfileNeedsRefresh=!0);let b=this.checkResolutions??D;return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout,forceSectionAlignment:!0,includeLogs:!0,includeVersion:!0},async T=>{await p.install({cache:w,report:T,immutable:u,checkResolutions:b,mode:this.mode})})).exitCode()}},_0t="<<<<<<<";async function H0t(t,e){if(!t.projectCwd)return!1;let r=V.join(t.projectCwd,mr.lockfile);if(!await ae.existsPromise(r)||!(await ae.readFilePromise(r,"utf8")).includes(_0t))return!1;if(e)throw new Jt(47,"Cannot autofix a lockfile when running an immutable install");let a=await Hr.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await Hr.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await Hr.execvp("git",["rev-parse","CHERRY_PICK_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0)throw new Jt(83,"Git returned an error when trying to find the commits pertaining to the conflict");let n=await Promise.all(a.stdout.trim().split(/\n/).map(async A=>{let p=await Hr.execvp("git",["show",`${A}:./${mr.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new Jt(83,`Git returned an error when trying to access the lockfile content in ${A}`);try{return Vi(p.stdout)}catch{throw new Jt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(A=>!!A.__metadata);for(let A of n){if(A.__metadata.version<7)for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=G.parseDescriptor(p,!0),E=t.normalizeDependency(h),w=G.stringifyDescriptor(E);w!==p&&(A[w]=A[p],delete A[p])}for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=A[p].checksum;typeof h>"u"||h.includes("/")||(A[p].checksum=`${A.__metadata.cacheKey}/${h}`)}}let u=Object.assign({},...n);u.__metadata.version=`${Math.min(...n.map(A=>parseInt(A.__metadata.version??0)))}`,u.__metadata.cacheKey="merged";for(let[A,p]of Object.entries(u))typeof p=="string"&&delete u[A];return await ae.changeFilePromise(r,Sa(u),{automaticNewlines:!0}),!0}async function q0t(t,e){if(!t.projectCwd)return!1;let r=[],o=V.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await ze.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let u=n.filter(A=>{if(!A.path)return!0;let p=V.resolve(t.projectCwd,A.path),h=j1.has(A.spec)&&V.contains(o,p);return h&&r.push(p),!h});return u.length===0?ze.deleteProperty:u.length===n.length?n:u}},{immutable:e})?(await Promise.all(r.map(async n=>{await ae.removePromise(n)})),!0):!1}Ve();St();Gt();var kE=class extends ut{constructor(){super(...arguments);this.all=de.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target projects to the current one"});this.private=de.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target projects to the current one"});this.relative=de.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destinations=de.Rest()}static{this.paths=[["link"]]}static{this.usage=ot.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 one or more remote workspaces for use in the current project","$0 link ~/ts-loader ~/jest"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n=await Wr.find(r);if(!a)throw new or(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=o.topLevelWorkspace,A=[];for(let p of this.destinations){let h=V.resolve(this.context.cwd,Ae.toPortablePath(p)),E=await ze.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:w,workspace:D}=await Qt.find(E,h);if(o.cwd===w.cwd)throw new it(`Invalid destination '${p}'; Can't link the project to itself`);if(!D)throw new or(w.cwd,h);if(this.all){let b=!1;for(let C of w.workspaces)C.manifest.name&&(!C.manifest.private||this.private)&&(A.push(C),b=!0);if(!b)throw new it(`No workspace found to be linked in the target project: ${p}`)}else{if(!D.manifest.name)throw new it(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(D.manifest.private&&!this.private)throw new it(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);A.push(D)}}for(let p of A){let h=G.stringifyIdent(p.anchoredLocator),E=this.relative?V.relative(o.cwd,p.cwd):p.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${E}`})}return await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};Gt();var QE=class extends ut{constructor(){super(...arguments);this.args=de.Proxy()}static{this.paths=[["node"]]}static{this.usage=ot.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"]]})}async execute(){return this.cli.run(["exec","node",...this.args])}};Ve();Gt();var FE=class extends ut{constructor(){super(...arguments);this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["plugin","check"]]}static{this.usage=ot.Usage({category:"Plugin-related commands",description:"find all third-party plugins that differ from their own spec",details:` + Check only the plugins from https. + + If this command detects any plugin differences in the CI environment, it will throw an error. + `,examples:[["find all third-party plugins that differ from their own spec","$0 plugin check"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),o=await ze.findRcFiles(this.context.cwd);return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let u of o)if(u.data?.plugins)for(let A of u.data.plugins){if(!A.checksum||!A.spec.match(/^https?:/))continue;let p=await on.get(A.spec,{configuration:r}),h=bn.makeHash(p);if(A.checksum===h)continue;let E=pe.pretty(r,A.path,pe.Type.PATH),w=pe.pretty(r,A.spec,pe.Type.URL),D=`${E} is different from the file provided by ${w}`;n.reportJson({...A,newChecksum:h}),n.reportError(0,D)}})).exitCode()}};Ve();Ve();St();Gt();var Yde=ve("os");Ve();St();Gt();var qde=ve("os");Ve();Ol();Gt();var j0t="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function Jg(t,e){let r=await on.get(j0t,{configuration:t}),o=Vi(r.toString());return Object.fromEntries(Object.entries(o).filter(([a,n])=>!e||Ur.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var RE=class extends ut{constructor(){super(...arguments);this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["plugin","list"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await Jg(r,nn);for(let[u,{experimental:A,...p}]of Object.entries(n)){let h=u;A&&(h+=" [experimental]"),a.reportJson({name:u,experimental:A,...p}),a.reportInfo(null,h)}})).exitCode()}};var G0t=/^[0-9]+$/,W0t=process.platform==="win32";function jde(t){return G0t.test(t)?`pull/${t}/head`:t}var Y0t=({repository:t,branch:e},r)=>[["git","init",Ae.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",jde(e)],["git","reset","--hard","FETCH_HEAD"]],V0t=({branch:t})=>[["git","fetch","origin","--depth=1",jde(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],K0t=({plugins:t,noMinify:e},r,o)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",V.resolve(o,a)])),...e?["--no-minify"]:[],"|"],[W0t?"move":"mv","packages/yarnpkg-cli/bundles/yarn.js",Ae.fromPortablePath(r),"|"]],TE=class extends ut{constructor(){super(...arguments);this.installPath=de.String("--path",{description:"The path where the repository should be cloned to"});this.repository=de.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=de.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=de.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.dryRun=de.Boolean("-n,--dry-run",!1,{description:"If set, the bundle will be built but not added to the project"});this.noMinify=de.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=de.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=de.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}static{this.paths=[["set","version","from","sources"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o}=await Qt.find(r,this.context.cwd),a=typeof this.installPath<"u"?V.resolve(this.context.cwd,Ae.toPortablePath(this.installPath)):V.resolve(Ae.toPortablePath((0,qde.tmpdir)()),"yarnpkg-sources",bn.makeHash(this.repository).slice(0,6));return(await Lt.start({configuration:r,stdout:this.context.stdout},async u=>{await BH(this,{configuration:r,report:u,target:a}),u.reportSeparator(),u.reportInfo(0,"Building a fresh bundle"),u.reportSeparator();let A=await Hr.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=V.join(a,`packages/yarnpkg-cli/bundles/yarn-${A.stdout.trim()}.js`);ae.existsSync(p)||(await M2(K0t(this,p,a),{configuration:r,context:this.context,target:a}),u.reportSeparator());let h=await ae.readFilePromise(p);if(!this.dryRun){let{bundleVersion:E}=await IH(r,null,async()=>h,{report:u});this.skipPlugins||await J0t(this,E,{project:o,report:u,target:a})}})).exitCode()}};async function M2(t,{configuration:e,context:r,target:o}){for(let[a,...n]of t){let u=n[n.length-1]==="|";if(u&&n.pop(),u)await Hr.pipevp(a,n,{cwd:o,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${pe.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} +`);try{await Hr.execvp(a,n,{cwd:o,strict:!0})}catch(A){throw r.stdout.write(A.stdout||A.stack),A}}}}async function BH(t,{configuration:e,report:r,target:o}){let a=!1;if(!t.force&&ae.existsSync(V.join(o,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await M2(V0t(t),{configuration:e,context:t.context,target:o}),a=!0}catch{r.reportSeparator(),r.reportWarning(0,"Repository update failed; we'll try to regenerate it")}}a||(r.reportInfo(0,"Cloning the remote repository"),r.reportSeparator(),await ae.removePromise(o),await ae.mkdirPromise(o,{recursive:!0}),await M2(Y0t(t,o),{configuration:e,context:t.context,target:o}))}async function J0t(t,e,{project:r,report:o,target:a}){let n=await Jg(r.configuration,e),u=new Set(Object.keys(n));for(let A of r.configuration.plugins.keys())u.has(A)&&await vH(A,t,{project:r,report:o,target:a})}Ve();Ve();St();Gt();var Gde=et(ni()),Wde=ve("vm");var LE=class extends ut{constructor(){super(...arguments);this.name=de.String();this.checksum=de.Boolean("--checksum",!0,{description:"Whether to care if this plugin is modified"})}static{this.paths=[["plugin","import"]]}static{this.usage=ot.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. + + If the \`--no-checksum\` option is set, Yarn will no longer care if the plugin is modified. + + 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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);return(await Lt.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await Qt.find(r,this.context.cwd),u,A;if(this.name.match(/^\.{0,2}[\\/]/)||Ae.isAbsolute(this.name)){let p=V.resolve(this.context.cwd,Ae.toPortablePath(this.name));a.reportInfo(0,`Reading ${pe.pretty(r,p,pe.Type.PATH)}`),u=V.relative(n.cwd,p),A=await ae.readFilePromise(p)}else{let p;if(this.name.match(/^https?:/)){try{new URL(this.name)}catch{throw new Jt(52,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}u=this.name,p=this.name}else{let h=G.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!Gde.default.valid(h.reference))throw new Jt(0,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let E=G.stringifyIdent(h),w=await Jg(r,nn);if(!Object.hasOwn(w,E)){let D=`Couldn't find a plugin named ${G.prettyIdent(r,h)} on the remote registry. +`;throw r.plugins.has(E)?D+=`A plugin named ${G.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:D+=`Note that only the plugins referenced on our website (${pe.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",pe.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${pe.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",pe.Type.URL)}).`,new Jt(51,D)}u=E,p=w[E].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${E}/${h.reference}/`):nn!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${nn}/`))}a.reportInfo(0,`Downloading ${pe.pretty(r,p,"green")}`),A=await on.get(p,{configuration:r})}await DH(u,A,{checksum:this.checksum,project:n,report:a})})).exitCode()}};async function DH(t,e,{checksum:r=!0,project:o,report:a}){let{configuration:n}=o,u={},A={exports:u};(0,Wde.runInNewContext)(e.toString(),{module:A,exports:u});let h=`.yarn/plugins/${A.exports.name}.cjs`,E=V.resolve(o.cwd,h);a.reportInfo(0,`Saving the new plugin in ${pe.pretty(n,h,"magenta")}`),await ae.mkdirPromise(V.dirname(E),{recursive:!0}),await ae.writeFilePromise(E,e);let w={path:h,spec:t};r&&(w.checksum=bn.makeHash(e)),await ze.addPlugin(o.cwd,[w])}var z0t=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],NE=class extends ut{constructor(){super(...arguments);this.installPath=de.String("--path",{description:"The path where the repository should be cloned to"});this.repository=de.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=de.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=de.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=de.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=de.String()}static{this.paths=[["plugin","import","from","sources"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),o=typeof this.installPath<"u"?V.resolve(this.context.cwd,Ae.toPortablePath(this.installPath)):V.resolve(Ae.toPortablePath((0,Yde.tmpdir)()),"yarnpkg-sources",bn.makeHash(this.repository).slice(0,6));return(await Lt.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:u}=await Qt.find(r,this.context.cwd),A=G.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=G.stringifyIdent(A),h=await Jg(r,nn);if(!Object.hasOwn(h,p))throw new Jt(51,`Couldn't find a plugin named "${p}" 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 E=p;await BH(this,{configuration:r,report:n,target:o}),await vH(E,this,{project:u,report:n,target:o})})).exitCode()}};async function vH(t,{context:e,noMinify:r},{project:o,report:a,target:n}){let u=t.replace(/@yarnpkg\//,""),{configuration:A}=o;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${u}`),a.reportSeparator(),await M2(z0t({pluginName:u,noMinify:r},n),{configuration:A,context:e,target:n}),a.reportSeparator();let p=V.resolve(n,`packages/${u}/bundles/${t}.js`),h=await ae.readFilePromise(p);await DH(t,h,{project:o,report:a})}Ve();St();Gt();var OE=class extends ut{constructor(){super(...arguments);this.name=de.String()}static{this.paths=[["plugin","remove"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o}=await Qt.find(r,this.context.cwd);return(await Lt.start({configuration:r,stdout:this.context.stdout},async n=>{let u=this.name,A=G.parseIdent(u);if(!r.plugins.has(u))throw new it(`${G.prettyIdent(r,A)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${u}.cjs`,h=V.resolve(o.cwd,p);ae.existsSync(h)&&(n.reportInfo(0,`Removing ${pe.pretty(r,p,pe.Type.PATH)}...`),await ae.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await ze.updateConfiguration(o.cwd,{plugins:E=>{if(!Array.isArray(E))return E;let w=E.filter(D=>D.path!==p);return w.length===0?ze.deleteProperty:w.length===E.length?E:w}})})).exitCode()}};Ve();Gt();var ME=class extends ut{constructor(){super(...arguments);this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["plugin","runtime"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins);return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let u=this.context.plugins.plugins.has(n),A=n;u&&(A+=" [builtin]"),a.reportJson({name:n,builtin:u}),a.reportInfo(null,`${A}`)}})).exitCode()}};Ve();Ve();Gt();var UE=class extends ut{constructor(){super(...arguments);this.idents=de.Rest()}static{this.paths=[["rebuild"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n=await Wr.find(r);if(!a)throw new or(o.cwd,this.context.cwd);let u=new Set;for(let A of this.idents)u.add(G.parseIdent(A).identHash);if(await o.restoreInstallState({restoreResolutions:!1}),await o.resolveEverything({cache:n,report:new Ri}),u.size>0)for(let A of o.storedPackages.values())u.has(A.identHash)&&(o.storedBuildState.delete(A.locatorHash),o.skippedBuilds.delete(A.locatorHash));else o.storedBuildState.clear(),o.skippedBuilds.clear();return await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};Ve();Ve();Ve();Gt();var SH=et(Xo());il();var _E=class extends ut{constructor(){super(...arguments);this.all=de.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=de.String("--mode",{description:"Change what artifacts installs generate",validator:js(yl)});this.patterns=de.Rest()}static{this.paths=[["remove"]]}static{this.usage=ot.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 latter 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}'"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n=await Wr.find(r);if(!a)throw new or(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.all?o.workspaces:[a],A=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,E=[];for(let C of this.patterns){let T=!1,N=G.parseIdent(C);for(let U of u){let J=[...U.manifest.peerDependenciesMeta.keys()];for(let te of(0,SH.default)(J,C))U.manifest.peerDependenciesMeta.delete(te),h=!0,T=!0;for(let te of A){let le=U.manifest.getForScope(te),ce=[...le.values()].map(ue=>G.stringifyIdent(ue));for(let ue of(0,SH.default)(ce,G.stringifyIdent(N))){let{identHash:Ie}=G.parseIdent(ue),he=le.get(Ie);if(typeof he>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[te].delete(Ie),E.push([U,te,he]),h=!0,T=!0}}}T||p.push(C)}let w=p.length>1?"Patterns":"Pattern",D=p.length>1?"don't":"doesn't",b=this.all?"any":"this";if(p.length>0)throw new it(`${w} ${pe.prettyList(r,p,pe.Type.CODE)} ${D} match any packages referenced by ${b} workspace`);return h?(await r.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,E),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};Ve();Ve();Gt();var Vde=ve("util"),HE=class extends ut{constructor(){super(...arguments);this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["run"]]}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd);if(!a)throw new or(o.cwd,this.context.cwd);return(await Lt.start({configuration:r,stdout:this.context.stdout,json:this.json},async u=>{let A=a.manifest.scripts,p=qe.sortMap(A.keys(),w=>w),h={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},E=p.reduce((w,D)=>Math.max(w,D.length),0);for(let[w,D]of A.entries())u.reportInfo(null,`${w.padEnd(E," ")} ${(0,Vde.inspect)(D,h)}`),u.reportJson({name:w,script:D})})).exitCode()}};Ve();Ve();Gt();var qE=class extends ut{constructor(){super(...arguments);this.inspect=de.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=de.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=de.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=de.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.require=de.String("--require",{description:"Forwarded to the underlying Node process when executing a binary"});this.silent=de.Boolean("--silent",{hidden:!0});this.scriptName=de.String();this.args=de.Proxy()}static{this.paths=[["run"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a,locator:n}=await Qt.find(r,this.context.cwd);await o.restoreInstallState();let u=this.topLevel?o.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await hn.hasPackageScript(u,this.scriptName,{project:o}))return await hn.executePackageScript(u,this.scriptName,this.args,{project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let A=await hn.getPackageAccessibleBinaries(u,{project:o});if(A.get(this.scriptName)){let h=[];return this.inspect&&(typeof this.inspect=="string"?h.push(`--inspect=${this.inspect}`):h.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?h.push(`--inspect-brk=${this.inspectBrk}`):h.push("--inspect-brk")),this.require&&h.push(`--require=${this.require}`),await hn.executePackageAccessibleBinary(u,this.scriptName,this.args,{cwd:this.context.cwd,project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:A})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let E=(await Promise.all(o.workspaces.map(async w=>w.manifest.scripts.has(this.scriptName)?w:null))).filter(w=>w!==null);if(E.length===1)return await hn.executeWorkspaceScript(E[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 it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${G.prettyLocator(r,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 it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${G.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new it("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let h=[this.scriptName].concat(this.args);for(let[E,w]of oE)for(let D of w)if(h.length>=D.length&&JSON.stringify(h.slice(0,D.length))===JSON.stringify(D))throw new it(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${E} plugin. You can install it with "yarn plugin import ${E}".`);throw new it(`Couldn't find a script named "${this.scriptName}".`)}}};Ve();Ve();Gt();var jE=class extends ut{constructor(){super(...arguments);this.descriptor=de.String();this.resolution=de.String()}static{this.paths=[["set","resolution"]]}static{this.usage=ot.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, edit the `resolutions` field in 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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n=await Wr.find(r);if(await o.restoreInstallState({restoreResolutions:!1}),!a)throw new or(o.cwd,this.context.cwd);let u=G.parseDescriptor(this.descriptor,!0),A=G.makeDescriptor(u,this.resolution);return o.storedDescriptors.set(u.descriptorHash,u),o.storedDescriptors.set(A.descriptorHash,A),o.resolutionAliases.set(u.descriptorHash,A.descriptorHash),await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};Ve();St();Gt();var Kde=et(Xo()),GE=class extends ut{constructor(){super(...arguments);this.all=de.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=de.Rest()}static{this.paths=[["unlink"]]}static{this.usage=ot.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}'"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n=await Wr.find(r);if(!a)throw new or(o.cwd,this.context.cwd);let u=o.topLevelWorkspace,A=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of u.manifest.resolutions)h.startsWith("portal:")&&A.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=V.resolve(this.context.cwd,Ae.toPortablePath(p));if(qe.isPathLike(p)){let E=await ze.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:w,workspace:D}=await Qt.find(E,h);if(!D)throw new or(w.cwd,h);if(this.all){for(let b of w.workspaces)b.manifest.name&&A.add(G.stringifyIdent(b.anchoredLocator));if(A.size===0)throw new it("No workspace found to be unlinked in the target project")}else{if(!D.manifest.name)throw new it("The target workspace doesn't have a name and thus cannot be unlinked");A.add(G.stringifyIdent(D.anchoredLocator))}}else{let E=[...u.manifest.resolutions.map(({pattern:w})=>w.descriptor.fullName)];for(let w of(0,Kde.default)(E,p))A.add(w)}}return u.manifest.resolutions=u.manifest.resolutions.filter(({pattern:p})=>!A.has(p.descriptor.fullName)),await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};Ve();Ve();Ve();Gt();var Jde=et(Q2()),PH=et(Xo());il();var WE=class extends ut{constructor(){super(...arguments);this.interactive=de.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.fixed=de.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=de.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=de.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=de.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=de.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=de.String("--mode",{description:"Change what artifacts installs generate",validator:js(yl)});this.patterns=de.Rest()}static{this.paths=[["up"]]}static{this.usage=ot.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 latter 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'"]]})}static{this.schema=[Sw("recursive",Vu.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})]}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n=await Wr.find(r);if(!a)throw new or(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=[...o.storedDescriptors.values()],A=u.map(E=>G.stringifyIdent(E)),p=new Set;for(let E of this.patterns){if(G.parseDescriptor(E).range!=="unknown")throw new it("Ranges aren't allowed when using --recursive");for(let w of(0,PH.default)(A,E)){let D=G.parseIdent(w);p.add(D.identHash)}}let h=u.filter(E=>p.has(E.identHash));for(let E of h)o.storedDescriptors.delete(E.descriptorHash),o.storedResolutions.delete(E.descriptorHash);return await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n=await Wr.find(r);if(!a)throw new or(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=r.isInteractive({interactive:this.interactive,stdout:this.context.stdout}),p=R2(this,o),h=A?["keep","reuse","project","latest"]:["project","latest"],E=[],w=[];for(let N of this.patterns){let U=!1,J=G.parseDescriptor(N),te=G.stringifyIdent(J);for(let le of o.workspaces)for(let ce of["dependencies","devDependencies"]){let Ie=[...le.manifest.getForScope(ce).values()].map(De=>G.stringifyIdent(De)),he=te==="*"?Ie:(0,PH.default)(Ie,te);for(let De of he){let Ee=G.parseIdent(De),g=le.manifest[ce].get(Ee.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let me=G.makeDescriptor(Ee,J.range);E.push(Promise.resolve().then(async()=>[le,ce,g,await T2(me,{project:o,workspace:le,cache:n,target:ce,fixed:u,modifier:p,strategies:h})])),U=!0}}U||w.push(N)}if(w.length>1)throw new it(`Patterns ${pe.prettyList(r,w,pe.Type.CODE)} don't match any packages referenced by any workspace`);if(w.length>0)throw new it(`Pattern ${pe.prettyList(r,w,pe.Type.CODE)} doesn't match any packages referenced by any workspace`);let D=await Promise.all(E),b=await pA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async N=>{for(let[,,U,{suggestions:J,rejections:te}]of D){let le=J.filter(ce=>ce.descriptor!==null);if(le.length===0){let[ce]=te;if(typeof ce>"u")throw new Error("Assertion failed: Expected an error to have been set");let ue=this.cli.error(ce);o.configuration.get("enableNetwork")?N.reportError(27,`${G.prettyDescriptor(r,U)} can't be resolved to a satisfying range + +${ue}`):N.reportError(27,`${G.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) + +${ue}`)}else le.length>1&&!A&&N.reportError(27,`${G.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(b.hasErrors())return b.exitCode();let C=!1,T=[];for(let[N,U,,{suggestions:J}]of D){let te,le=J.filter(he=>he.descriptor!==null),ce=le[0].descriptor,ue=le.every(he=>G.areDescriptorsEqual(he.descriptor,ce));le.length===1||ue?te=ce:(C=!0,{answer:te}=await(0,Jde.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${G.prettyWorkspace(r,N)} \u276F ${U}?`,choices:J.map(({descriptor:he,name:De,reason:Ee})=>he?{name:De,hint:Ee,descriptor:he}:{name:De,hint:Ee,disabled:!0}),onCancel:()=>process.exit(130),result(he){return this.find(he,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let Ie=N.manifest[U].get(te.identHash);if(typeof Ie>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(Ie.descriptorHash!==te.descriptorHash)N.manifest[U].set(te.identHash,te),T.push([N,U,Ie,te]);else{let he=r.makeResolver(),De={project:o,resolver:he},Ee=r.normalizeDependency(Ie),g=he.bindDescriptor(Ee,N.anchoredLocator,De);o.forgetResolution(g)}}return await r.triggerMultipleHooks(N=>N.afterWorkspaceDependencyReplacement,T),C&&this.context.stdout.write(` +`),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Ve();Ve();Ve();Gt();var YE=class extends ut{constructor(){super(...arguments);this.recursive=de.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=de.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=de.String()}static{this.paths=[["why"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd);if(!a)throw new or(o.cwd,this.context.cwd);await o.restoreInstallState();let n=G.parseIdent(this.package).identHash,u=this.recursive?Z0t(o,n,{configuration:r,peers:this.peers}):X0t(o,n,{configuration:r,peers:this.peers});As.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};function X0t(t,e,{configuration:r,peers:o}){let a=qe.sortMap(t.storedPackages.values(),A=>G.stringifyLocator(A)),n={},u={children:n};for(let A of a){let p={};for(let E of A.dependencies.values()){if(!o&&A.peerDependencies.has(E.identHash))continue;let w=t.storedResolutions.get(E.descriptorHash);if(!w)throw new Error("Assertion failed: The resolution should have been registered");let D=t.storedPackages.get(w);if(!D)throw new Error("Assertion failed: The package should have been registered");if(D.identHash!==e)continue;{let C=G.stringifyLocator(A);n[C]={value:[A,pe.Type.LOCATOR],children:p}}let b=G.stringifyLocator(D);p[b]={value:[{descriptor:E,locator:D},pe.Type.DEPENDENT]}}}return u}function Z0t(t,e,{configuration:r,peers:o}){let a=qe.sortMap(t.workspaces,D=>G.stringifyLocator(D.anchoredLocator)),n=new Set,u=new Set,A=D=>{if(n.has(D.locatorHash))return u.has(D.locatorHash);if(n.add(D.locatorHash),D.identHash===e)return u.add(D.locatorHash),!0;let b=!1;D.identHash===e&&(b=!0);for(let C of D.dependencies.values()){if(!o&&D.peerDependencies.has(C.identHash))continue;let T=t.storedResolutions.get(C.descriptorHash);if(!T)throw new Error("Assertion failed: The resolution should have been registered");let N=t.storedPackages.get(T);if(!N)throw new Error("Assertion failed: The package should have been registered");A(N)&&(b=!0)}return b&&u.add(D.locatorHash),b};for(let D of a)A(D.anchoredPackage);let p=new Set,h={},E={children:h},w=(D,b,C)=>{if(!u.has(D.locatorHash))return;let T=C!==null?pe.tuple(pe.Type.DEPENDENT,{locator:D,descriptor:C}):pe.tuple(pe.Type.LOCATOR,D),N={},U={value:T,children:N},J=G.stringifyLocator(D);if(b[J]=U,!(C!==null&&t.tryWorkspaceByLocator(D))&&!p.has(D.locatorHash)){p.add(D.locatorHash);for(let te of D.dependencies.values()){if(!o&&D.peerDependencies.has(te.identHash))continue;let le=t.storedResolutions.get(te.descriptorHash);if(!le)throw new Error("Assertion failed: The resolution should have been registered");let ce=t.storedPackages.get(le);if(!ce)throw new Error("Assertion failed: The package should have been registered");w(ce,N,te)}}};for(let D of a)w(D.anchoredPackage,h,null);return E}Ve();var OH={};Vt(OH,{GitFetcher:()=>_2,GitResolver:()=>H2,default:()=>Egt,gitUtils:()=>ra});Ve();St();var ra={};Vt(ra,{TreeishProtocols:()=>U2,clone:()=>NH,fetchBase:()=>mme,fetchChangedFiles:()=>yme,fetchChangedWorkspaces:()=>mgt,fetchRoot:()=>dme,isGitUrl:()=>JE,lsRemote:()=>gme,normalizeLocator:()=>dgt,normalizeRepoUrl:()=>VE,resolveUrl:()=>LH,splitRepoUrl:()=>Rh,validateRepoUrl:()=>TH});Ve();St();Gt();var fme=et(cme()),pme=et(t3()),KE=et(ve("querystring")),FH=et(ni());function QH(t,e,r){let o=t.indexOf(r);return t.lastIndexOf(e,o>-1?o:1/0)}function ume(t){try{return new URL(t)}catch{return}}function hgt(t){let e=QH(t,"@","#"),r=QH(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),QH(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function Ame(t){return ume(t)||ume(hgt(t))}function VE(t,{git:e=!1}={}){if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/|git:\/\/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){let r=Ame(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function hme(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var ggt=[/^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\/(.+)?$/],U2=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(U2||{});function JE(t){return t?ggt.some(e=>!!t.match(e)):!1}function Rh(t){t=VE(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),o=t.slice(e+1);if(o.match(/^[a-z]+=/)){let a=KE.default.parse(o);for(let[p,h]of Object.entries(a))if(typeof h!="string")throw new Error(`Assertion failed: The ${p} parameter must be a literal string`);let n=Object.values(U2).find(p=>Object.hasOwn(a,p)),[u,A]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(U2))delete a[p];return{repo:r,treeish:{protocol:u,request:A},extra:a}}else{let a=o.indexOf(":"),[n,u]=a===-1?[null,o]:[o.slice(0,a),o.slice(a+1)];return{repo:r,treeish:{protocol:n,request:u},extra:{}}}}function dgt(t){return G.makeLocator(t,VE(t.reference))}function TH(t,{configuration:e}){let r=VE(t,{git:!0});if(!on.getNetworkSettings(`https://${(0,fme.default)(r).resource}`,{configuration:e}).enableNetwork)throw new Jt(80,`Request to '${r}' has been blocked because of your configuration settings`);return r}async function gme(t,e){let r=TH(t,{configuration:e}),o=await RH("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:hme()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,u;for(;(u=n.exec(o.stdout))!==null;)a.set(u[2],u[1]);return a}async function LH(t,e){let{repo:r,treeish:{protocol:o,request:a},extra:n}=Rh(t),u=await gme(r,e),A=(h,E)=>{switch(h){case"commit":{if(!E.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return KE.default.stringify({...n,commit:E})}case"head":{let w=u.get(E==="HEAD"?E:`refs/heads/${E}`);if(typeof w>"u")throw new Error(`Unknown head ("${E}")`);return KE.default.stringify({...n,commit:w})}case"tag":{let w=u.get(`refs/tags/${E}`);if(typeof w>"u")throw new Error(`Unknown tag ("${E}")`);return KE.default.stringify({...n,commit:w})}case"semver":{let w=Ur.validRange(E);if(!w)throw new Error(`Invalid range ("${E}")`);let D=new Map([...u.entries()].filter(([C])=>C.startsWith("refs/tags/")).map(([C,T])=>[FH.default.parse(C.slice(10)),T]).filter(C=>C[0]!==null)),b=FH.default.maxSatisfying([...D.keys()],w);if(b===null)throw new Error(`No matching range ("${E}")`);return KE.default.stringify({...n,commit:D.get(b)})}case null:{let w;if((w=p("commit",E))!==null||(w=p("tag",E))!==null||(w=p("head",E))!==null)return w;throw E.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${h}")`)}},p=(h,E)=>{try{return A(h,E)}catch{return null}};return VE(`${r}#${A(o,a)}`)}async function NH(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:o,request:a}}=Rh(t);if(o!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=TH(r,{configuration:e}),u=await ae.mktempPromise(),A={cwd:u,env:hme()};return await RH("cloning the repository",["clone","-c core.autocrlf=false",n,Ae.fromPortablePath(u)],A,{configuration:e,normalizedRepoUrl:n}),await RH("switching branch",["checkout",`${a}`],A,{configuration:e,normalizedRepoUrl:n}),u})}async function dme(t){let e,r=t;do{if(e=r,await ae.existsPromise(V.join(e,".git")))return e;r=V.dirname(e)}while(r!==e);return null}async function mme(t,{baseRefs:e}){if(e.length===0)throw new it("Can't run this command with zero base refs specified.");let r=[];for(let A of e){let{code:p}=await Hr.execvp("git",["merge-base",A,"HEAD"],{cwd:t});p===0&&r.push(A)}if(r.length===0)throw new it(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:o}=await Hr.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=o.trim(),{stdout:n}=await Hr.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),u=n.trim();return{hash:a,title:u}}async function yme(t,{base:e,project:r}){let o=qe.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await Hr.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>V.resolve(t,Ae.toPortablePath(h))),{stdout:u}=await Hr.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),A=u.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>V.resolve(t,Ae.toPortablePath(h))),p=[...new Set([...n,...A].sort())];return o?p.filter(h=>!V.relative(r.cwd,h).match(o)):p}async function mgt({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let r=[V.resolve(e.cwd,mr.lockfile),V.resolve(e.cwd,e.configuration.get("cacheFolder")),V.resolve(e.cwd,e.configuration.get("installStatePath")),V.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(u=>u.populateYarnPaths,e,u=>{u!=null&&r.push(u)});let o=await dme(e.configuration.projectCwd);if(o==null)throw new it("This command can only be run on Git repositories");let a=await mme(o,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await yme(o,{base:a.hash,project:e});return new Set(qe.mapAndFilter(n,u=>{let A=e.tryWorkspaceByFilePath(u);return A===null?qe.mapAndFilter.skip:r.some(p=>u.startsWith(p))?qe.mapAndFilter.skip:A}))}async function RH(t,e,r,{configuration:o,normalizedRepoUrl:a}){try{return await Hr.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof Hr.ExecError))throw n;let u=n.reportExtra,A=n.stderr.toString();throw new Jt(1,`Failed ${t}`,p=>{p.reportError(1,` ${pe.prettyField(o,{label:"Repository URL",value:pe.tuple(pe.Type.URL,a)})}`);for(let h of A.matchAll(/^(.+?): (.*)$/gm)){let[,E,w]=h;E=E.toLowerCase();let D=E==="error"?"Error":`${(0,pme.default)(E)} Error`;p.reportError(1,` ${pe.prettyField(o,{label:D,value:pe.tuple(pe.Type.NO_HINT,w)})}`)}u?.(p)})}}var _2=class{supports(e,r){return JE(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,o);let n={...r,checksums:a},u=await this.downloadHosted(e,n);if(u!==null)return u;let[A,p,h]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(e,n),...r.cacheOptions});return{packageFs:A,releaseFs:p,prefixPath:G.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(o=>o.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let o=Rh(e.reference),a=await NH(e.reference,r.project.configuration),n=V.resolve(a,o.extra.cwd??Bt.dot),u=V.join(n,"package.tgz");await hn.prepareExternalProject(n,u,{configuration:r.project.configuration,report:r.report,workspace:o.extra.workspace,locator:e});let A=await ae.readFilePromise(u);return await qe.releaseAfterUseAsync(async()=>await $i.convertToZip(A,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1}))}};Ve();Ve();var H2=class{supportsDescriptor(e,r){return JE(e.range)}supportsLocator(e,r){return JE(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=await LH(e.range,o.project.configuration);return[G.makeLocator(e,a)]}async getSatisfying(e,r,o,a){let n=Rh(e.range);return{locators:o.filter(A=>{if(A.identHash!==e.identHash)return!1;let p=Rh(A.reference);return!(n.repo!==p.repo||n.treeish.protocol==="commit"&&n.treeish.request!==p.treeish.request)}),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await qe.releaseAfterUseAsync(async()=>await _t.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var ygt={configuration:{changesetBaseRefs:{description:"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.",type:"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:"STRING",default:[],isArray:!0},cloneConcurrency:{description:"Maximal number of concurrent clones",type:"NUMBER",default:2}},fetchers:[_2],resolvers:[H2]};var Egt=ygt;Gt();var zE=class extends ut{constructor(){super(...arguments);this.since=de.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=de.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.noPrivate=de.Boolean("--no-private",{description:"Exclude workspaces that have the private field set to true"});this.verbose=de.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["workspaces","list"]]}static{this.usage=ot.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 `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\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 "})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o}=await Qt.find(r,this.context.cwd);return(await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let u=this.since?await ra.fetchChangedWorkspaces({ref:this.since,project:o}):o.workspaces,A=new Set(u);if(this.recursive)for(let p of[...u].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)A.add(h);for(let p of A){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let E;if(this.verbose){let w=new Set,D=new Set;for(let b of _t.hardDependencies)for(let[C,T]of h.getForScope(b)){let N=o.tryWorkspaceByDescriptor(T);N===null?o.workspacesByIdent.has(C)&&D.add(T):w.add(N)}E={workspaceDependencies:Array.from(w).map(b=>b.relativeCwd),mismatchedWorkspaceDependencies:Array.from(D).map(b=>G.stringifyDescriptor(b))}}n.reportInfo(null,`${p.relativeCwd}`),n.reportJson({location:p.relativeCwd,name:h.name?G.stringifyIdent(h.name):null,...E})}})).exitCode()}};Ve();Ve();Gt();var XE=class extends ut{constructor(){super(...arguments);this.workspaceName=de.String();this.commandName=de.String();this.args=de.Proxy()}static{this.paths=[["workspace"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd);if(!a)throw new or(o.cwd,this.context.cwd);let n=o.workspaces,u=new Map(n.map(p=>[G.stringifyIdent(p.anchoredLocator),p])),A=u.get(this.workspaceName);if(A===void 0){let p=Array.from(u.keys()).sort();throw new it(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: + - ${p.join(` + - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:A.cwd})}};var Cgt={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:"BOOLEAN",default:Eme.isCI},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:"STRING",values:["^","~",""],default:"^"},preferReuse:{description:"If true, `yarn add` will attempt to reuse the most common dependency range in other workspaces.",type:"BOOLEAN",default:!1}},commands:[hE,gE,dE,mE,jE,TE,SE,zE,CE,IE,wE,BE,fE,pE,yE,EE,vE,DE,PE,xE,bE,kE,GE,QE,FE,NE,LE,OE,RE,ME,UE,_E,HE,qE,WE,YE,XE]},Igt=Cgt;var jH={};Vt(jH,{default:()=>Bgt});Ve();var kt={optional:!0},UH=[["@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:kt,zenObservable:kt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{"supports-color":kt}}],["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":kt,"postcss-jsx":kt,"postcss-less":kt,"postcss-markdown":kt,"postcss-scss":kt}}],["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:kt}}],["snowpack@>=3.3.0",{dependencies:{"node-gyp":"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:kt}}],["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@<=0.5.2",{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:kt,"vue-template-compiler":kt}}],["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:kt,"utf-8-validate":kt}}],["react-portal@<4.2.2",{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@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{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":kt,"vuetify-loader":kt}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["vue-cli-plugin-vuetify@>=2.4.3",{peerDependencies:{vue:"*"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt}}],["@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":kt}}],["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":kt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:kt}}],["consolidate@<=0.16.0",{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:kt,tinyliquid:kt,"liquid-node":kt,jade:kt,"then-jade":kt,dust:kt,"dustjs-helpers":kt,"dustjs-linkedin":kt,swig:kt,"swig-templates":kt,"razor-tmpl":kt,atpl:kt,liquor:kt,twig:kt,ejs:kt,eco:kt,jazz:kt,jqtpl:kt,hamljs:kt,hamlet:kt,whiskers:kt,"haml-coffee":kt,"hogan.js":kt,templayed:kt,handlebars:kt,underscore:kt,lodash:kt,pug:kt,"then-pug":kt,qejs:kt,walrus:kt,mustache:kt,just:kt,ect:kt,mote:kt,toffee:kt,dot:kt,"bracket-template":kt,ractive:kt,nunjucks:kt,htmling:kt,"babel-core":kt,plates:kt,"react-dom":kt,react:kt,"arc-templates":kt,vash:kt,slm:kt,marko:kt,teacup:kt,"coffee-script":kt,squirrelly:kt,twing:kt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":kt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":kt,vue:kt}}],["scss-parser@<=1.0.5",{dependencies:{lodash:"^4.17.21"}}],["query-ast@<1.0.5",{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@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{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:kt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:kt}}],["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":kt,"webpack-command":kt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":kt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":kt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:kt,jimp:kt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":kt,"eslint-import-resolver-typescript":kt,"eslint-import-resolver-webpack":kt,"@typescript-eslint/parser":kt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":kt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":kt}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x <10.0.2",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.7"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:kt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:kt}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}],["@cypress/snapshot@*",{dependencies:{debug:"^3.2.7"}}],["auto-relay@<=0.14.0",{peerDependencies:{"reflect-metadata":"^0.1.13"}}],["vue-template-babel-compiler@<1.2.0",{peerDependencies:{"vue-template-compiler":"^2.6.0"}}],["@parcel/transformer-image@<2.5.0",{peerDependencies:{"@parcel/core":"*"}}],["@parcel/transformer-js@<2.5.0",{peerDependencies:{"@parcel/core":"*"}}],["parcel@*",{peerDependenciesMeta:{"@parcel/core":kt}}],["react-scripts@*",{peerDependencies:{eslint:"*"}}],["focus-trap-react@^8.0.0",{dependencies:{tabbable:"^5.3.2"}}],["react-rnd@<10.3.7",{peerDependencies:{react:">=16.3.0","react-dom":">=16.3.0"}}],["connect-mongo@<5.0.0",{peerDependencies:{"express-session":"^1.17.1"}}],["vue-i18n@<9",{peerDependencies:{vue:"^2"}}],["vue-router@<4",{peerDependencies:{vue:"^2"}}],["unified@<10",{dependencies:{"@types/unist":"^2.0.0"}}],["react-github-btn@<=1.3.0",{peerDependencies:{react:">=16.3.0"}}],["react-dev-utils@*",{peerDependencies:{typescript:">=2.7",webpack:">=4"},peerDependenciesMeta:{typescript:kt}}],["@asyncapi/react-component@<=1.0.0-next.39",{peerDependencies:{react:">=16.8.0","react-dom":">=16.8.0"}}],["xo@*",{peerDependencies:{webpack:">=1.11.0"},peerDependenciesMeta:{webpack:kt}}],["babel-plugin-remove-graphql-queries@<=4.20.0-next.0",{dependencies:{"@babel/types":"^7.15.4"}}],["gatsby-plugin-page-creator@<=4.20.0-next.1",{dependencies:{"fs-extra":"^10.1.0"}}],["gatsby-plugin-utils@<=3.14.0-next.1",{dependencies:{fastq:"^1.13.0"},peerDependencies:{graphql:"^15.0.0"}}],["gatsby-plugin-mdx@<3.1.0-next.1",{dependencies:{mkdirp:"^1.0.4"}}],["gatsby-plugin-mdx@^2",{peerDependencies:{gatsby:"^3.0.0-next"}}],["fdir@<=5.2.0",{peerDependencies:{picomatch:"2.x"},peerDependenciesMeta:{picomatch:kt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":kt}}],["graphql-compose@>=9.0.10",{peerDependencies:{graphql:"^14.2.0 || ^15.0.0 || ^16.0.0"}}],["vite-plugin-vuetify@<=1.0.2",{peerDependencies:{vue:"^3.0.0"}}],["webpack-plugin-vuetify@<=2.0.1",{peerDependencies:{vue:"^3.2.6"}}],["eslint-import-resolver-vite@<2.0.1",{dependencies:{debug:"^4.3.4",resolve:"^1.22.8"}}],["notistack@^3.0.0",{dependencies:{csstype:"^3.0.10"}}]];var _H;function Cme(){return typeof _H>"u"&&(_H=ve("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()),_H}var HH;function Ime(){return typeof HH>"u"&&(HH=ve("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()),HH}var qH;function wme(){return typeof qH>"u"&&(qH=ve("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),qH}var Bme=new Map([[G.makeIdent(null,"fsevents").identHash,Cme],[G.makeIdent(null,"resolve").identHash,Ime],[G.makeIdent(null,"typescript").identHash,wme]]),wgt={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,o]of UH)e(G.parseDescriptor(r,!0),o)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let o=G.parseIdent(e.slice(r.length)),a=Bme.get(o.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,o)=>typeof Bme.get(t.identHash)>"u"?t:G.makeDescriptor(t,G.makeRange({protocol:"patch:",source:G.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},Bgt=wgt;var a6={};Vt(a6,{ConstraintsCheckCommand:()=>sC,ConstraintsQueryCommand:()=>nC,ConstraintsSourceCommand:()=>iC,default:()=>zgt});Ve();Ve();j2();var $E=class{constructor(e){this.project=e}createEnvironment(){let e=new ZE(["cwd","ident"]),r=new ZE(["workspace","type","ident"]),o=new ZE(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,u=new Map;for(let A of this.project.storedPackages.values()){let p=Array.from(A.peerDependencies.values(),h=>[G.stringifyIdent(h),h.range]);n.set(A.locatorHash,{workspace:null,ident:G.stringifyIdent(A),version:A.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional===!0))})}for(let A of this.project.storedPackages.values()){let p=n.get(A.locatorHash);p.dependencies=new Map(Array.from(A.dependencies.values(),h=>{let E=this.project.storedResolutions.get(h.descriptorHash);if(typeof E>"u")throw new Error("Assertion failed: The resolution should have been registered");let w=n.get(E);if(typeof w>"u")throw new Error("Assertion failed: The package should have been registered");return[G.stringifyIdent(h),w]})),p.dependencies.delete(p.ident)}for(let A of this.project.workspaces){let p=G.stringifyIdent(A.anchoredLocator),h=A.manifest.exportTo({}),E=n.get(A.anchoredLocator.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");let w=(T,N,{caller:U=Xi.getCaller()}={})=>{let J=q2(T),te=qe.getMapWithDefault(a.manifestUpdates,A.cwd),le=qe.getMapWithDefault(te,J),ce=qe.getSetWithDefault(le,N);U!==null&&ce.add(U)},D=T=>w(T,void 0,{caller:Xi.getCaller()}),b=T=>{qe.getArrayWithDefault(a.reportedErrors,A.cwd).push(T)},C=e.insert({cwd:A.relativeCwd,ident:p,manifest:h,pkg:E,set:w,unset:D,error:b});u.set(A,C);for(let T of _t.allDependencies)for(let N of A.manifest[T].values()){let U=G.stringifyIdent(N),J=()=>{w([T,U],void 0,{caller:Xi.getCaller()})},te=ce=>{w([T,U],ce,{caller:Xi.getCaller()})},le=null;if(T!=="peerDependencies"&&(T!=="dependencies"||!A.manifest.devDependencies.has(N.identHash))){let ce=A.anchoredPackage.dependencies.get(N.identHash);if(ce){if(typeof ce>"u")throw new Error("Assertion failed: The dependency should have been registered");let ue=this.project.storedResolutions.get(ce.descriptorHash);if(typeof ue>"u")throw new Error("Assertion failed: The resolution should have been registered");let Ie=n.get(ue);if(typeof Ie>"u")throw new Error("Assertion failed: The package should have been registered");le=Ie}}r.insert({workspace:C,ident:U,range:N.range,type:T,resolution:le,update:te,delete:J,error:b})}}for(let A of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(A);if(!p)continue;let h=u.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let E=n.get(A.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");E.workspace=h}return{workspaces:e,dependencies:r,packages:o,result:a}}async process(){let e=this.createEnvironment(),r={Yarn:{workspace:a=>e.workspaces.find(a)[0]??null,workspaces:a=>e.workspaces.find(a),dependency:a=>e.dependencies.find(a)[0]??null,dependencies:a=>e.dependencies.find(a),package:a=>e.packages.find(a)[0]??null,packages:a=>e.packages.find(a)}},o=await this.project.loadUserConfig();return o?.constraints?(await o.constraints(r),e.result):null}};Ve();Ve();Gt();var nC=class extends ut{constructor(){super(...arguments);this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=de.String()}static{this.paths=[["constraints","query"]]}static{this.usage=ot.Usage({category:"Constraints-related commands",description:"query the constraints fact database",details:` + This command will output all matches to the given prolog query. + `,examples:[["List all dependencies throughout the workspace","yarn constraints query 'workspace_has_dependency(_, DependencyName, _, _).'"]]})}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(V2(),Y2)),o=await ze.find(this.context.cwd,this.context.plugins),{project:a}=await Qt.find(o,this.context.cwd),n=await r.find(a),u=this.query;return u.endsWith(".")||(u=`${u}.`),(await Lt.start({configuration:o,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(u)){let E=Array.from(Object.entries(h)),w=E.length,D=E.reduce((b,[C])=>Math.max(b,C.length),0);for(let b=0;b(V2(),Y2)),o=await ze.find(this.context.cwd,this.context.plugins),{project:a}=await Qt.find(o,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};Ve();Ve();Gt();j2();var sC=class extends ut{constructor(){super(...arguments);this.fix=de.Boolean("--fix",!1,{description:"Attempt to automatically fix unambiguous issues, following a multi-pass process"});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["constraints"]]}static{this.usage=ot.Usage({category:"Constraints-related commands",description:"check that the project constraints are met",details:` + This command will run constraints on your project and emit errors for each one that is found but isn't met. If any error is emitted the process will exit with a non-zero exit code. + + If the \`--fix\` flag is used, Yarn will attempt to automatically fix the issues the best it can, following a multi-pass process (with a maximum of 10 iterations). Some ambiguous patterns cannot be autofixed, in which case you'll have to manually specify the right resolution. + + For more information as to how to write constraints, please consult our dedicated page on our website: https://yarnpkg.com/features/constraints. + `,examples:[["Check that all constraints are satisfied","yarn constraints"],["Autofix all unmet constraints","yarn constraints --fix"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o}=await Qt.find(r,this.context.cwd);await o.restoreInstallState();let a=await o.loadUserConfig(),n;if(a?.constraints)n=new $E(o);else{let{Constraints:h}=await Promise.resolve().then(()=>(V2(),Y2));n=await h.find(o)}let u,A=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let E=await n.process();if(!E)break;let{changedWorkspaces:w,remainingErrors:D}=Kk(o,E,{fix:this.fix}),b=[];for(let[C,T]of w){let N=C.manifest.indent;C.manifest=new _t,C.manifest.indent=N,C.manifest.load(T),b.push(C.persistManifest())}if(await Promise.all(b),!(w.size>0&&h>1)){u=kme(D,{configuration:r}),A=!1,p=!0;for(let[,C]of D)for(let T of C)T.fixable?A=!0:p=!1}}if(u.children.length===0)return 0;if(A){let h=p?`Those errors can all be fixed by running ${pe.pretty(r,"yarn constraints --fix",pe.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${pe.pretty(r,"yarn constraints --fix",pe.Type.CODE)}`;await Lt.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async E=>{E.reportInfo(0,h),E.reportSeparator()})}return u.children=qe.sortMap(u.children,h=>h.value[1]),As.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};j2();var Jgt={configuration:{enableConstraintsChecks:{description:"If true, constraints will run during installs",type:"BOOLEAN",default:!1},constraintsPath:{description:"The path of the constraints file.",type:"ABSOLUTE_PATH",default:"./constraints.pro"}},commands:[nC,iC,sC],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),o;if(r?.constraints)o=new $E(t);else{let{Constraints:u}=await Promise.resolve().then(()=>(V2(),Y2));o=await u.find(t)}let a=await o.process();if(!a)return;let{remainingErrors:n}=Kk(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[u,A]of n)for(let p of A)e(84,`${pe.pretty(t.configuration,u.anchoredLocator,pe.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${pe.pretty(t.configuration,"yarn constraints",pe.Type.CODE)} for more details`)}}},zgt=Jgt;var l6={};Vt(l6,{CreateCommand:()=>oC,DlxCommand:()=>aC,default:()=>Zgt});Ve();Gt();var oC=class extends ut{constructor(){super(...arguments);this.pkg=de.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=de.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=de.String();this.args=de.Proxy()}static{this.paths=[["create"]]}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let o=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=G.parseDescriptor(o),n=a.name.match(/^create(-|$)/)?a:a.scope?G.makeIdent(a.scope,`create-${a.name}`):G.makeIdent(null,`create-${a.name}`),u=G.stringifyIdent(n);return a.range!=="unknown"&&(u+=`@${a.range}`),this.cli.run(["dlx",...r,u,...this.args])}};Ve();Ve();St();Gt();var aC=class extends ut{constructor(){super(...arguments);this.packages=de.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=de.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=de.String();this.args=de.Proxy()}static{this.paths=[["dlx"]]}static{this.usage=ot.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!')"`]]})}async execute(){return ze.telemetry=null,await ae.mktempPromise(async r=>{let o=V.join(r,`dlx-${process.pid}`);await ae.mkdirPromise(o),await ae.writeFilePromise(V.join(o,"package.json"),`{} +`),await ae.writeFilePromise(V.join(o,"yarn.lock"),"");let a=V.join(o,".yarnrc.yml"),n=await ze.findProjectCwd(this.context.cwd),A={enableGlobalCache:!(await ze.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Ju(68),level:pe.LogLevel.Discard}]},p=n!==null?V.join(n,".yarnrc.yml"):null;p!==null&&ae.existsSync(p)?(await ae.copyFilePromise(p,a),await ze.updateConfiguration(o,N=>{let U=qe.toMerged(N,A);return Array.isArray(N.plugins)&&(U.plugins=N.plugins.map(J=>{let te=typeof J=="string"?J:J.path,le=Ae.isAbsolute(te)?te:Ae.resolve(Ae.fromPortablePath(n),te);return typeof J=="string"?le:{path:le,spec:J.spec}})),U})):await ae.writeJsonPromise(a,A);let h=this.packages??[this.command],E=G.parseDescriptor(this.command).name,w=await this.cli.run(["add","--fixed","--",...h],{cwd:o,quiet:this.quiet});if(w!==0)return w;this.quiet||this.context.stdout.write(` +`);let D=await ze.find(o,this.context.plugins),{project:b,workspace:C}=await Qt.find(D,o);if(C===null)throw new or(b.cwd,o);await b.restoreInstallState();let T=await hn.getWorkspaceAccessibleBinaries(C);return T.has(E)===!1&&T.size===1&&typeof this.packages>"u"&&(E=Array.from(T)[0][0]),await hn.executeWorkspaceAccessibleBinary(C,E,this.args,{packageAccessibleBinaries:T,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};var Xgt={commands:[oC,aC]},Zgt=Xgt;var A6={};Vt(A6,{ExecFetcher:()=>J2,ExecResolver:()=>z2,default:()=>tdt,execUtils:()=>Zk});Ve();Ve();St();var hA="exec:";var Zk={};Vt(Zk,{loadGeneratorFile:()=>K2,makeLocator:()=>u6,makeSpec:()=>rye,parseSpec:()=>c6});Ve();St();function c6(t){let{params:e,selector:r}=G.parseRange(t),o=Ae.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?G.parseLocator(e.locator):null,path:o}}function rye({parentLocator:t,path:e,generatorHash:r,protocol:o}){let a=t!==null?{locator:G.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return G.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function u6(t,{parentLocator:e,path:r,generatorHash:o,protocol:a}){return G.makeLocator(t,rye({parentLocator:e,path:r,generatorHash:o,protocol:a}))}async function K2(t,e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(t,{protocol:e}),n=V.isAbsolute(a)?{packageFs:new En(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new En(Bt.root),prefixPath:V.relative(Bt.root,n.localPath)}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.join(u.prefixPath,a);return await A.readFilePromise(p,"utf8")}var J2=class{supports(e,r){return!!e.reference.startsWith(hA)}getLocalPath(e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(e.reference,{protocol:hA});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){let o=await K2(e.reference,hA,r);return ae.mktempPromise(async a=>{let n=V.join(a,"generator.js");return await ae.writeFilePromise(n,o),ae.mktempPromise(async u=>{if(await this.generatePackage(u,e,n,r),!ae.existsSync(V.join(u,"build")))throw new Error("The script should have generated a build directory");return await $i.makeArchiveFromDirectory(V.join(u,"build"),{prefixPath:G.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,o,a){return await ae.mktempPromise(async n=>{let u=await hn.makeScriptEnv({project:a.project,binFolder:n}),A=V.join(e,"runtime.js");return await ae.mktempPromise(async p=>{let h=V.join(p,"buildfile.log"),E=V.join(e,"generator"),w=V.join(e,"build");await ae.mkdirPromise(E),await ae.mkdirPromise(w);let D={tempDir:Ae.fromPortablePath(E),buildDir:Ae.fromPortablePath(w),locator:G.stringifyLocator(r)};await ae.writeFilePromise(A,` + // Expose 'Module' as a global variable + Object.defineProperty(global, 'Module', { + get: () => require('module'), + configurable: true, + enumerable: false, + }); + + // Expose non-hidden built-in modules as global variables + for (const name of Module.builtinModules.filter((name) => name !== 'module' && !name.startsWith('_'))) { + Object.defineProperty(global, name, { + get: () => require(name), + configurable: true, + enumerable: false, + }); + } + + // Expose the 'execEnv' global variable + Object.defineProperty(global, 'execEnv', { + value: { + ...${JSON.stringify(D)}, + }, + enumerable: true, + }); + `);let b=u.NODE_OPTIONS||"",C=/\s*--require\s+\S*\.pnp\.c?js\s*/g;b=b.replace(C," ").trim(),u.NODE_OPTIONS=b;let{stdout:T,stderr:N}=a.project.configuration.getSubprocessStreams(h,{header:`# This file contains the result of Yarn generating a package (${G.stringifyLocator(r)}) +`,prefix:G.prettyLocator(a.project.configuration,r),report:a.report}),{code:U}=await Hr.pipevp(process.execPath,["--require",Ae.fromPortablePath(A),Ae.fromPortablePath(o),G.stringifyIdent(r)],{cwd:e,env:u,stdin:null,stdout:T,stderr:N});if(U!==0)throw ae.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${pe.pretty(a.project.configuration,h,pe.Type.PATH)})`)})})}};Ve();Ve();var $gt=2,z2=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,o){return G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=c6(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await K2(G.makeRange({protocol:hA,source:a,selector:a,params:{locator:G.stringifyLocator(n)}}),hA,o.fetchOptions),A=bn.makeHash(`${$gt}`,u).slice(0,6);return[u6(e,{parentLocator:n,path:a,generatorHash:A,protocol:hA})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await qe.releaseAfterUseAsync(async()=>await _t.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var edt={fetchers:[J2],resolvers:[z2]},tdt=edt;var p6={};Vt(p6,{FileFetcher:()=>eB,FileResolver:()=>tB,TarballFileFetcher:()=>rB,TarballFileResolver:()=>nB,default:()=>idt,fileUtils:()=>$g});Ve();St();var lC=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,X2=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,_i="file:";var $g={};Vt($g,{fetchArchiveFromLocator:()=>$2,makeArchiveFromLocator:()=>$k,makeBufferFromLocator:()=>f6,makeLocator:()=>cC,makeSpec:()=>nye,parseSpec:()=>Z2});Ve();St();function Z2(t){let{params:e,selector:r}=G.parseRange(t),o=Ae.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?G.parseLocator(e.locator):null,path:o}}function nye({parentLocator:t,path:e,hash:r,protocol:o}){let a=t!==null?{locator:G.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return G.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function cC(t,{parentLocator:e,path:r,hash:o,protocol:a}){return G.makeLocator(t,nye({parentLocator:e,path:r,hash:o,protocol:a}))}async function $2(t,e){let{parentLocator:r,path:o}=G.parseFileStyleRange(t.reference,{protocol:_i}),a=V.isAbsolute(o)?{packageFs:new En(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new En(Bt.root),prefixPath:V.relative(Bt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let u=n.packageFs,A=V.join(n.prefixPath,o);return await qe.releaseAfterUseAsync(async()=>await u.readFilePromise(A),n.releaseFs)}async function $k(t,{protocol:e,fetchOptions:r,inMemory:o=!1}){let{parentLocator:a,path:n}=G.parseFileStyleRange(t.reference,{protocol:e}),u=V.isAbsolute(n)?{packageFs:new En(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(a,r),A=u.localPath?{packageFs:new En(Bt.root),prefixPath:V.relative(Bt.root,u.localPath)}:u;u!==A&&u.releaseFs&&u.releaseFs();let p=A.packageFs,h=V.join(A.prefixPath,n);return await qe.releaseAfterUseAsync(async()=>await $i.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:G.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:o}),A.releaseFs)}async function f6(t,{protocol:e,fetchOptions:r}){return(await $k(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var eB=class{supports(e,r){return!!e.reference.startsWith(_i)}getLocalPath(e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(e.reference,{protocol:_i});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){return $k(e,{protocol:_i,fetchOptions:r})}};Ve();Ve();var rdt=2,tB=class{supportsDescriptor(e,r){return e.range.match(lC)?!0:!!e.range.startsWith(_i)}supportsLocator(e,r){return!!e.reference.startsWith(_i)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return lC.test(e.range)&&(e=G.makeDescriptor(e,`${_i}${e.range}`)),G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=Z2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await f6(G.makeLocator(e,G.makeRange({protocol:_i,source:a,selector:a,params:{locator:G.stringifyLocator(n)}})),{protocol:_i,fetchOptions:o.fetchOptions}),A=bn.makeHash(`${rdt}`,u).slice(0,6);return[cC(e,{parentLocator:n,path:a,hash:A,protocol:_i})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await qe.releaseAfterUseAsync(async()=>await _t.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};Ve();var rB=class{supports(e,r){return X2.test(e.reference)?!!e.reference.startsWith(_i):!1}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),checksum:u}}async fetchFromDisk(e,r){let o=await $2(e,r);return await $i.convertToZip(o,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}};Ve();Ve();Ve();var nB=class{supportsDescriptor(e,r){return X2.test(e.range)?!!(e.range.startsWith(_i)||lC.test(e.range)):!1}supportsLocator(e,r){return X2.test(e.reference)?!!e.reference.startsWith(_i):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return lC.test(e.range)&&(e=G.makeDescriptor(e,`${_i}${e.range}`)),G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=Z2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=cC(e,{parentLocator:n,path:a,hash:"",protocol:_i}),A=await $2(u,o.fetchOptions),p=bn.makeHash(A).slice(0,6);return[cC(e,{parentLocator:n,path:a,hash:p,protocol:_i})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await qe.releaseAfterUseAsync(async()=>await _t.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var ndt={fetchers:[rB,eB],resolvers:[nB,tB]},idt=ndt;var d6={};Vt(d6,{GithubFetcher:()=>iB,default:()=>odt,githubUtils:()=>eQ});Ve();St();var eQ={};Vt(eQ,{invalidGithubUrlMessage:()=>oye,isGithubUrl:()=>h6,parseGithubUrl:()=>g6});var iye=et(ve("querystring")),sye=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function h6(t){return t?sye.some(e=>!!t.match(e)):!1}function g6(t){let e;for(let A of sye)if(e=t.match(A),e)break;if(!e)throw new Error(oye(t));let[,r,o,a,n="master"]=e,{commit:u}=iye.default.parse(n);return n=u||n.replace(/[^:]*:/,""),{auth:r,username:o,reponame:a,treeish:n}}function oye(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var iB=class{supports(e,r){return!!h6(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await on.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await ae.mktempPromise(async a=>{let n=new En(a);await $i.extractArchiveTo(o,n,{stripComponents:1});let u=ra.splitRepoUrl(e.reference),A=V.join(a,"package.tgz");await hn.prepareExternalProject(a,A,{configuration:r.project.configuration,report:r.report,workspace:u.extra.workspace,locator:e});let p=await ae.readFilePromise(A);return await $i.convertToZip(p,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:o,username:a,reponame:n,treeish:u}=g6(e.reference);return`https://${o?`${o}@`:""}github.com/${a}/${n}/archive/${u}.tar.gz`}};var sdt={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let o=new iB;if(!o.supports(e,r))return null;try{return await o.fetch(e,r)}catch{return null}}}},odt=sdt;var m6={};Vt(m6,{TarballHttpFetcher:()=>oB,TarballHttpResolver:()=>aB,default:()=>ldt});Ve();function sB(t){let e;try{e=new URL(t)}catch{return!1}return!(e.protocol!=="http:"&&e.protocol!=="https:"||!e.pathname.match(/(\.tar\.gz|\.tgz|\/[^.]+)$/))}var oB=class{supports(e,r){return sB(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.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),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await on.get(e.reference,{configuration:r.project.configuration});return await $i.convertToZip(o,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}};Ve();Ve();var aB=class{supportsDescriptor(e,r){return sB(e.range)}supportsLocator(e,r){return sB(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[G.convertDescriptorToLocator(e)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await qe.releaseAfterUseAsync(async()=>await _t.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var adt={fetchers:[oB],resolvers:[aB]},ldt=adt;var y6={};Vt(y6,{InitCommand:()=>uC,default:()=>udt});Ve();Ve();St();Gt();var uC=class extends ut{constructor(){super(...arguments);this.private=de.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=de.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=de.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.name=de.String("-n,--name",{description:"Initialize a package with the given name"});this.initializer=de.String({required:!1});this.usev2=de.Boolean("-2",!1,{hidden:!0});this.yes=de.Boolean("-y,--yes",{hidden:!0})}static{this.paths=[["init"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),o=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return o!==null?await this.executeProxy(r,o):await this.executeRegular(r)}async executeProxy(r,o){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new it("Cannot use the --install flag from within a project subdirectory");ae.existsSync(this.context.cwd)||await ae.mkdirPromise(this.context.cwd,{recursive:!0});let a=V.join(this.context.cwd,mr.lockfile);ae.existsSync(a)||await ae.writeFilePromise(a,"");let n=await this.cli.run(["set","version",o],{quiet:!0});if(n!==0)return n;let u=[];return this.private&&u.push("-p"),this.workspace&&u.push("-w"),this.name&&u.push(`-n=${this.name}`),this.yes&&u.push("-y"),await ae.mktempPromise(async A=>{let{code:p}=await Hr.pipevp("yarn",["init",...u],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await hn.makeScriptEnv({binFolder:A})});return p})}async executeRegular(r){let o=null;try{o=(await Qt.find(r,this.context.cwd)).project}catch{o=null}ae.existsSync(this.context.cwd)||await ae.mkdirPromise(this.context.cwd,{recursive:!0});let a=await _t.tryFind(this.context.cwd),n=a??new _t,u=Object.fromEntries(r.get("initFields").entries());n.load(u),n.name=n.name??G.makeIdent(r.get("initScope"),this.name??V.basename(this.context.cwd)),n.packageManager=nn&&qe.isTaggedYarnVersion(nn)?`yarn@${nn}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await ae.mkdirPromise(V.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let A={};n.exportTo(A);let p=V.join(this.context.cwd,_t.fileName);await ae.changeFilePromise(p,`${JSON.stringify(A,null,2)} +`,{automaticNewlines:!0});let h=[p],E=V.join(this.context.cwd,"README.md");if(ae.existsSync(E)||(await ae.writeFilePromise(E,`# ${G.stringifyIdent(n.name)} +`),h.push(E)),!o||o.cwd===this.context.cwd){let w=V.join(this.context.cwd,mr.lockfile);ae.existsSync(w)||(await ae.writeFilePromise(w,""),h.push(w));let b=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# Whether you use PnP or not, the node_modules folder is often used to store","# build artifacts that should be gitignored","node_modules","","# Swap the comments on the following lines if you wish to use zero-installs","# In that case, don't forget to run `yarn config set enableGlobalCache false`!","# Documentation here: https://yarnpkg.com/features/caching#zero-installs","","#!.yarn/cache",".pnp.*"].map(ce=>`${ce} +`).join(""),C=V.join(this.context.cwd,".gitignore");ae.existsSync(C)||(await ae.writeFilePromise(C,b),h.push(C));let N=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(ce=>`${ce} +`).join(""),U=V.join(this.context.cwd,".gitattributes");ae.existsSync(U)||(await ae.writeFilePromise(U,N),h.push(U));let J={"*":{charset:"utf-8",endOfLine:"lf",indentSize:2,indentStyle:"space",insertFinalNewline:!0}};qe.mergeIntoTarget(J,r.get("initEditorConfig"));let te=`root = true +`;for(let[ce,ue]of Object.entries(J)){te+=` +[${ce}] +`;for(let[Ie,he]of Object.entries(ue)){let De=Ie.replace(/[A-Z]/g,Ee=>`_${Ee.toLowerCase()}`);te+=`${De} = ${he} +`}}let le=V.join(this.context.cwd,".editorconfig");ae.existsSync(le)||(await ae.writeFilePromise(le,te),h.push(le)),await this.cli.run(["install"],{quiet:!0}),this.initializer&&(this.context.stdout.write(` +`),await this.cli.run(["dlx",this.initializer],{quiet:!0})),ae.existsSync(V.join(this.context.cwd,".git"))||(await Hr.execvp("git",["init"],{cwd:this.context.cwd}),await Hr.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await Hr.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};var cdt={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:"STRING",default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:"MAP",valueDefinition:{description:"",type:"ANY"}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:"MAP",valueDefinition:{description:"",type:"ANY"}}},commands:[uC]},udt=cdt;var mj={};Vt(mj,{SearchCommand:()=>xC,UpgradeInteractiveCommand:()=>bC,default:()=>UIt});Ve();var lye=et(ve("os"));function AC({stdout:t}){if(lye.default.endianness()==="BE")throw new Error("Interactive commands cannot be used on big-endian systems because ink depends on yoga-layout-prebuilt which only supports little-endian architectures");if(!t.isTTY)throw new Error("Interactive commands can only be used inside a TTY environment")}Gt();var CEe=et(N6()),O6={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},ayt=(0,CEe.default)(O6.appId,O6.apiKey).initIndex(O6.indexName),M6=async(t,e=0)=>await ayt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var sv=["regular","dev","peer"],xC=class extends ut{static{this.paths=[["search"]]}static{this.usage=ot.Usage({category:"Interactive commands",description:"open the search interface",details:` + This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. + `,examples:[["Open the search window","yarn search"]]})}async execute(){AC(this.context);let{Gem:e}=await Promise.resolve().then(()=>(UQ(),oj)),{ScrollableItems:r}=await Promise.resolve().then(()=>(jQ(),qQ)),{useKeypress:o}=await Promise.resolve().then(()=>(rv(),bwe)),{useMinistore:a}=await Promise.resolve().then(()=>(fj(),Aj)),{renderForm:n}=await Promise.resolve().then(()=>(VQ(),YQ)),{default:u}=await Promise.resolve().then(()=>et(Uwe())),{Box:A,Text:p}=await Promise.resolve().then(()=>et(ac())),{default:h,useEffect:E,useState:w}=await Promise.resolve().then(()=>et(ln())),D=await ze.find(this.context.cwd,this.context.plugins),b=()=>h.createElement(A,{flexDirection:"row"},h.createElement(A,{flexDirection:"column",width:48},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move between packages.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),C=()=>h.createElement(h.Fragment,null,h.createElement(A,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(A,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(A,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),T=()=>h.createElement(A,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),N=({hit:he,active:De})=>{let[Ee,g]=a(he.name,null);o({active:De},(fe,ie)=>{if(ie.name!=="space")return;if(!Ee){g(sv[0]);return}let Z=sv.indexOf(Ee)+1;Z===sv.length?g(null):g(sv[Z])},[Ee,g]);let me=G.parseIdent(he.name),Ce=G.prettyIdent(D,me);return h.createElement(A,null,h.createElement(A,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},Ce)),h.createElement(A,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},he.owner.name)),h.createElement(A,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},he.version)),h.createElement(A,{width:16,marginLeft:1},h.createElement(p,null,he.humanDownloadsLast30Days)))},U=({name:he,active:De})=>{let[Ee]=a(he,null),g=G.parseIdent(he);return h.createElement(A,null,h.createElement(A,{width:47},h.createElement(p,{bold:!0}," - ",G.prettyIdent(D,g))),sv.map(me=>h.createElement(A,{key:me,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:Ee===me})," ",h.createElement(p,{bold:!0},me)))))},J=()=>h.createElement(A,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),le=await n(({useSubmit:he})=>{let De=a();he(De);let Ee=Array.from(De.keys()).filter(q=>De.get(q)!==null),[g,me]=w(""),[Ce,fe]=w(0),[ie,Z]=w([]),Se=q=>{q.match(/\t| /)||me(q)},Re=async()=>{fe(0);let q=await M6(g);q.query===g&&Z(q.hits)},ht=async()=>{let q=await M6(g,Ce+1);q.query===g&&q.page-1===Ce&&(fe(q.page),Z([...ie,...q.hits]))};return E(()=>{g?Re():Z([])},[g]),h.createElement(A,{flexDirection:"column"},h.createElement(b,null),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(A,{width:41},h.createElement(u,{value:g,onChange:Se,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(C,null)),ie.length?h.createElement(r,{radius:2,loop:!1,children:ie.map(q=>h.createElement(N,{key:q.name,hit:q,active:!1})),willReachEnd:ht}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(A,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(T,null)),Ee.length?Ee.map(q=>h.createElement(U,{key:q,name:q,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(J,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof le>"u")return 1;let ce=Array.from(le.keys()).filter(he=>le.get(he)==="regular"),ue=Array.from(le.keys()).filter(he=>le.get(he)==="dev"),Ie=Array.from(le.keys()).filter(he=>le.get(he)==="peer");return ce.length&&await this.cli.run(["add",...ce]),ue.length&&await this.cli.run(["add","--dev",...ue]),Ie&&await this.cli.run(["add","--peer",...Ie]),0}};Ve();Gt();n8();var Ywe=et(ni()),Wwe=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/;function Vwe(t,e){return t.length>0?[t.slice(0,e)].concat(Vwe(t.slice(e),e)):[]}var bC=class extends ut{static{this.paths=[["upgrade-interactive"]]}static{this.usage=ot.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` + This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. + `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]})}async execute(){AC(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(Gwe(),jwe)),{Pad:r}=await Promise.resolve().then(()=>(dj(),qwe)),{ScrollableItems:o}=await Promise.resolve().then(()=>(jQ(),qQ)),{useMinistore:a}=await Promise.resolve().then(()=>(fj(),Aj)),{renderForm:n}=await Promise.resolve().then(()=>(VQ(),YQ)),{Box:u,Text:A}=await Promise.resolve().then(()=>et(ac())),{default:p,useEffect:h,useRef:E,useState:w}=await Promise.resolve().then(()=>et(ln())),D=await ze.find(this.context.cwd,this.context.plugins),{project:b,workspace:C}=await Qt.find(D,this.context.cwd),T=await Wr.find(D);if(!C)throw new or(b.cwd,this.context.cwd);await b.restoreInstallState({restoreResolutions:!1});let N=this.context.stdout.rows-7,U=(me,Ce)=>{let fe=$pe(me,Ce),ie="";for(let Z of fe)Z.added?ie+=pe.pretty(D,Z.value,"green"):Z.removed||(ie+=Z.value);return ie},J=(me,Ce)=>{if(me===Ce)return Ce;let fe=G.parseRange(me),ie=G.parseRange(Ce),Z=fe.selector.match(Wwe),Se=ie.selector.match(Wwe);if(!Z||!Se)return U(me,Ce);let Re=["gray","red","yellow","green","magenta"],ht=null,q="";for(let nt=1;nt{let ie=await nu.fetchDescriptorFrom(me,fe,{project:b,cache:T,preserveModifier:Ce,workspace:C});return ie!==null?ie.range:me.range},le=async me=>{let Ce=Ywe.default.valid(me.range)?`^${me.range}`:me.range,[fe,ie]=await Promise.all([te(me,me.range,Ce).catch(()=>null),te(me,me.range,"latest").catch(()=>null)]),Z=[{value:null,label:me.range}];return fe&&fe!==me.range?Z.push({value:fe,label:J(me.range,fe)}):Z.push({value:null,label:""}),ie&&ie!==fe&&ie!==me.range?Z.push({value:ie,label:J(me.range,ie)}):Z.push({value:null,label:""}),Z},ce=()=>p.createElement(u,{flexDirection:"row"},p.createElement(u,{flexDirection:"column",width:49},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(u,{flexDirection:"column"},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to abort.")))),ue=()=>p.createElement(u,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(u,{width:50},p.createElement(A,{bold:!0},p.createElement(A,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Latest"))),Ie=({active:me,descriptor:Ce,suggestions:fe})=>{let[ie,Z]=a(Ce.descriptorHash,null),Se=G.stringifyIdent(Ce),Re=Math.max(0,45-Se.length);return p.createElement(p.Fragment,null,p.createElement(u,null,p.createElement(u,{width:45},p.createElement(A,{bold:!0},G.prettyIdent(D,Ce)),p.createElement(r,{active:me,length:Re})),p.createElement(e,{active:me,options:fe,value:ie,skewer:!0,onChange:Z,sizes:[17,17,17]})))},he=({dependencies:me})=>{let[Ce,fe]=w(me.map(()=>null)),ie=E(!0),Z=async Se=>{let Re=await le(Se);return Re.filter(ht=>ht.label!=="").length<=1?null:{descriptor:Se,suggestions:Re}};return h(()=>()=>{ie.current=!1},[]),h(()=>{let Se=Math.trunc(N*1.75),Re=me.slice(0,Se),ht=me.slice(Se),q=Vwe(ht,N),nt=Re.map(Z).reduce(async(Le,Te)=>{await Le;let ke=await Te;ke!==null&&ie.current&&fe(Ke=>{let xe=Ke.findIndex(He=>He===null),tt=[...Ke];return tt[xe]=ke,tt})},Promise.resolve());q.reduce((Le,Te)=>Promise.all(Te.map(ke=>Promise.resolve().then(()=>Z(ke)))).then(async ke=>{ke=ke.filter(Ke=>Ke!==null),await Le,ie.current&&fe(Ke=>{let xe=Ke.findIndex(tt=>tt===null);return Ke.slice(0,xe).concat(ke).concat(Ke.slice(xe+ke.length))})}),nt).then(()=>{ie.current&&fe(Le=>Le.filter(Te=>Te!==null))})},[]),Ce.length?p.createElement(o,{radius:N>>1,children:Ce.map((Se,Re)=>Se!==null?p.createElement(Ie,{key:Re,active:!1,descriptor:Se.descriptor,suggestions:Se.suggestions}):p.createElement(A,{key:Re},"Loading..."))}):p.createElement(A,null,"No upgrades found")},Ee=await n(({useSubmit:me})=>{me(a());let Ce=new Map;for(let ie of b.workspaces)for(let Z of["dependencies","devDependencies"])for(let Se of ie.manifest[Z].values())b.tryWorkspaceByDescriptor(Se)===null&&(Se.range.startsWith("link:")||Ce.set(Se.descriptorHash,Se));let fe=qe.sortMap(Ce.values(),ie=>G.stringifyDescriptor(ie));return p.createElement(u,{flexDirection:"column"},p.createElement(ce,null),p.createElement(ue,null),p.createElement(he,{dependencies:fe}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Ee>"u")return 1;let g=!1;for(let me of b.workspaces)for(let Ce of["dependencies","devDependencies"]){let fe=me.manifest[Ce];for(let ie of fe.values()){let Z=Ee.get(ie.descriptorHash);typeof Z<"u"&&Z!==null&&(fe.set(ie.identHash,G.makeDescriptor(ie,Z)),g=!0)}}return g?await b.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:T}):0}};var MIt={commands:[xC,bC]},UIt=MIt;var yj={};Vt(yj,{LinkFetcher:()=>av,LinkResolver:()=>lv,PortalFetcher:()=>cv,PortalResolver:()=>uv,default:()=>HIt});Ve();St();var Zf="portal:",$f="link:";var av=class{supports(e,r){return!!e.reference.startsWith($f)}getLocalPath(e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(e.reference,{protocol:$f});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(e.reference,{protocol:$f}),n=V.isAbsolute(a)?{packageFs:new En(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new En(Bt.root),prefixPath:V.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new En(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new Gu(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0}}};Ve();St();var lv=class{supportsDescriptor(e,r){return!!e.range.startsWith($f)}supportsLocator(e,r){return!!e.reference.startsWith($f)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice($f.length);return[G.makeLocator(e,`${$f}${Ae.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){return{...e,version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};Ve();St();var cv=class{supports(e,r){return!!e.reference.startsWith(Zf)}getLocalPath(e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(e.reference,{protocol:Zf});if(V.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:V.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=G.parseFileStyleRange(e.reference,{protocol:Zf}),n=V.isAbsolute(a)?{packageFs:new En(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new En(Bt.root),prefixPath:V.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=V.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new En(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,localPath:p}:{packageFs:new Gu(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot}}};Ve();Ve();St();var uv=class{supportsDescriptor(e,r){return!!e.range.startsWith(Zf)}supportsLocator(e,r){return!!e.reference.startsWith(Zf)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(Zf.length);return[G.makeLocator(e,`${Zf}${Ae.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await qe.releaseAfterUseAsync(async()=>await _t.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var _It={fetchers:[av,cv],resolvers:[lv,uv]},HIt=_It;var tG={};Vt(tG,{NodeModulesLinker:()=>Dv,NodeModulesMode:()=>Xj,PnpLooseLinker:()=>Sv,default:()=>n1t});St();Ve();St();St();var Cj=(t,e)=>`${t}@${e}`,Kwe=(t,e)=>{let r=e.indexOf("#"),o=r>=0?e.substring(r+1):e;return Cj(t,o)};var zwe=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),o=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:o,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},u;n.debugLevel>=0&&(u=Date.now());let A=KIt(t,n),p=!1,h=0;do{let E=Ij(A,[A],new Set([A.locator]),new Map,n);p=E.anotherRoundNeeded||E.isGraphChanged,n.fastLookupPossible=!1,h++}while(p);if(n.debugLevel>=0&&console.log(`hoist time: ${Date.now()-u}ms, rounds: ${h}`),n.debugLevel>=1){let E=Av(A);if(Ij(A,[A],new Set([A.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: +${E}, next tree: +${Av(A)}`);let D=Xwe(A);if(D)throw new Error(`${D}, after hoisting finished: +${Av(A)}`)}return n.debugLevel>=2&&console.log(Av(A)),JIt(A)},qIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=n=>{if(!o.has(n)){o.add(n);for(let u of n.hoistedDependencies.values())r.set(u.name,u);for(let u of n.dependencies.values())n.peerNames.has(u.name)||a(u)}};return a(e),r},jIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=new Set,n=(u,A)=>{if(o.has(u))return;o.add(u);for(let h of u.hoistedDependencies.values())if(!A.has(h.name)){let E;for(let w of t)E=w.dependencies.get(h.name),E&&r.set(E.name,E)}let p=new Set;for(let h of u.dependencies.values())p.add(h.name);for(let h of u.dependencies.values())u.peerNames.has(h.name)||n(h,p)};return n(e,a),r},Jwe=(t,e)=>{if(e.decoupled)return e;let{name:r,references:o,ident:a,locator:n,dependencies:u,originalDependencies:A,hoistedDependencies:p,peerNames:h,reasons:E,isHoistBorder:w,hoistPriority:D,dependencyKind:b,hoistedFrom:C,hoistedTo:T}=e,N={name:r,references:new Set(o),ident:a,locator:n,dependencies:new Map(u),originalDependencies:new Map(A),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(E),decoupled:!0,isHoistBorder:w,hoistPriority:D,dependencyKind:b,hoistedFrom:new Map(C),hoistedTo:new Map(T)},U=N.dependencies.get(r);return U&&U.ident==N.ident&&N.dependencies.set(r,N),t.dependencies.set(N.name,N),N},GIt=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let a of t.dependencies.values())t.peerNames.has(a.name)||r.set(a.name,[a.ident]);let o=Array.from(e.keys());o.sort((a,n)=>{let u=e.get(a),A=e.get(n);if(A.hoistPriority!==u.hoistPriority)return A.hoistPriority-u.hoistPriority;{let p=u.dependents.size+u.peerDependents.size;return A.dependents.size+A.peerDependents.size-p}});for(let a of o){let n=a.substring(0,a.indexOf("@",1)),u=a.substring(n.length+1);if(!t.peerNames.has(n)){let A=r.get(n);A||(A=[],r.set(n,A)),A.indexOf(u)<0&&A.push(u)}}return r},Ej=t=>{let e=new Set,r=(o,a=new Set)=>{if(!a.has(o)){a.add(o);for(let n of o.peerNames)if(!t.peerNames.has(n)){let u=t.dependencies.get(n);u&&!e.has(u)&&r(u,a)}e.add(o)}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||r(o);return e},Ij=(t,e,r,o,a,n=new Set)=>{let u=e[e.length-1];if(n.has(u))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(u);let A=zIt(u),p=GIt(u,A),h=t==u?new Map:a.fastLookupPossible?qIt(e):jIt(e),E,w=!1,D=!1,b=new Map(Array.from(p.entries()).map(([T,N])=>[T,N[0]])),C=new Map;do{let T=VIt(t,e,r,h,b,p,o,C,a);T.isGraphChanged&&(D=!0),T.anotherRoundNeeded&&(w=!0),E=!1;for(let[N,U]of p)U.length>1&&!u.dependencies.has(N)&&(b.delete(N),U.shift(),b.set(N,U[0]),E=!0)}while(E);for(let T of u.dependencies.values())if(!u.peerNames.has(T.name)&&!r.has(T.locator)){r.add(T.locator);let N=Ij(t,[...e,T],r,C,a);N.isGraphChanged&&(D=!0),N.anotherRoundNeeded&&(w=!0),r.delete(T.locator)}return{anotherRoundNeeded:w,isGraphChanged:D}},WIt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},YIt=(t,e,r,o,a,n,u,A,{outputReason:p,fastLookupPossible:h})=>{let E,w=null,D=new Set;p&&(E=`${Array.from(e).map(N=>zs(N)).join("\u2192")}`);let b=r[r.length-1],T=!(o.ident===b.ident);if(p&&!T&&(w="- self-reference"),T&&(T=o.dependencyKind!==1,p&&!T&&(w="- workspace")),T&&o.dependencyKind===2&&(T=!WIt(o),p&&!T&&(w="- external soft link with unhoisted dependencies")),T&&(T=!t.peerNames.has(o.name),p&&!T&&(w=`- cannot shadow peer: ${zs(t.originalDependencies.get(o.name).locator)} at ${E}`)),T){let N=!1,U=a.get(o.name);if(N=!U||U.ident===o.ident,p&&!N&&(w=`- filled by: ${zs(U.locator)} at ${E}`),N)for(let J=r.length-1;J>=1;J--){let le=r[J].dependencies.get(o.name);if(le&&le.ident!==o.ident){N=!1;let ce=A.get(b);ce||(ce=new Set,A.set(b,ce)),ce.add(o.name),p&&(w=`- filled by ${zs(le.locator)} at ${r.slice(0,J).map(ue=>zs(ue.locator)).join("\u2192")}`);break}}T=N}if(T&&(T=n.get(o.name)===o.ident,p&&!T&&(w=`- filled by: ${zs(u.get(o.name)[0])} at ${E}`)),T){let N=!0,U=new Set(o.peerNames);for(let J=r.length-1;J>=1;J--){let te=r[J];for(let le of U){if(te.peerNames.has(le)&&te.originalDependencies.has(le))continue;let ce=te.dependencies.get(le);ce&&t.dependencies.get(le)!==ce&&(J===r.length-1?D.add(ce):(D=null,N=!1,p&&(w=`- peer dependency ${zs(ce.locator)} from parent ${zs(te.locator)} was not hoisted to ${E}`))),U.delete(le)}if(!N)break}T=N}if(T&&!h)for(let N of o.hoistedDependencies.values()){let U=a.get(N.name)||t.dependencies.get(N.name);if(!U||N.ident!==U.ident){T=!1,p&&(w=`- previously hoisted dependency mismatch, needed: ${zs(N.locator)}, available: ${zs(U?.locator)}`);break}}return D!==null&&D.size>0?{isHoistable:2,dependsOn:D,reason:w}:{isHoistable:T?0:1,reason:w}},KQ=t=>`${t.name}@${t.locator}`,VIt=(t,e,r,o,a,n,u,A,p)=>{let h=e[e.length-1],E=new Set,w=!1,D=!1,b=(U,J,te,le,ce)=>{if(E.has(le))return;let ue=[...J,KQ(le)],Ie=[...te,KQ(le)],he=new Map,De=new Map;for(let fe of Ej(le)){let ie=YIt(h,r,[h,...U,le],fe,o,a,n,A,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(De.set(fe,ie),ie.isHoistable===2)for(let Z of ie.dependsOn){let Se=he.get(Z.name)||new Set;Se.add(fe.name),he.set(Z.name,Se)}}let Ee=new Set,g=(fe,ie,Z)=>{if(!Ee.has(fe)){Ee.add(fe),De.set(fe,{isHoistable:1,reason:Z});for(let Se of he.get(fe.name)||[])g(le.dependencies.get(Se),ie,p.debugLevel>=2?`- peer dependency ${zs(fe.locator)} from parent ${zs(le.locator)} was not hoisted`:"")}};for(let[fe,ie]of De)ie.isHoistable===1&&g(fe,ie,ie.reason);let me=!1;for(let fe of De.keys())if(!Ee.has(fe)){D=!0;let ie=u.get(le);ie&&ie.has(fe.name)&&(w=!0),me=!0,le.dependencies.delete(fe.name),le.hoistedDependencies.set(fe.name,fe),le.reasons.delete(fe.name);let Z=h.dependencies.get(fe.name);if(p.debugLevel>=2){let Se=Array.from(J).concat([le.locator]).map(ht=>zs(ht)).join("\u2192"),Re=h.hoistedFrom.get(fe.name);Re||(Re=[],h.hoistedFrom.set(fe.name,Re)),Re.push(Se),le.hoistedTo.set(fe.name,Array.from(e).map(ht=>zs(ht.locator)).join("\u2192"))}if(!Z)h.ident!==fe.ident&&(h.dependencies.set(fe.name,fe),ce.add(fe));else for(let Se of fe.references)Z.references.add(Se)}if(le.dependencyKind===2&&me&&(w=!0),p.check){let fe=Xwe(t);if(fe)throw new Error(`${fe}, after hoisting dependencies of ${[h,...U,le].map(ie=>zs(ie.locator)).join("\u2192")}: +${Av(t)}`)}let Ce=Ej(le);for(let fe of Ce)if(Ee.has(fe)){let ie=De.get(fe);if((a.get(fe.name)===fe.ident||!le.reasons.has(fe.name))&&ie.isHoistable!==0&&le.reasons.set(fe.name,ie.reason),!fe.isHoistBorder&&Ie.indexOf(KQ(fe))<0){E.add(le);let Se=Jwe(le,fe);b([...U,le],ue,Ie,Se,T),E.delete(le)}}},C,T=new Set(Ej(h)),N=Array.from(e).map(U=>KQ(U));do{C=T,T=new Set;for(let U of C){if(U.locator===h.locator||U.isHoistBorder)continue;let J=Jwe(h,U);b([],Array.from(r),N,J,T)}}while(T.size>0);return{anotherRoundNeeded:w,isGraphChanged:D}},Xwe=t=>{let e=[],r=new Set,o=new Set,a=(n,u,A)=>{if(r.has(n)||(r.add(n),o.has(n)))return;let p=new Map(u);for(let h of n.dependencies.values())n.peerNames.has(h.name)||p.set(h.name,h);for(let h of n.originalDependencies.values()){let E=p.get(h.name),w=()=>`${Array.from(o).concat([n]).map(D=>zs(D.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let D=u.get(h.name);(D!==E||!D||D.ident!==h.ident)&&e.push(`${w()} - broken peer promise: expected ${h.ident} but found ${D&&D.ident}`)}else{let D=A.hoistedFrom.get(n.name),b=n.hoistedTo.get(h.name),C=`${D?` hoisted from ${D.join(", ")}`:""}`,T=`${b?` hoisted to ${b}`:""}`,N=`${w()}${C}`;E?E.ident!==h.ident&&e.push(`${N} - broken require promise for ${h.name}${T}: expected ${h.ident}, but found: ${E.ident}`):e.push(`${N} - broken require promise: no required dependency ${h.name}${T} found`)}}o.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);o.delete(n)};return a(t,t.dependencies,t),e.join(` +`)},KIt=(t,e)=>{let{identName:r,name:o,reference:a,peerNames:n}=t,u={name:o,references:new Set([a]),locator:Cj(r,a),ident:Kwe(r,a),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(n),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},A=new Map([[t,u]]),p=(h,E)=>{let w=A.get(h),D=!!w;if(!w){let{name:b,identName:C,reference:T,peerNames:N,hoistPriority:U,dependencyKind:J}=h,te=e.hoistingLimits.get(E.locator);w={name:b,references:new Set([T]),locator:Cj(C,T),ident:Kwe(C,T),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(N),reasons:new Map,decoupled:!0,isHoistBorder:te?te.has(b):!1,hoistPriority:U||0,dependencyKind:J||0,hoistedFrom:new Map,hoistedTo:new Map},A.set(h,w)}if(E.dependencies.set(h.name,w),E.originalDependencies.set(h.name,w),D){let b=new Set,C=T=>{if(!b.has(T)){b.add(T),T.decoupled=!1;for(let N of T.dependencies.values())T.peerNames.has(N.name)||C(N)}};C(w)}else for(let b of h.dependencies)p(b,w)};for(let h of t.dependencies)p(h,u);return u},wj=t=>t.substring(0,t.indexOf("@",1)),JIt=t=>{let e={name:t.name,identName:wj(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),o=(a,n,u)=>{let A=r.has(a),p;if(n===a)p=u;else{let{name:h,references:E,locator:w}=a;p={name:h,identName:wj(w),references:E,dependencies:new Set}}if(u.dependencies.add(p),!A){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||o(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())o(a,t,e);return e},zIt=t=>{let e=new Map,r=new Set([t]),o=u=>`${u.name}@${u.ident}`,a=u=>{let A=o(u),p=e.get(A);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(A,p)),p},n=(u,A)=>{let p=!!r.has(A);if(a(A).dependents.add(u.ident),!p){r.add(A);for(let E of A.dependencies.values()){let w=a(E);w.hoistPriority=Math.max(w.hoistPriority,E.hoistPriority),A.peerNames.has(E.name)?w.peerDependents.add(A.ident):n(A,E)}}};for(let u of t.dependencies.values())t.peerNames.has(u.name)||n(t,u);return e},zs=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let o=t.substring(e+1);if(o==="workspace:.")return".";if(o){let a=(o.indexOf("#")>0?o.split("#")[1]:o).replace("npm:","");return o.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`};var Av=t=>{let e=0,r=(a,n,u="")=>{if(e>5e4||n.has(a))return"";e++;let A=Array.from(a.dependencies.values()).sort((h,E)=>h.name===E.name?0:h.name>E.name?1:-1),p="";n.add(a);for(let h=0;h":"")+(D!==E.name?`a:${E.name}:`:"")+zs(E.locator)+(w?` ${w}`:"")} +`,p+=r(E,n,`${u}${h5e4?` +Tree is too large, part of the tree has been dunped +`:"")};var fv=(o=>(o.WORKSPACES="workspaces",o.DEPENDENCIES="dependencies",o.NONE="none",o))(fv||{}),Zwe="node_modules",jh="$wsroot$";var pv=(t,e)=>{let{packageTree:r,hoistingLimits:o,errors:a,preserveSymlinksRequired:n}=ZIt(t,e),u=null;if(a.length===0){let A=zwe(r,{hoistingLimits:o});u=ewt(t,A,e)}return{tree:u,errors:a,preserveSymlinksRequired:n}},yA=t=>`${t.name}@${t.reference}`,vj=t=>{let e=new Map;for(let[r,o]of t.entries())if(!o.dirList){let a=e.get(o.locator);a||(a={target:o.target,linkType:o.linkType,locations:[],aliases:o.aliases},e.set(o.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((o,a)=>{let n=o.split(V.delimiter).length,u=a.split(V.delimiter).length;return a===o?0:n!==u?u-n:a>o?1:-1});return e},$we=(t,e)=>{let r=G.isVirtualLocator(t)?G.devirtualizeLocator(t):t,o=G.isVirtualLocator(e)?G.devirtualizeLocator(e):e;return G.areLocatorsEqual(r,o)},Bj=(t,e,r,o)=>{if(t.linkType!=="SOFT")return!1;let a=Ae.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return V.contains(o,a)===null},XIt=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 o=Ae.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},u=t.getDependencyTreeRoots(),A=new Map,p=new Set,h=(D,b)=>{let C=yA(D);if(p.has(C))return;p.add(C);let T=t.getPackageInformation(D);if(T){let N=b?yA(b):"";if(yA(D)!==N&&T.linkType==="SOFT"&&!D.reference.startsWith("link:")&&!Bj(T,D,t,o)){let U=e1e(T,D,t);(!A.get(U)||D.reference.startsWith("workspace:"))&&A.set(U,D)}for(let[U,J]of T.packageDependencies)J!==null&&(T.packagePeers.has(U)||h(t.getLocator(U,J),D))}};for(let D of u)h(D,null);let E=o.split(V.sep);for(let D of A.values()){let b=t.getPackageInformation(D),T=Ae.toPortablePath(b.packageLocation.slice(0,-1)).split(V.sep).slice(E.length),N=n;for(let U of T){let J=N.children.get(U);J||(J={children:new Map},N.children.set(U,J)),N=J}N.workspaceLocator=D}let w=(D,b)=>{if(D.workspaceLocator){let C=yA(b),T=a.get(C);T||(T=new Set,a.set(C,T)),T.add(D.workspaceLocator)}for(let C of D.children.values())w(C,D.workspaceLocator||b)};for(let D of n.children.values())w(D,n.workspaceLocator);return a},ZIt=(t,e)=>{let r=[],o=!1,a=new Map,n=XIt(t),u=t.getPackageInformation(t.topLevel);if(u===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let A=t.findPackageLocator(u.packageLocation);if(A===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=Ae.toPortablePath(u.packageLocation.slice(0,-1)),h={name:A.name,identName:A.name,reference:A.reference,peerNames:u.packagePeers,dependencies:new Set,dependencyKind:1},E=new Map,w=(b,C)=>`${yA(C)}:${b}`,D=(b,C,T,N,U,J,te,le)=>{let ce=w(b,T),ue=E.get(ce),Ie=!!ue;!Ie&&T.name===A.name&&T.reference===A.reference&&(ue=h,E.set(ce,h));let he=Bj(C,T,t,p);if(!ue){let fe=0;he?fe=2:C.linkType==="SOFT"&&T.name.endsWith(jh)&&(fe=1),ue={name:b,identName:T.name,reference:T.reference,dependencies:new Set,peerNames:fe===1?new Set:C.packagePeers,dependencyKind:fe},E.set(ce,ue)}let De;if(he?De=2:U.linkType==="SOFT"?De=1:De=0,ue.hoistPriority=Math.max(ue.hoistPriority||0,De),le&&!he){let fe=yA({name:N.identName,reference:N.reference}),ie=a.get(fe)||new Set;a.set(fe,ie),ie.add(ue.name)}let Ee=new Map(C.packageDependencies);if(e.project){let fe=e.project.workspacesByCwd.get(Ae.toPortablePath(C.packageLocation.slice(0,-1)));if(fe){let ie=new Set([...Array.from(fe.manifest.peerDependencies.values(),Z=>G.stringifyIdent(Z)),...Array.from(fe.manifest.peerDependenciesMeta.keys())]);for(let Z of ie)Ee.has(Z)||(Ee.set(Z,J.get(Z)||null),ue.peerNames.add(Z))}}let g=yA({name:T.name.replace(jh,""),reference:T.reference}),me=n.get(g);if(me)for(let fe of me)Ee.set(`${fe.name}${jh}`,fe.reference);(C!==U||C.linkType!=="SOFT"||!he&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(te)))&&N.dependencies.add(ue);let Ce=T!==A&&C.linkType==="SOFT"&&!T.name.endsWith(jh)&&!he;if(!Ie&&!Ce){let fe=new Map;for(let[ie,Z]of Ee)if(Z!==null){let Se=t.getLocator(ie,Z),Re=t.getLocator(ie.replace(jh,""),Z),ht=t.getPackageInformation(Re);if(ht===null)throw new Error("Assertion failed: Expected the package to have been registered");let q=Bj(ht,Se,t,p);if(e.validateExternalSoftLinks&&e.project&&q){ht.packageDependencies.size>0&&(o=!0);for(let[Ke,xe]of ht.packageDependencies)if(xe!==null){let tt=G.parseLocator(Array.isArray(xe)?`${xe[0]}@${xe[1]}`:`${Ke}@${xe}`);if(yA(tt)!==yA(Se)){let He=Ee.get(Ke);if(He){let x=G.parseLocator(Array.isArray(He)?`${He[0]}@${He[1]}`:`${Ke}@${He}`);$we(x,tt)||r.push({messageName:71,text:`Cannot link ${G.prettyIdent(e.project.configuration,G.parseIdent(Se.name))} into ${G.prettyLocator(e.project.configuration,G.parseLocator(`${T.name}@${T.reference}`))} dependency ${G.prettyLocator(e.project.configuration,tt)} conflicts with parent dependency ${G.prettyLocator(e.project.configuration,x)}`})}else{let x=fe.get(Ke);if(x){let I=x.target,P=G.parseLocator(Array.isArray(I)?`${I[0]}@${I[1]}`:`${Ke}@${I}`);$we(P,tt)||r.push({messageName:71,text:`Cannot link ${G.prettyIdent(e.project.configuration,G.parseIdent(Se.name))} into ${G.prettyLocator(e.project.configuration,G.parseLocator(`${T.name}@${T.reference}`))} dependency ${G.prettyLocator(e.project.configuration,tt)} conflicts with dependency ${G.prettyLocator(e.project.configuration,P)} from sibling portal ${G.prettyIdent(e.project.configuration,G.parseIdent(x.portal.name))}`})}else fe.set(Ke,{target:tt.reference,portal:Se})}}}}let nt=e.hoistingLimitsByCwd?.get(te),Le=q?te:V.relative(p,Ae.toPortablePath(ht.packageLocation))||Bt.dot,Te=e.hoistingLimitsByCwd?.get(Le);D(ie,ht,Se,ue,C,Ee,Le,nt==="dependencies"||Te==="dependencies"||Te==="workspaces")}}};return D(A.name,u,A,h,u,u.packageDependencies,Bt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:o}};function e1e(t,e,r){let o=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return Ae.toPortablePath(o||t.packageLocation)}function $It(t,e,r){let o=e.getLocator(t.name.replace(jh,""),t.reference),a=e.getPackageInformation(o);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:Ae.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:e1e(a,t,e)}}var ewt=(t,e,r)=>{let o=new Map,a=(E,w,D)=>{let{linkType:b,target:C}=$It(E,t,r);return{locator:yA(E),nodePath:w,target:C,linkType:b,aliases:D}},n=E=>{let[w,D]=E.split("/");return D?{scope:w,name:D}:{scope:null,name:w}},u=new Set,A=(E,w,D)=>{if(u.has(E))return;u.add(E);let b=Array.from(E.references).sort().join("#");for(let C of E.dependencies){let T=Array.from(C.references).sort().join("#");if(C.identName===E.identName.replace(jh,"")&&T===b)continue;let N=Array.from(C.references).sort(),U={name:C.identName,reference:N[0]},{name:J,scope:te}=n(C.name),le=te?[te,J]:[J],ce=V.join(w,Zwe),ue=V.join(ce,...le),Ie=`${D}/${U.name}`,he=a(U,D,N.slice(1)),De=!1;if(he.linkType==="SOFT"&&r.project){let Ee=r.project.workspacesByCwd.get(he.target.slice(0,-1));De=!!(Ee&&!Ee.manifest.name)}if(!C.name.endsWith(jh)&&!De){let Ee=o.get(ue);if(Ee){if(Ee.dirList)throw new Error(`Assertion failed: ${ue} cannot merge dir node with leaf node`);{let Ce=G.parseLocator(Ee.locator),fe=G.parseLocator(he.locator);if(Ee.linkType!==he.linkType)throw new Error(`Assertion failed: ${ue} cannot merge nodes with different link types ${Ee.nodePath}/${G.stringifyLocator(Ce)} and ${D}/${G.stringifyLocator(fe)}`);if(Ce.identHash!==fe.identHash)throw new Error(`Assertion failed: ${ue} cannot merge nodes with different idents ${Ee.nodePath}/${G.stringifyLocator(Ce)} and ${D}/s${G.stringifyLocator(fe)}`);he.aliases=[...he.aliases,...Ee.aliases,G.parseLocator(Ee.locator).reference]}}o.set(ue,he);let g=ue.split("/"),me=g.indexOf(Zwe);for(let Ce=g.length-1;me>=0&&Ce>me;Ce--){let fe=Ae.toPortablePath(g.slice(0,Ce).join(V.sep)),ie=g[Ce],Z=o.get(fe);if(!Z)o.set(fe,{dirList:new Set([ie])});else if(Z.dirList){if(Z.dirList.has(ie))break;Z.dirList.add(ie)}}}A(C,he.linkType==="SOFT"?he.target:ue,Ie)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return o.set(h,p),A(e,h,""),o};Ve();Ve();St();St();sA();Ol();var jj={};Vt(jj,{PnpInstaller:()=>pd,PnpLinker:()=>Yh,UnplugCommand:()=>QC,default:()=>kwt,getPnpPath:()=>Vh,jsInstallUtils:()=>CA,pnpUtils:()=>vv,quotePathIfNeeded:()=>M1e});St();var O1e=ve("url");Ve();Ve();St();St();var t1e={DEFAULT:{collapsed:!1,next:{"*":"DEFAULT"}},TOP_LEVEL:{collapsed:!1,next:{fallbackExclusionList:"FALLBACK_EXCLUSION_LIST",packageRegistryData:"PACKAGE_REGISTRY_DATA","*":"DEFAULT"}},FALLBACK_EXCLUSION_LIST:{collapsed:!1,next:{"*":"FALLBACK_EXCLUSION_ENTRIES"}},FALLBACK_EXCLUSION_ENTRIES:{collapsed:!0,next:{"*":"FALLBACK_EXCLUSION_DATA"}},FALLBACK_EXCLUSION_DATA:{collapsed:!0,next:{"*":"DEFAULT"}},PACKAGE_REGISTRY_DATA:{collapsed:!1,next:{"*":"PACKAGE_REGISTRY_ENTRIES"}},PACKAGE_REGISTRY_ENTRIES:{collapsed:!0,next:{"*":"PACKAGE_STORE_DATA"}},PACKAGE_STORE_DATA:{collapsed:!1,next:{"*":"PACKAGE_STORE_ENTRIES"}},PACKAGE_STORE_ENTRIES:{collapsed:!0,next:{"*":"PACKAGE_INFORMATION_DATA"}},PACKAGE_INFORMATION_DATA:{collapsed:!1,next:{packageDependencies:"PACKAGE_DEPENDENCIES","*":"DEFAULT"}},PACKAGE_DEPENDENCIES:{collapsed:!1,next:{"*":"PACKAGE_DEPENDENCY"}},PACKAGE_DEPENDENCY:{collapsed:!0,next:{"*":"DEFAULT"}}};function twt(t,e,r){let o="";o+="[";for(let a=0,n=t.length;a"u"||(A!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=JQ(p,h,e,r).replace(/^ +/g,""),A+=1)}return a+="}",a}function iwt(t,e,r){let o=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ +`;let u=0;for(let A=0,p=o.length;A"u"||(u!==0&&(n+=",",n+=` +`),n+=a,n+=JSON.stringify(h),n+=": ",n+=JQ(h,E,e,a).replace(/^ +/g,""),u+=1)}return u!==0&&(n+=` +`),n+=r,n+="}",n}function JQ(t,e,r,o){let{next:a}=t1e[r],n=a[t]||a["*"];return r1e(e,n,o)}function r1e(t,e,r){let{collapsed:o}=t1e[e];return Array.isArray(t)?o?twt(t,e,r):rwt(t,e,r):typeof t=="object"&&t!==null?o?nwt(t,e,r):iwt(t,e,r):JSON.stringify(t)}function n1e(t){return r1e(t,"TOP_LEVEL","")}function hv(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function swt(t){let e=new Map,r=hv(t.fallbackExclusionList||[],[({name:o,reference:a})=>o,({name:o,reference:a})=>a]);for(let{name:o,reference:a}of r){let n=e.get(o);typeof n>"u"&&e.set(o,n=new Set),n.add(a)}return Array.from(e).map(([o,a])=>[o,Array.from(a)])}function owt(t){return hv(t.fallbackPool||[],([e])=>e)}function awt(t){let e=[];for(let[r,o]of hv(t.packageRegistry,([a])=>a===null?"0":`1${a}`)){let a=[];e.push([r,a]);for(let[n,{packageLocation:u,packageDependencies:A,packagePeers:p,linkType:h,discardFromLookup:E}]of hv(o,([w])=>w===null?"0":`1${w}`)){let w=[];r!==null&&n!==null&&!A.has(r)&&w.push([r,n]);for(let[C,T]of hv(A.entries(),([N])=>N))w.push([C,T]);let D=p&&p.size>0?Array.from(p):void 0,b=E||void 0;a.push([n,{packageLocation:u,packageDependencies:w,packagePeers:D,linkType:h,discardFromLookup:b}])}}return e}function gv(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:swt(t),fallbackPool:owt(t),packageRegistryData:awt(t)}}var o1e=et(s1e());function a1e(t,e){return[t?`${t} +`:"",`/* eslint-disable */ +`,`// @ts-nocheck +`,`"use strict"; +`,` +`,e,` +`,(0,o1e.default)()].join("")}function lwt(t){return JSON.stringify(t,null,2)}function cwt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ +`)}'`}function uwt(t){return[`const RAW_RUNTIME_STATE = +`,`${cwt(n1e(t))}; + +`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`,` return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); +`,`} +`].join("")}function Awt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`,` const fs = require('fs'); +`,` const path = require('path'); +`,` const pnpDataFilepath = path.resolve(__dirname, ${JSON.stringify(mr.pnpData)}); +`,` return hydrateRuntimeState(JSON.parse(fs.readFileSync(pnpDataFilepath, 'utf8')), {basePath: basePath || __dirname}); +`,`} +`].join("")}function l1e(t){let e=gv(t),r=uwt(e);return a1e(t.shebang,r)}function c1e(t){let e=gv(t),r=Awt(),o=a1e(t.shebang,r);return{dataFile:lwt(e),loaderFile:o}}St();function Sj(t,{basePath:e}){let r=Ae.toPortablePath(e),o=V.resolve(r),a=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,n=new Map,u=new Map(t.packageRegistryData.map(([w,D])=>[w,new Map(D.map(([b,C])=>{if(w===null!=(b===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let T=C.discardFromLookup??!1,N={name:w,reference:b},U=n.get(C.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&T,T||(U.locator=N)):n.set(C.packageLocation,{locator:N,discardFromLookup:T});let J=null;return[b,{packageDependencies:new Map(C.packageDependencies),packagePeers:new Set(C.packagePeers),linkType:C.linkType,discardFromLookup:T,get packageLocation(){return J||(J=V.join(o,C.packageLocation))}}]}))])),A=new Map(t.fallbackExclusionList.map(([w,D])=>[w,new Set(D)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,E=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:E,fallbackExclusionList:A,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:u}}St();St();var tp=ve("module"),fd=ve("url"),Nj=ve("util");var Qo=ve("url");var p1e=et(ve("assert"));var Pj=Array.isArray,dv=JSON.stringify,mv=Object.getOwnPropertyNames,Ad=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),xj=(t,e)=>RegExp.prototype.exec.call(t,e),bj=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),Gh=(t,...e)=>String.prototype.endsWith.apply(t,e),kj=(t,...e)=>String.prototype.includes.apply(t,e),Qj=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),yv=(t,...e)=>String.prototype.indexOf.apply(t,e),u1e=(t,...e)=>String.prototype.replace.apply(t,e),Wh=(t,...e)=>String.prototype.slice.apply(t,e),EA=(t,...e)=>String.prototype.startsWith.apply(t,e),A1e=Map,f1e=JSON.parse;function Ev(t,e,r){return class extends r{constructor(...o){super(e(...o)),this.code=t,this.name=`${r.name} [${t}]`}}}var h1e=Ev("ERR_PACKAGE_IMPORT_NOT_DEFINED",(t,e,r)=>`Package import specifier "${t}" is not defined${e?` in package ${e}package.json`:""} imported from ${r}`,TypeError),Fj=Ev("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),g1e=Ev("ERR_INVALID_PACKAGE_TARGET",(t,e,r,o=!1,a=void 0)=>{let n=typeof r=="string"&&!o&&r.length&&!EA(r,"./");return e==="."?((0,p1e.default)(o===!1),`Invalid "exports" main target ${dv(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${o?"imports":"exports"}" target ${dv(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),Cv=Ev("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),d1e=Ev("ERR_PACKAGE_PATH_NOT_EXPORTED",(t,e,r=void 0)=>e==="."?`No "exports" main defined in ${t}package.json${r?` imported from ${r}`:""}`:`Package subpath '${e}' is not defined by "exports" in ${t}package.json${r?` imported from ${r}`:""}`,Error);var XQ=ve("url");function m1e(t,e){let r=Object.create(null);for(let o=0;oe):t+e}Iv(r,t,o,u,a)}xj(E1e,Wh(t,2))!==null&&Iv(r,t,o,u,a);let p=new URL(t,o),h=p.pathname,E=new URL(".",o).pathname;if(EA(h,E)||Iv(r,t,o,u,a),e==="")return p;if(xj(E1e,e)!==null){let w=n?u1e(r,"*",()=>e):r+e;hwt(w,o,u,a)}return n?new URL(bj(C1e,p.href,()=>e)):new URL(e,p)}function dwt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function kC(t,e,r,o,a,n,u,A){if(typeof e=="string")return gwt(e,r,o,t,a,n,u,A);if(Pj(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:o===-1||t.length>e.length?-1:e.length>t.length?1:0}function mwt(t,e,r){if(typeof t=="string"||Pj(t))return!0;if(typeof t!="object"||t===null)return!1;let o=mv(t),a=!1,n=0;for(let u=0;u=h.length&&Gh(e,w)&&w1e(n,h)===1&&Qj(h,"*")===E&&(n=h,u=Wh(e,E,e.length-w.length))}}if(n){let p=r[n],h=kC(t,p,u,n,o,!0,!1,a);return h==null&&Rj(e,t,o),h}Rj(e,t,o)}function v1e({name:t,base:e,conditions:r,readFileSyncFn:o}){if(t==="#"||EA(t,"#/")||Gh(t,"/")){let u="is not a valid internal imports specifier name";throw new Fj(t,u,(0,Qo.fileURLToPath)(e))}let a,n=y1e(e,o);if(n.exists){a=(0,Qo.pathToFileURL)(n.pjsonPath);let u=n.imports;if(u)if(Ad(u,t)&&!kj(t,"*")){let A=kC(a,u[t],"",t,e,!1,!0,r);if(A!=null)return A}else{let A="",p,h=mv(u);for(let E=0;E=w.length&&Gh(t,b)&&w1e(A,w)===1&&Qj(w,"*")===D&&(A=w,p=Wh(t,D,t.length-b.length))}}if(A){let E=u[A],w=kC(a,E,p,A,e,!0,!0,r);if(w!=null)return w}}}pwt(t,a,e)}St();var Ewt=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function ts(t,e,r={},o){o??=Ewt.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:o},pnpCode:{...a,value:t},data:{...a,value:r}})}function pu(t){return Ae.normalize(Ae.fromPortablePath(t))}var x1e=et(S1e());function b1e(t){return Cwt(),Lj[t]}var Lj;function Cwt(){Lj||(Lj={"--conditions":[],...P1e(Iwt()),...P1e(process.execArgv)})}function P1e(t){return(0,x1e.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function Iwt(){let t=[],e=wwt(process.env.NODE_OPTIONS||"",t);return t.length,e}function wwt(t,e){let r=[],o=!1,a=!0;for(let n=0;nparseInt(t,10)),k1e=Ha>19||Ha===19&&ep>=2||Ha===18&&ep>=13,tzt=Ha===20&&ep<6||Ha===19&&ep>=3,rzt=Ha>19||Ha===19&&ep>=6,nzt=Ha>=21||Ha===20&&ep>=10||Ha===18&&ep>=19,izt=Ha>=21||Ha===20&&ep>=10||Ha===18&&ep>=20,szt=Ha>=22;function Q1e(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>Ae.fromPortablePath(qs.resolveVirtual(Ae.toPortablePath(e)))),k1e)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function Oj(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,o=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,u=/\/$/,A=/^\.{0,2}\//,p={name:null,reference:null},h=[],E=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Le of["react-scripts","gatsby"]){let Te=t.packageRegistry.get(Le);if(Te)for(let ke of Te.keys()){if(ke===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Le,reference:ke})}}let{ignorePattern:w,packageRegistry:D,packageLocatorsByLocations:b}=t;function C(Le,Te){return{fn:Le,args:Te,error:null,result:null}}function T(Le){let Te=process.stderr?.hasColors?.()??process.stdout.isTTY,ke=(tt,He)=>`\x1B[${tt}m${He}\x1B[0m`,Ke=Le.error;console.error(Ke?ke("31;1",`\u2716 ${Le.error?.message.replace(/\n.*/s,"")}`):ke("33;1","\u203C Resolution")),Le.args.length>0&&console.error();for(let tt of Le.args)console.error(` ${ke("37;1","In \u2190")} ${(0,Nj.inspect)(tt,{colors:Te,compact:!0})}`);Le.result&&(console.error(),console.error(` ${ke("37;1","Out \u2192")} ${(0,Nj.inspect)(Le.result,{colors:Te,compact:!0})}`));let xe=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(xe.length>0){console.error();for(let tt of xe)console.error(` ${ke("38;5;244",tt)}`)}console.error()}function N(Le,Te){if(e.allowDebug===!1)return Te;if(Number.isFinite(o)){if(o>=2)return(...ke)=>{let Ke=C(Le,ke);try{return Ke.result=Te(...ke)}catch(xe){throw Ke.error=xe}finally{T(Ke)}};if(o>=1)return(...ke)=>{try{return Te(...ke)}catch(Ke){let xe=C(Le,ke);throw xe.error=Ke,T(xe),Ke}}}return Te}function U(Le){let Te=g(Le);if(!Te)throw ts("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return Te}function J(Le){if(Le.name===null)return!0;for(let Te of t.dependencyTreeRoots)if(Te.name===Le.name&&Te.reference===Le.reference)return!0;return!1}let te=new Set(["node","require",...b1e("--conditions")]);function le(Le,Te=te,ke){let Ke=fe(V.join(Le,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(Ke===null)throw ts("INTERNAL",`The locator that owns the "${Le}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:xe}=U(Ke),tt=V.join(xe,mr.manifest);if(!e.fakeFs.existsSync(tt))return null;let He=JSON.parse(e.fakeFs.readFileSync(tt,"utf8"));if(He.exports==null)return null;let x=V.contains(xe,Le);if(x===null)throw ts("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");x!=="."&&!A.test(x)&&(x=`./${x}`);try{let I=B1e({packageJSONUrl:(0,fd.pathToFileURL)(Ae.fromPortablePath(tt)),packageSubpath:x,exports:He.exports,base:ke?(0,fd.pathToFileURL)(Ae.fromPortablePath(ke)):null,conditions:Te});return Ae.toPortablePath((0,fd.fileURLToPath)(I))}catch(I){throw ts("EXPORTS_RESOLUTION_FAILED",I.message,{unqualifiedPath:pu(Le),locator:Ke,pkgJson:He,subpath:pu(x),conditions:Te},I.code)}}function ce(Le,Te,{extensions:ke}){let Ke;try{Te.push(Le),Ke=e.fakeFs.statSync(Le)}catch{}if(Ke&&!Ke.isDirectory())return e.fakeFs.realpathSync(Le);if(Ke&&Ke.isDirectory()){let xe;try{xe=JSON.parse(e.fakeFs.readFileSync(V.join(Le,mr.manifest),"utf8"))}catch{}let tt;if(xe&&xe.main&&(tt=V.resolve(Le,xe.main)),tt&&tt!==Le){let He=ce(tt,Te,{extensions:ke});if(He!==null)return He}}for(let xe=0,tt=ke.length;xe{let x=JSON.stringify(He.name);if(Ke.has(x))return;Ke.add(x);let I=me(He);for(let P of I)if(U(P).packagePeers.has(Le))xe(P);else{let R=ke.get(P.name);typeof R>"u"&&ke.set(P.name,R=new Set),R.add(P.reference)}};xe(Te);let tt=[];for(let He of[...ke.keys()].sort())for(let x of[...ke.get(He)].sort())tt.push({name:He,reference:x});return tt}function fe(Le,{resolveIgnored:Te=!1,includeDiscardFromLookup:ke=!1}={}){if(he(Le)&&!Te)return null;let Ke=V.relative(t.basePath,Le);Ke.match(n)||(Ke=`./${Ke}`),Ke.endsWith("/")||(Ke=`${Ke}/`);do{let xe=b.get(Ke);if(typeof xe>"u"||xe.discardFromLookup&&!ke){Ke=Ke.substring(0,Ke.lastIndexOf("/",Ke.length-2)+1);continue}return xe.locator}while(Ke!=="");return null}function ie(Le){try{return e.fakeFs.readFileSync(Ae.toPortablePath(Le),"utf8")}catch(Te){if(Te.code==="ENOENT")return;throw Te}}function Z(Le,Te,{considerBuiltins:ke=!0}={}){if(Le.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Le==="pnpapi")return Ae.toPortablePath(e.pnpapiResolution);if(ke&&(0,tp.isBuiltin)(Le))return null;let Ke=pu(Le),xe=Te&&pu(Te);if(Te&&he(Te)&&(!V.isAbsolute(Le)||fe(Le)===null)){let x=Ie(Le,Te);if(x===!1)throw ts("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: "${Ke}" +Required by: ${xe} +`,{request:Ke,issuer:xe});return Ae.toPortablePath(x)}let tt,He=Le.match(a);if(He){if(!Te)throw ts("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:Ke,issuer:xe});let[,x,I]=He,P=fe(Te);if(!P){let Fe=Ie(Le,Te);if(Fe===!1)throw ts("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: "${Ke}" +Required by: ${xe} +`,{request:Ke,issuer:xe});return Ae.toPortablePath(Fe)}let R=U(P).packageDependencies.get(x),z=null;if(R==null&&P.name!==null){let Fe=t.fallbackExclusionList.get(P.name);if(!Fe||!Fe.has(P.reference)){for(let Et=0,qt=h.length;EtJ(lt))?X=ts("MISSING_PEER_DEPENDENCY",`${P.name} tried to access ${x} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==Ke?` (via "${Ke}")`:""} +Required by: ${P.name}@${P.reference} (via ${xe}) +${Fe.map(lt=>`Ancestor breaking the chain: ${lt.name}@${lt.reference} +`).join("")} +`,{request:Ke,issuer:xe,issuerLocator:Object.assign({},P),dependencyName:x,brokenAncestors:Fe}):X=ts("MISSING_PEER_DEPENDENCY",`${P.name} tried to access ${x} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==Ke?` (via "${Ke}")`:""} +Required by: ${P.name}@${P.reference} (via ${xe}) + +${Fe.map(lt=>`Ancestor breaking the chain: ${lt.name}@${lt.reference} +`).join("")} +`,{request:Ke,issuer:xe,issuerLocator:Object.assign({},P),dependencyName:x,brokenAncestors:Fe})}else R===void 0&&(!ke&&(0,tp.isBuiltin)(Le)?J(P)?X=ts("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}. 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 ${x} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==Ke?` (via "${Ke}")`:""} +Required by: ${xe} +`,{request:Ke,issuer:xe,dependencyName:x}):X=ts("UNDECLARED_DEPENDENCY",`${P.name} tried to access ${x}. 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 ${x} isn't otherwise declared in ${P.name}'s dependencies, this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==Ke?` (via "${Ke}")`:""} +Required by: ${xe} +`,{request:Ke,issuer:xe,issuerLocator:Object.assign({},P),dependencyName:x}):J(P)?X=ts("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==Ke?` (via "${Ke}")`:""} +Required by: ${xe} +`,{request:Ke,issuer:xe,dependencyName:x}):X=ts("UNDECLARED_DEPENDENCY",`${P.name} tried to access ${x}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==Ke?` (via "${Ke}")`:""} +Required by: ${P.name}@${P.reference} (via ${xe}) +`,{request:Ke,issuer:xe,issuerLocator:Object.assign({},P),dependencyName:x}));if(R==null){if(z===null||X===null)throw X||new Error("Assertion failed: Expected an error to have been set");R=z;let Fe=X.message.replace(/\n.*/g,"");X.message=Fe,!E.has(Fe)&&o!==0&&(E.add(Fe),process.emitWarning(X))}let $=Array.isArray(R)?{name:R[0],reference:R[1]}:{name:x,reference:R},se=U($);if(!se.packageLocation)throw ts("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: ${$.name}@${$.reference}${$.name!==Ke?` (via "${Ke}")`:""} +Required by: ${P.name}@${P.reference} (via ${xe}) +`,{request:Ke,issuer:xe,dependencyLocator:Object.assign({},$)});let be=se.packageLocation;I?tt=V.join(be,I):tt=be}else if(V.isAbsolute(Le))tt=V.normalize(Le);else{if(!Te)throw ts("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:Ke,issuer:xe});let x=V.resolve(Te);Te.match(u)?tt=V.normalize(V.join(x,Le)):tt=V.normalize(V.join(V.dirname(x),Le))}return V.normalize(tt)}function Se(Le,Te,ke=te,Ke){if(n.test(Le))return Te;let xe=le(Te,ke,Ke);return xe?V.normalize(xe):Te}function Re(Le,{extensions:Te=Object.keys(tp.Module._extensions)}={}){let ke=[],Ke=ce(Le,ke,{extensions:Te});if(Ke)return V.normalize(Ke);{Q1e(ke.map(He=>Ae.fromPortablePath(He)));let xe=pu(Le),tt=fe(Le);if(tt){let{packageLocation:He}=U(tt),x=!0;try{e.fakeFs.accessSync(He)}catch(I){if(I?.code==="ENOENT")x=!1;else{let P=(I?.message??I??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw ts("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${P}). + +Missing package: ${tt.name}@${tt.reference} +Expected package location: ${pu(He)} +`,{unqualifiedPath:xe,extensions:Te})}}if(!x){let I=He.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 ts("QUALIFIED_PATH_RESOLUTION_FAILED",`${I} + +Missing package: ${tt.name}@${tt.reference} +Expected package location: ${pu(He)} +`,{unqualifiedPath:xe,extensions:Te})}}throw ts("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. + +Source path: ${xe} +${ke.map(He=>`Not found: ${pu(He)} +`).join("")}`,{unqualifiedPath:xe,extensions:Te})}}function ht(Le,Te,ke){if(!Te)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let Ke=v1e({name:Le,base:(0,fd.pathToFileURL)(Ae.fromPortablePath(Te)),conditions:ke.conditions??te,readFileSyncFn:ie});if(Ke instanceof URL)return Re(Ae.toPortablePath((0,fd.fileURLToPath)(Ke)),{extensions:ke.extensions});if(Ke.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return q(Ke,Te,ke)}function q(Le,Te,ke={}){try{if(Le.startsWith("#"))return ht(Le,Te,ke);let{considerBuiltins:Ke,extensions:xe,conditions:tt}=ke,He=Z(Le,Te,{considerBuiltins:Ke});if(Le==="pnpapi")return He;if(He===null)return null;let x=()=>Te!==null?he(Te):!1,I=(!Ke||!(0,tp.isBuiltin)(Le))&&!x()?Se(Le,He,tt,Te):He;return Re(I,{extensions:xe})}catch(Ke){throw Object.hasOwn(Ke,"pnpCode")&&Object.assign(Ke.data,{request:pu(Le),issuer:Te&&pu(Te)}),Ke}}function nt(Le){let Te=V.normalize(Le),ke=qs.resolveVirtual(Te);return ke!==Te?ke:null}return{VERSIONS:De,topLevel:Ee,getLocator:(Le,Te)=>Array.isArray(Te)?{name:Te[0],reference:Te[1]}:{name:Le,reference:Te},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Le=[];for(let[Te,ke]of D)for(let Ke of ke.keys())Te!==null&&Ke!==null&&Le.push({name:Te,reference:Ke});return Le},getPackageInformation:Le=>{let Te=g(Le);if(Te===null)return null;let ke=Ae.fromPortablePath(Te.packageLocation);return{...Te,packageLocation:ke}},findPackageLocator:Le=>fe(Ae.toPortablePath(Le)),resolveToUnqualified:N("resolveToUnqualified",(Le,Te,ke)=>{let Ke=Te!==null?Ae.toPortablePath(Te):null,xe=Z(Ae.toPortablePath(Le),Ke,ke);return xe===null?null:Ae.fromPortablePath(xe)}),resolveUnqualified:N("resolveUnqualified",(Le,Te)=>Ae.fromPortablePath(Re(Ae.toPortablePath(Le),Te))),resolveRequest:N("resolveRequest",(Le,Te,ke)=>{let Ke=Te!==null?Ae.toPortablePath(Te):null,xe=q(Ae.toPortablePath(Le),Ke,ke);return xe===null?null:Ae.fromPortablePath(xe)}),resolveVirtual:N("resolveVirtual",Le=>{let Te=nt(Ae.toPortablePath(Le));return Te!==null?Ae.fromPortablePath(Te):null})}}St();var F1e=(t,e,r)=>{let o=gv(t),a=Sj(o,{basePath:e}),n=Ae.join(e,mr.pnpCjs);return Oj(a,{fakeFs:r,pnpapiResolution:n})};var Uj=et(T1e());Gt();var CA={};Vt(CA,{checkManifestCompatibility:()=>L1e,extractBuildRequest:()=>ZQ,getExtractHint:()=>_j,hasBindingGyp:()=>Hj});Ve();St();function L1e(t){return G.isPackageCompatible(t,Xi.getArchitectureSet())}function ZQ(t,e,r,{configuration:o}){let a=[];for(let n of["preinstall","install","postinstall"])e.manifest.scripts.has(n)&&a.push({type:0,script:n});return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&a.push({type:1,script:"node-gyp rebuild"}),a.length===0?null:t.linkType!=="HARD"?{skipped:!0,explain:n=>n.reportWarningOnce(6,`${G.prettyLocator(o,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?{skipped:!0,explain:n=>n.reportInfoOnce(5,`${G.prettyLocator(o,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!o.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${G.prettyLocator(o,t)} lists build scripts, but all build scripts have been disabled.`)}:L1e(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${G.prettyLocator(o,t)} The ${Xi.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var vwt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function _j(t){return t.packageFs.getExtractHint({relevantExtensions:vwt})}function Hj(t){let e=V.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var vv={};Vt(vv,{getUnpluggedPath:()=>Bv});Ve();St();function Bv(t,{configuration:e}){return V.resolve(e.get("pnpUnpluggedFolder"),G.slugifyLocator(t))}var Dwt=new Set([G.makeIdent(null,"open").identHash,G.makeIdent(null,"opn").identHash]),Yh=class{constructor(){this.mode="strict";this.pnpCache=new Map}getCustomDataKey(){return JSON.stringify({name:"PnpLinker",version:2})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let o=Vh(r.project).cjs;if(!ae.existsSync(o))throw new it(`The project in ${pe.pretty(r.project.configuration,`${r.project.cwd}/package.json`,pe.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=qe.getFactoryWithDefault(this.pnpCache,o,()=>qe.dynamicRequire(o,{cachingStrategy:qe.CachingStrategy.FsTime})),n={name:G.stringifyIdent(e),reference:e.reference},u=a.getPackageInformation(n);if(!u)throw new it(`Couldn't find ${G.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return Ae.toPortablePath(u.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=Vh(r.project).cjs;if(!ae.existsSync(o))return null;let n=qe.getFactoryWithDefault(this.pnpCache,o,()=>qe.dynamicRequire(o,{cachingStrategy:qe.CachingStrategy.FsTime})).findPackageLocator(Ae.fromPortablePath(e));return n?G.makeLocator(G.parseIdent(n.name),n.reference):null}makeInstaller(e){return new pd(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},pd=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new qe.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}attachCustomData(e){this.customData=e}async installPackage(e,r,o){let a=G.stringifyIdent(e),n=e.reference,u=!!this.opts.project.tryWorkspaceByLocator(e),A=G.isVirtualLocator(e),p=e.peerDependencies.size>0&&!A,h=!p&&!u,E=!p&&e.linkType!=="SOFT",w,D;if(h||E){let te=A?G.devirtualizeLocator(e):e;w=this.customData.store.get(te.locatorHash),typeof w>"u"&&(w=await Swt(r),e.linkType==="HARD"&&this.customData.store.set(te.locatorHash,w)),w.manifest.type==="module"&&(this.isESMLoaderRequired=!0),D=this.opts.project.getDependencyMeta(te,e.version)}let b=h?ZQ(e,w,D,{configuration:this.opts.project.configuration}):null,C=E?await this.unplugPackageIfNeeded(e,w,r,D,o):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 T=V.resolve(C.getRealPath(),r.prefixPath),N=qj(this.opts.project.cwd,T),U=new Map,J=new Set;if(A){for(let te of e.peerDependencies.values())U.set(G.stringifyIdent(te),null),J.add(G.stringifyIdent(te));if(!u){let te=G.devirtualizeLocator(e);this.virtualTemplates.set(te.locatorHash,{location:qj(this.opts.project.cwd,qs.resolveVirtual(T)),locator:te})}}return qe.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:N,packageDependencies:U,packagePeers:J,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:T,buildRequest:b}}async attachInternalDependencies(e,r){let o=this.getPackageInformation(e);for(let[a,n]of r){let u=G.areIdentsEqual(a,n)?n.reference:[G.stringifyIdent(n),n.reference];o.packageDependencies.set(G.stringifyIdent(a),u)}}async attachExternalDependents(e,r){for(let o of r)this.getDiskInformation(o).packageDependencies.set(G.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=Vh(this.opts.project);if(this.isEsmEnabled()||await ae.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await ae.removePromise(e.cjs),await ae.removePromise(e.data),await ae.removePromise(e.esmLoader),await ae.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:E,location:w}of this.virtualTemplates.values())qe.getMapWithDefault(this.packageRegistry,G.stringifyIdent(E)).set(E.reference,{packageLocation:w,packageDependencies:new Map,packagePeers:new Set,linkType:"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"),o=this.opts.project.workspaces.map(({anchoredLocator:E})=>({name:G.stringifyIdent(E),reference:E.reference})),a=r!=="none",n=[],u=new Map,A=qe.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let E of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(E)&&n.push({name:G.stringifyIdent(E),reference:E.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:o,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:u,ignorePattern:A,packageRegistry:p,shebang:h}),{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=Vh(this.opts.project),o=await this.locateNodeModules(e.ignorePattern);if(o.length>0){this.opts.report.reportWarning(31,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let n of o)await ae.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=l1e(e);await ae.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await ae.removePromise(r.data)}else{let{dataFile:n,loaderFile:u}=c1e(e);await ae.changeFilePromise(r.cjs,u,{automaticNewlines:!0,mode:493}),await ae.changeFilePromise(r.data,n,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,"ESM support for PnP uses the experimental loader API and is therefore experimental"),await ae.changeFilePromise(r.esmLoader,(0,Uj.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await ae.removePromise(a);else for(let n of await ae.readdirPromise(a)){let u=V.resolve(a,n);this.unpluggedPaths.has(u)||await ae.removePromise(u)}}async locateNodeModules(e){let r=[],o=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=V.join(a.cwd,"node_modules");if(o&&o.test(V.relative(this.opts.project.cwd,a.cwd))||!ae.existsSync(n))continue;let u=await ae.readdirPromise(n,{withFileTypes:!0}),A=u.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(A.length===u.length)r.push(n);else for(let p of A)r.push(V.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,o,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,o,n):o.packageFs}shouldBeUnplugged(e,r,o){return typeof o.unplugged<"u"?o.unplugged:Dwt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(ZQ(e,r,o,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,o){let a=Bv(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new ju(a,{baseFs:r.packageFs,pathUtils:V}):(this.unpluggedPaths.add(a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=V.join(a,r.prefixPath,".ready");await ae.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await ae.mkdirPromise(a,{recursive:!0}),await ae.copyPromise(a,Bt.dot,{baseFs:r.packageFs,overwrite:!1}),await ae.writeFilePromise(n,""))})),new En(a))}getPackageInformation(e){let r=G.stringifyIdent(e),o=e.reference,a=this.packageRegistry.get(r);if(!a)throw new Error(`Assertion failed: The package information store should have been available (for ${G.prettyIdent(this.opts.project.configuration,e)})`);let n=a.get(o);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${G.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){let r=qe.getMapWithDefault(this.packageRegistry,"@@disk"),o=qj(this.opts.project.cwd,e);return qe.getFactoryWithDefault(r,o,()=>({packageLocation:o,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function qj(t,e){let r=V.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function Swt(t){let e=await _t.tryFind(t.prefixPath,{baseFs:t.packageFs})??new _t,r=new Set(["preinstall","install","postinstall"]);for(let o of e.scripts.keys())r.has(o)||e.scripts.delete(o);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:_j(t),hasBindingGyp:Hj(t)}}}Ve();Ve();Gt();var N1e=et(Xo());var QC=class extends ut{constructor(){super(...arguments);this.all=de.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=de.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=de.Rest()}static{this.paths=[["unplug"]]}static{this.usage=ot.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 '*'"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n=await Wr.find(r);if(!a)throw new or(o.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new it("This command can only be used if the `nodeLinker` option is set to `pnp`");await o.restoreInstallState();let u=new Set(this.patterns),A=this.patterns.map(b=>{let C=G.parseDescriptor(b),T=C.range!=="unknown"?C:G.makeDescriptor(C,"*");if(!Ur.validRange(T.range))throw new it(`The range of the descriptor patterns must be a valid semver range (${G.prettyDescriptor(r,T)})`);return N=>{let U=G.stringifyIdent(N);return!N1e.default.isMatch(U,G.stringifyIdent(T))||N.version&&!Ur.satisfiesWithPrereleases(N.version,T.range)?!1:(u.delete(b),!0)}}),p=()=>{let b=[];for(let C of o.storedPackages.values())!o.tryWorkspaceByLocator(C)&&!G.isVirtualLocator(C)&&A.some(T=>T(C))&&b.push(C);return b},h=b=>{let C=new Set,T=[],N=(U,J)=>{if(C.has(U.locatorHash))return;let te=!!o.tryWorkspaceByLocator(U);if(!(J>0&&!this.recursive&&te)&&(C.add(U.locatorHash),!o.tryWorkspaceByLocator(U)&&A.some(le=>le(U))&&T.push(U),!(J>0&&!this.recursive)))for(let le of U.dependencies.values()){let ce=o.storedResolutions.get(le.descriptorHash);if(!ce)throw new Error("Assertion failed: The resolution should have been registered");let ue=o.storedPackages.get(ce);if(!ue)throw new Error("Assertion failed: The package should have been registered");N(ue,J+1)}};for(let U of b)N(U.anchoredPackage,0);return T},E,w;if(this.all&&this.recursive?(E=p(),w="the project"):this.all?(E=h(o.workspaces),w="any workspace"):(E=h([a]),w="this workspace"),u.size>1)throw new it(`Patterns ${pe.prettyList(r,u,pe.Type.CODE)} don't match any packages referenced by ${w}`);if(u.size>0)throw new it(`Pattern ${pe.prettyList(r,u,pe.Type.CODE)} doesn't match any packages referenced by ${w}`);E=qe.sortMap(E,b=>G.stringifyLocator(b));let D=await Lt.start({configuration:r,stdout:this.context.stdout,json:this.json},async b=>{for(let C of E){let T=C.version??"unknown",N=o.topLevelWorkspace.manifest.ensureDependencyMeta(G.makeDescriptor(C,T));N.unplugged=!0,b.reportInfo(0,`Will unpack ${G.prettyLocator(r,C)} to ${pe.pretty(r,Bv(C,{configuration:r}),pe.Type.PATH)}`),b.reportJson({locator:G.stringifyLocator(C),version:T})}await o.topLevelWorkspace.persistManifest(),this.json||b.reportSeparator()});return D.hasErrors()?D.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};var Vh=t=>({cjs:V.join(t.cwd,mr.pnpCjs),data:V.join(t.cwd,mr.pnpData),esmLoader:V.join(t.cwd,mr.pnpEsmLoader)}),M1e=t=>/\s/.test(t)?JSON.stringify(t):t;async function Pwt(t,e,r){let o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(o," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n||void 0;return}let u=Vh(t),A=`--require ${M1e(Ae.fromPortablePath(u.cjs))}`;ae.existsSync(u.esmLoader)&&(A=`${A} --experimental-loader ${(0,O1e.pathToFileURL)(Ae.fromPortablePath(u.esmLoader)).href}`),ae.existsSync(u.cjs)&&(e.NODE_OPTIONS=n?`${A} ${n}`:A)}async function xwt(t,e){let r=Vh(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var bwt={hooks:{populateYarnPaths:xwt,setupScriptEnvironment:Pwt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "pnpm", or "node-modules"',type:"STRING",default:"pnp"},winLinkType:{description:"Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.",type:"STRING",values:["junctions","symlinks"],default:"junctions"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:"STRING",default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:"STRING",default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:"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:"BOOLEAN",default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:"BOOLEAN",default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:"STRING",default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:"ABSOLUTE_PATH",default:"./.yarn/unplugged"}},linkers:[Yh],commands:[QC]},kwt=bwt;var Y1e=et(j1e());Gt();var zj=et(ve("crypto")),V1e=et(ve("fs")),K1e=1,xi="node_modules",$Q=".bin",J1e=".yarn-state.yml",Vwt=1e3,Xj=(o=>(o.CLASSIC="classic",o.HARDLINKS_LOCAL="hardlinks-local",o.HARDLINKS_GLOBAL="hardlinks-global",o))(Xj||{}),Dv=class{constructor(){this.installStateCache=new Map}getCustomDataKey(){return JSON.stringify({name:"NodeModulesLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let o=r.project.tryWorkspaceByLocator(e);if(o)return o.cwd;let a=await qe.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await Jj(r.project,{unrollAliases:!0}));if(a===null)throw new it("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let n=a.locatorMap.get(G.stringifyLocator(e));if(!n){let p=new it(`Couldn't find ${G.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw p.code="LOCATOR_NOT_INSTALLED",p}let u=n.locations.sort((p,h)=>p.split(V.sep).length-h.split(V.sep).length),A=V.join(r.project.configuration.startingCwd,xi);return u.find(p=>V.contains(A,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=await qe.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await Jj(r.project,{unrollAliases:!0}));if(o===null)return null;let{locationRoot:a,segments:n}=eF(V.resolve(e),{skipPrefix:r.project.cwd}),u=o.locationTree.get(a);if(!u)return null;let A=u.locator;for(let p of n){if(u=u.children.get(p),!u)break;A=u.locator||A}return G.parseLocator(A)}makeInstaller(e){return new Kj(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},Kj=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}attachCustomData(e){this.customData=e}async installPackage(e,r){let o=V.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await Kwt(e,r),e.linkType==="HARD"&&this.customData.store.set(e.locatorHash,a)),!G.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildRequest:null};let n=new Map,u=new Set;n.has(G.stringifyIdent(e))||n.set(G.stringifyIdent(e),e.reference);let A=e;if(G.isVirtualLocator(e)){A=G.devirtualizeLocator(e);for(let E of e.peerDependencies.values())n.set(G.stringifyIdent(E),null),u.add(G.stringifyIdent(E))}let p={packageLocation:`${Ae.fromPortablePath(o)}/`,packageDependencies:n,packagePeers:u,linkType:e.linkType,discardFromLookup:r.discardFromLookup??!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:a,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:p});let h=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(A.locatorHash,h),{packageLocation:o,buildRequest:null}}async attachInternalDependencies(e,r){let o=this.localStore.get(e.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let u=G.areIdentsEqual(a,n)?n.reference:[G.stringifyIdent(n),n.reference];o.pnpNode.packageDependencies.set(G.stringifyIdent(a),u)}}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 qs({baseFs:new iA({maxOpenFiles:80,readOnlyArchives:!0})}),r=await Jj(this.opts.project),o=this.opts.project.configuration.get("nmMode");(r===null||o!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:o,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(D=>{let b=this.opts.project.configuration.get("nmHoistingLimits");try{b=qe.validateEnum(fv,D.manifest.installConfig?.hoistingLimits??b)}catch{let C=G.prettyWorkspace(this.opts.project.configuration,D);this.opts.report.reportWarning(57,`${C}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(fv).join(", ")}, using default: "${b}"`)}return[D.relativeCwd,b]})),n=new Map(this.opts.project.workspaces.map(D=>{let b=this.opts.project.configuration.get("nmSelfReferences");return b=D.manifest.installConfig?.selfReferences??b,[D.relativeCwd,b]})),u={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(D,b)=>Array.isArray(b)?{name:b[0],reference:b[1]}:{name:D,reference:b},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(D=>{let b=D.anchoredLocator;return{name:G.stringifyIdent(b),reference:b.reference}}),getPackageInformation:D=>{let b=D.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:G.makeLocator(G.parseIdent(D.name),D.reference),C=this.localStore.get(b.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return C.pnpNode},findPackageLocator:D=>{let b=this.opts.project.tryWorkspaceByCwd(Ae.toPortablePath(D));if(b!==null){let C=b.anchoredLocator;return{name:G.stringifyIdent(C),reference:C.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:D=>Ae.fromPortablePath(qs.resolveVirtual(Ae.toPortablePath(D)))},{tree:A,errors:p,preserveSymlinksRequired:h}=pv(u,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!A){for(let{messageName:D,text:b}of p)this.opts.report.reportError(D,b);return}let E=vj(A);await e1t(r,E,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async D=>{let b=G.parseLocator(D),C=this.localStore.get(b.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the slot to exist");return C.customPackageData.manifest}});let w=[];for(let[D,b]of E.entries()){if(Z1e(D))continue;let C=G.parseLocator(D),T=this.localStore.get(C.locatorHash);if(typeof T>"u")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(T.pkg))continue;let N=CA.extractBuildRequest(T.pkg,T.customPackageData,T.dependencyMeta,{configuration:this.opts.project.configuration});N&&w.push({buildLocations:b.locations,locator:C,buildRequest:N})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${pe.pretty(this.opts.project.configuration,"--preserve-symlinks",pe.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:w}}};async function Kwt(t,e){let r=await _t.tryFind(e.prefixPath,{baseFs:e.packageFs})??new _t,o=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())o.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:CA.hasBindingGyp(e)}}}async function Jwt(t,e,r,o,{installChangedByUser:a}){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: ${K1e} +`,n+=` nmMode: ${o.value} +`;let u=Array.from(e.keys()).sort(),A=G.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let E of u){let w=e.get(E);n+=` +`,n+=`${JSON.stringify(E)}: +`,n+=` locations: +`;for(let D of w.locations){let b=V.contains(t.cwd,D);if(b===null)throw new Error(`Assertion failed: Expected the path to be within the project (${D})`);n+=` - ${JSON.stringify(b)} +`}if(w.aliases.length>0){n+=` aliases: +`;for(let D of w.aliases)n+=` - ${JSON.stringify(D)} +`}if(E===A&&r.size>0){n+=` bin: +`;for(let[D,b]of r){let C=V.contains(t.cwd,D);if(C===null)throw new Error(`Assertion failed: Expected the path to be within the project (${D})`);n+=` ${JSON.stringify(C)}: +`;for(let[T,N]of b){let U=V.relative(V.join(D,xi),N);n+=` ${JSON.stringify(T)}: ${JSON.stringify(U)} +`}}}}let p=t.cwd,h=V.join(p,xi,J1e);a&&await ae.removePromise(h),await ae.changeFilePromise(h,n,{automaticNewlines:!0})}async function Jj(t,{unrollAliases:e=!1}={}){let r=t.cwd,o=V.join(r,xi,J1e),a;try{a=await ae.statPromise(o)}catch{}if(!a)return null;let n=Vi(await ae.readFilePromise(o,"utf8"));if(n.__metadata.version>K1e)return null;let u=n.__metadata.nmMode||"classic",A=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let w=E.locations.map(b=>V.join(r,b)),D=E.bin;if(D)for(let[b,C]of Object.entries(D)){let T=V.join(r,Ae.toPortablePath(b)),N=qe.getMapWithDefault(p,T);for(let[U,J]of Object.entries(C))N.set(U,Ae.toPortablePath([T,xi,J].join(V.sep)))}if(A.set(h,{target:Bt.dot,linkType:"HARD",locations:w,aliases:E.aliases||[]}),e&&E.aliases)for(let b of E.aliases){let{scope:C,name:T}=G.parseLocator(h),N=G.makeLocator(G.makeIdent(C,T),b),U=G.stringifyLocator(N);A.set(U,{target:Bt.dot,linkType:"HARD",locations:w,aliases:[]})}}return{locatorMap:A,binSymlinks:p,locationTree:z1e(A,{skipPrefix:t.cwd}),nmMode:u,mtimeMs:a.mtimeMs}}var RC=async(t,e)=>{if(t.split(V.sep).indexOf(xi)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{let r;if(!e.innerLoop&&(r=await ae.lstatPromise(t),!r.isDirectory()&&!r.isSymbolicLink()||r.isSymbolicLink()&&!e.isWorkspaceDir)){await ae.unlinkPromise(t);return}let o=await ae.readdirPromise(t,{withFileTypes:!0});for(let n of o){let u=V.join(t,n.name);n.isDirectory()?(n.name!==xi||e&&e.innerLoop)&&await RC(u,{innerLoop:!0,contentsOnly:!1}):await ae.unlinkPromise(u)}let a=!e.innerLoop&&e.isWorkspaceDir&&r?.isSymbolicLink();!e.contentsOnly&&!a&&await ae.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},G1e=4,eF=(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 o=r.split(V.sep).filter(p=>p!==""),a=o.indexOf(xi),n=o.slice(0,a).join(V.sep),u=V.join(e,n),A=o.slice(a);return{locationRoot:u,segments:A}},z1e=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let o=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&V.contains(e,n.target)!==null){let A=qe.getFactoryWithDefault(r,n.target,o);A.locator=a,A.linkType=n.linkType}for(let u of n.locations){let{locationRoot:A,segments:p}=eF(u,{skipPrefix:e}),h=qe.getFactoryWithDefault(r,A,o);for(let E=0;E{if(process.platform==="win32"&&r==="junctions"){let o;try{o=await ae.lstatPromise(t)}catch{}if(!o||o.isDirectory()){await ae.symlinkPromise(t,e,"junction");return}}await ae.symlinkPromise(V.relative(V.dirname(e),t),e)};async function X1e(t,e,r){let o=V.join(t,`${zj.default.randomBytes(16).toString("hex")}.tmp`);try{await ae.writeFilePromise(o,r);try{await ae.linkPromise(o,e)}catch{}}finally{await ae.unlinkPromise(o)}}async function zwt({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:o,baseFs:a,nmMode:n}){if(r.kind==="file"){if(n.value==="hardlinks-global"&&o&&r.digest){let A=V.join(o,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await ae.statPromise(A);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs{await ae.mkdirPromise(t,{recursive:!0});let A=async(E=Bt.dot)=>{let w=V.join(e,E),D=await r.readdirPromise(w,{withFileTypes:!0}),b=new Map;for(let C of D){let T=V.join(E,C.name),N,U=V.join(w,C.name);if(C.isFile()){if(N={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let J=await bn.checksumFile(U,{baseFs:r,algorithm:"sha1"});N.digest=J}}else if(C.isDirectory())N={kind:"directory"};else if(C.isSymbolicLink())N={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(b.set(T,N),C.isDirectory()&&T!==xi){let J=await A(T);for(let[te,le]of J)b.set(te,le)}}return b},p;if(a.value==="hardlinks-global"&&o&&u){let E=V.join(o,u.substring(0,2),`${u.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await ae.readFilePromise(E,"utf8"))))}catch{p=await A()}}else p=await A();let h=!1;for(let[E,w]of p){let D=V.join(e,E),b=V.join(t,E);if(w.kind==="directory")await ae.mkdirPromise(b,{recursive:!0});else if(w.kind==="file"){let C=w.mtimeMs;await zwt({srcPath:D,dstPath:b,entry:w,nmMode:a,baseFs:r,globalHardlinksStore:o}),w.mtimeMs!==C&&(h=!0)}else w.kind==="symlink"&&await Zj(V.resolve(V.dirname(b),w.symlinkTo),b,n)}if(a.value==="hardlinks-global"&&o&&h&&u){let E=V.join(o,u.substring(0,2),`${u.substring(2)}.json`);await ae.removePromise(E),await X1e(o,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function Zwt(t,e,r,o){let a=new Map,n=new Map,u=new Map,A=!1,p=(h,E,w,D,b)=>{let C=!0,T=V.join(h,E),N=new Set;if(E===xi||E.startsWith("@")){let J;try{J=ae.statSync(T)}catch{}C=!!J,J?J.mtimeMs>r?(A=!0,N=new Set(ae.readdirSync(T))):N=new Set(w.children.get(E).children.keys()):A=!0;let te=e.get(h);if(te){let le=V.join(h,xi,$Q),ce;try{ce=ae.statSync(le)}catch{}if(!ce)A=!0;else if(ce.mtimeMs>r){A=!0;let ue=new Set(ae.readdirSync(le)),Ie=new Map;n.set(h,Ie);for(let[he,De]of te)ue.has(he)&&Ie.set(he,De)}else n.set(h,te)}}else C=b.has(E);let U=w.children.get(E);if(C){let{linkType:J,locator:te}=U,le={children:new Map,linkType:J,locator:te};if(D.children.set(E,le),te){let ce=qe.getSetWithDefault(u,te);ce.add(T),u.set(te,ce)}for(let ce of U.children.keys())p(T,ce,U,le,N)}else U.locator&&o.storedBuildState.delete(G.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:w,locator:D}=E,b={children:new Map,linkType:w,locator:D};if(a.set(h,b),D){let C=qe.getSetWithDefault(u,E.locator);C.add(h),u.set(E.locator,C)}E.children.has(xi)&&p(h,xi,E,b,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:u,installChangedByUser:A}}function Z1e(t){let e=G.parseDescriptor(t);return G.isVirtualDescriptor(e)&&(e=G.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function $wt(t,e,r,{loadManifest:o}){let a=new Map;for(let[A,{locations:p}]of t){let h=Z1e(A)?null:await o(A,p[0]),E=new Map;if(h)for(let[w,D]of h.bin){let b=V.join(p[0],D);D!==""&&ae.existsSync(b)&&E.set(w,D)}a.set(A,E)}let n=new Map,u=(A,p,h)=>{let E=new Map,w=V.contains(r,A);if(h.locator&&w!==null){let D=a.get(h.locator);for(let[b,C]of D){let T=V.join(A,Ae.toPortablePath(C));E.set(b,T)}for(let[b,C]of h.children){let T=V.join(A,b),N=u(T,T,C);N.size>0&&n.set(A,new Map([...n.get(A)||new Map,...N]))}}else for(let[D,b]of h.children){let C=u(V.join(A,D),p,b);for(let[T,N]of C)E.set(T,N)}return E};for(let[A,p]of e){let h=u(A,A,p);h.size>0&&n.set(A,new Map([...n.get(A)||new Map,...h]))}return n}var W1e=(t,e)=>{if(!t||!e)return t===e;let r=G.parseLocator(t);G.isVirtualLocator(r)&&(r=G.devirtualizeLocator(r));let o=G.parseLocator(e);return G.isVirtualLocator(o)&&(o=G.devirtualizeLocator(o)),G.areLocatorsEqual(r,o)};function $j(t){return V.join(t.get("globalFolder"),"store")}async function e1t(t,e,{baseFs:r,project:o,report:a,loadManifest:n,realLocatorChecksums:u}){let A=V.join(o.cwd,xi),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:w}=Zwt(t.locationTree,t.binSymlinks,t.mtimeMs,o),D=z1e(e,{skipPrefix:o.cwd}),b=[],C=async({srcDir:De,dstDir:Ee,linkType:g,globalHardlinksStore:me,nmMode:Ce,windowsLinkType:fe,packageChecksum:ie})=>{let Z=(async()=>{try{g==="SOFT"?(await ae.mkdirPromise(V.dirname(Ee),{recursive:!0}),await Zj(V.resolve(De),Ee,fe)):await Xwt(Ee,De,{baseFs:r,globalHardlinksStore:me,nmMode:Ce,windowsLinkType:fe,packageChecksum:ie})}catch(Se){throw Se.message=`While persisting ${De} -> ${Ee} ${Se.message}`,Se}finally{le.tick()}})().then(()=>b.splice(b.indexOf(Z),1));b.push(Z),b.length>G1e&&await Promise.race(b)},T=async(De,Ee,g)=>{let me=(async()=>{let Ce=async(fe,ie,Z)=>{try{Z.innerLoop||await ae.mkdirPromise(ie,{recursive:!0});let Se=await ae.readdirPromise(fe,{withFileTypes:!0});for(let Re of Se){if(!Z.innerLoop&&Re.name===$Q)continue;let ht=V.join(fe,Re.name),q=V.join(ie,Re.name);Re.isDirectory()?(Re.name!==xi||Z&&Z.innerLoop)&&(await ae.mkdirPromise(q,{recursive:!0}),await Ce(ht,q,{...Z,innerLoop:!0})):Ie.value==="hardlinks-local"||Ie.value==="hardlinks-global"?await ae.linkPromise(ht,q):await ae.copyFilePromise(ht,q,V1e.default.constants.COPYFILE_FICLONE)}}catch(Se){throw Z.innerLoop||(Se.message=`While cloning ${fe} -> ${ie} ${Se.message}`),Se}finally{Z.innerLoop||le.tick()}};await Ce(De,Ee,g)})().then(()=>b.splice(b.indexOf(me),1));b.push(me),b.length>G1e&&await Promise.race(b)},N=async(De,Ee,g)=>{if(g)for(let[me,Ce]of Ee.children){let fe=g.children.get(me);await N(V.join(De,me),Ce,fe)}else{Ee.children.has(xi)&&await RC(V.join(De,xi),{contentsOnly:!1});let me=V.basename(De)===xi&&p.has(V.join(V.dirname(De)));await RC(De,{contentsOnly:De===A,isWorkspaceDir:me})}};for(let[De,Ee]of p){let g=D.get(De);for(let[me,Ce]of Ee.children){if(me===".")continue;let fe=g&&g.children.get(me),ie=V.join(De,me);await N(ie,Ce,fe)}}let U=async(De,Ee,g)=>{if(g){W1e(Ee.locator,g.locator)||await RC(De,{contentsOnly:Ee.linkType==="HARD"});for(let[me,Ce]of Ee.children){let fe=g.children.get(me);await U(V.join(De,me),Ce,fe)}}else{Ee.children.has(xi)&&await RC(V.join(De,xi),{contentsOnly:!0});let me=V.basename(De)===xi&&D.has(V.join(V.dirname(De)));await RC(De,{contentsOnly:Ee.linkType==="HARD",isWorkspaceDir:me})}};for(let[De,Ee]of D){let g=p.get(De);for(let[me,Ce]of Ee.children){if(me===".")continue;let fe=g&&g.children.get(me);await U(V.join(De,me),Ce,fe)}}let J=new Map,te=[];for(let[De,Ee]of E)for(let g of Ee){let{locationRoot:me,segments:Ce}=eF(g,{skipPrefix:o.cwd}),fe=D.get(me),ie=me;if(fe){for(let Z of Ce)if(ie=V.join(ie,Z),fe=fe.children.get(Z),!fe)break;if(fe){let Z=W1e(fe.locator,De),Se=e.get(fe.locator),Re=Se.target,ht=ie,q=Se.linkType;if(Z)J.has(Re)||J.set(Re,ht);else if(Re!==ht){let nt=G.parseLocator(fe.locator);G.isVirtualLocator(nt)&&(nt=G.devirtualizeLocator(nt)),te.push({srcDir:Re,dstDir:ht,linkType:q,realLocatorHash:nt.locatorHash})}}}}for(let[De,{locations:Ee}]of e.entries())for(let g of Ee){let{locationRoot:me,segments:Ce}=eF(g,{skipPrefix:o.cwd}),fe=p.get(me),ie=D.get(me),Z=me,Se=e.get(De),Re=G.parseLocator(De);G.isVirtualLocator(Re)&&(Re=G.devirtualizeLocator(Re));let ht=Re.locatorHash,q=Se.target,nt=g;if(q===nt)continue;let Le=Se.linkType;for(let Te of Ce)ie=ie.children.get(Te);if(!fe)te.push({srcDir:q,dstDir:nt,linkType:Le,realLocatorHash:ht});else for(let Te of Ce)if(Z=V.join(Z,Te),fe=fe.children.get(Te),!fe){te.push({srcDir:q,dstDir:nt,linkType:Le,realLocatorHash:ht});break}}let le=Ws.progressViaCounter(te.length),ce=a.reportProgress(le),ue=o.configuration.get("nmMode"),Ie={value:ue},he=o.configuration.get("winLinkType");try{let De=Ie.value==="hardlinks-global"?`${$j(o.configuration)}/v1`:null;if(De&&!await ae.existsPromise(De)){await ae.mkdirpPromise(De);for(let g=0;g<256;g++)await ae.mkdirPromise(V.join(De,g.toString(16).padStart(2,"0")))}for(let g of te)(g.linkType==="SOFT"||!J.has(g.srcDir))&&(J.set(g.srcDir,g.dstDir),await C({...g,globalHardlinksStore:De,nmMode:Ie,windowsLinkType:he,packageChecksum:u.get(g.realLocatorHash)||null}));await Promise.all(b),b.length=0;for(let g of te){let me=J.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==me&&await T(me,g.dstDir,{nmMode:Ie})}await Promise.all(b),await ae.mkdirPromise(A,{recursive:!0});let Ee=await $wt(e,D,o.cwd,{loadManifest:n});await t1t(h,Ee,o.cwd,he),await Jwt(o,e,Ee,Ie,{installChangedByUser:w}),ue=="hardlinks-global"&&Ie.value=="hardlinks-local"&&a.reportWarningOnce(74,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{ce.stop()}}async function t1t(t,e,r,o){for(let a of t.keys()){if(V.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);if(!e.has(a)){let n=V.join(a,xi,$Q);await ae.removePromise(n)}}for(let[a,n]of e){if(V.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let u=V.join(a,xi,$Q),A=t.get(a)||new Map;await ae.mkdirPromise(u,{recursive:!0});for(let p of A.keys())n.has(p)||(await ae.removePromise(V.join(u,p)),process.platform==="win32"&&await ae.removePromise(V.join(u,`${p}.cmd`)));for(let[p,h]of n){let E=A.get(p),w=V.join(u,p);E!==h&&(process.platform==="win32"?await(0,Y1e.default)(Ae.fromPortablePath(h),Ae.fromPortablePath(w),{createPwshFile:!1}):(await ae.removePromise(w),await Zj(h,w,o),V.contains(r,await ae.realpathPromise(h))!==null&&await ae.chmodPromise(h,493)))}}}Ve();St();sA();var Sv=class extends Yh{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new eG(r)}},eG=class extends pd{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let o=new qs({baseFs:new iA({maxOpenFiles:80,readOnlyArchives:!0})}),a=F1e(r,this.opts.project.cwd,o),{tree:n,errors:u}=pv(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:w,text:D}of u)this.opts.report.reportError(w,D);return}let A=new Map;r.fallbackPool=A;let p=(w,D)=>{let b=G.parseLocator(D.locator),C=G.stringifyIdent(b);C===w?A.set(w,b.reference):A.set(w,[C,b.reference])},h=V.join(this.opts.project.cwd,mr.nodeModules),E=n.get(h);if(!(typeof E>"u")){if("target"in E)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let w of E.dirList){let D=V.join(h,w),b=n.get(D);if(typeof b>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in b)p(w,b);else for(let C of b.dirList){let T=V.join(D,C),N=n.get(T);if(typeof N>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in N)p(`${w}/${C}`,N);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var r1t={hooks:{cleanGlobalArtifacts:async t=>{let e=$j(t);await ae.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevents packages to be hoisted past specific levels",type:"STRING",values:["workspaces","dependencies","none"],default:"none"},nmMode:{description:"Defines in which measure Yarn must use hardlinks and symlinks when generated `node_modules` directories.",type:"STRING",values:["classic","hardlinks-local","hardlinks-global"],default:"classic"},nmSelfReferences:{description:"Defines whether the linker should generate self-referencing symlinks for workspaces.",type:"BOOLEAN",default:!0}},linkers:[Dv,Sv]},n1t=r1t;var $G={};Vt($G,{NpmHttpFetcher:()=>bv,NpmRemapResolver:()=>kv,NpmSemverFetcher:()=>rp,NpmSemverResolver:()=>Qv,NpmTagResolver:()=>Fv,default:()=>yvt,npmConfigUtils:()=>si,npmHttpUtils:()=>en,npmPublishUtils:()=>KC});Ve();var o2e=et(ni());var Zn="npm:";var en={};Vt(en,{AuthType:()=>n2e,customPackageError:()=>hd,del:()=>g1t,get:()=>gd,getIdentUrl:()=>tF,getPackageMetadata:()=>NC,handleInvalidAuthenticationError:()=>Kh,post:()=>p1t,put:()=>h1t});Ve();Ve();St();var iG=et(Q2()),t2e=et(c8()),r2e=et(ni());var si={};Vt(si,{RegistryType:()=>$1e,getAuditRegistry:()=>i1t,getAuthConfiguration:()=>nG,getDefaultRegistry:()=>Pv,getPublishRegistry:()=>s1t,getRegistryConfiguration:()=>e2e,getScopeConfiguration:()=>rG,getScopeRegistry:()=>TC,normalizeRegistry:()=>uc});var $1e=(o=>(o.AUDIT_REGISTRY="npmAuditRegistry",o.FETCH_REGISTRY="npmRegistryServer",o.PUBLISH_REGISTRY="npmPublishRegistry",o))($1e||{});function uc(t){return t.replace(/\/$/,"")}function i1t({configuration:t}){return Pv({configuration:t,type:"npmAuditRegistry"})}function s1t(t,{configuration:e}){return t.publishConfig?.registry?uc(t.publishConfig.registry):t.name?TC(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):Pv({configuration:e,type:"npmPublishRegistry"})}function TC(t,{configuration:e,type:r="npmRegistryServer"}){let o=rG(t,{configuration:e});if(o===null)return Pv({configuration:e,type:r});let a=o.get(r);return a===null?Pv({configuration:e,type:r}):uc(a)}function Pv({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return uc(r!==null?r:t.get("npmRegistryServer"))}function e2e(t,{configuration:e}){let r=e.get("npmRegistries"),o=uc(t),a=r.get(o);if(typeof a<"u")return a;let n=r.get(o.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}function rG(t,{configuration:e}){if(t===null)return null;let o=e.get("npmScopes").get(t);return o||null}function nG(t,{configuration:e,ident:r}){let o=r&&rG(r.scope,{configuration:e});return o?.get("npmAuthIdent")||o?.get("npmAuthToken")?o:e2e(t,{configuration:e})||e}var n2e=(a=>(a[a.NO_AUTH=0]="NO_AUTH",a[a.BEST_EFFORT=1]="BEST_EFFORT",a[a.CONFIGURATION=2]="CONFIGURATION",a[a.ALWAYS_AUTH=3]="ALWAYS_AUTH",a))(n2e||{});async function Kh(t,{attemptedAs:e,registry:r,headers:o,configuration:a}){if(nF(t))throw new Jt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new Jt(41,`Invalid authentication (${typeof e!="string"?`as ${await m1t(r,o,{configuration:a})}`:`attempted as ${e}`})`)}function hd(t,e){let r=t.response?.statusCode;return r?r===404?"Package not found":r>=500&&r<600?`The registry appears to be down (using a ${pe.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function tF(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var i2e=new Map,o1t=new Map;async function a1t(t){return await qe.getFactoryWithDefault(i2e,t,async()=>{let e=null;try{e=await ae.readJsonPromise(t)}catch{}return e})}async function l1t(t,e,{configuration:r,cached:o,registry:a,headers:n,version:u,...A}){return await qe.getFactoryWithDefault(o1t,t,async()=>await gd(tF(e),{...A,customErrorMessage:hd,configuration:r,registry:a,ident:e,headers:{...n,"If-None-Match":o?.etag,"If-Modified-Since":o?.lastModified},wrapNetworkRequest:async p=>async()=>{let h=await p();if(h.statusCode===304){if(o===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...h,body:o.metadata}}let E=c1t(JSON.parse(h.body.toString())),w={metadata:E,etag:h.headers.etag,lastModified:h.headers["last-modified"]};return i2e.set(t,Promise.resolve(w)),Promise.resolve().then(async()=>{let D=`${t}-${process.pid}.tmp`;await ae.mkdirPromise(V.dirname(D),{recursive:!0}),await ae.writeJsonPromise(D,w,{compact:!0}),await ae.renamePromise(D,t)}).catch(()=>{}),{...h,body:E}}}))}async function NC(t,{cache:e,project:r,registry:o,headers:a,version:n,...u}){let{configuration:A}=r;o=xv(A,{ident:t,registry:o});let p=A1t(A,o),h=V.join(p,`${G.slugifyIdent(t)}.json`),E=null;if(!r.lockfileNeedsRefresh&&(E=await a1t(h),E)){if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(A.get("enableOfflineMode")){let w=structuredClone(E.metadata),D=new Set;if(e){for(let C of Object.keys(w.versions)){let T=G.makeLocator(t,`npm:${C}`),N=e.getLocatorMirrorPath(T);(!N||!ae.existsSync(N))&&(delete w.versions[C],D.add(C))}let b=w["dist-tags"].latest;if(D.has(b)){let C=Object.keys(E.metadata.versions).sort(r2e.default.compare),T=C.indexOf(b);for(;D.has(C[T])&&T>=0;)T-=1;T>=0?w["dist-tags"].latest=C[T]:delete w["dist-tags"].latest}}return w}}return await l1t(h,t,{...u,configuration:A,cached:E,registry:o,headers:a,version:n})}var s2e=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function c1t(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,(0,t2e.default)(r,s2e)]))}}var u1t=bn.makeHash(...s2e).slice(0,6);function A1t(t,e){let r=f1t(t),o=new URL(e);return V.join(r,u1t,o.hostname)}function f1t(t){return V.join(t.get("globalFolder"),"metadata/npm")}async function gd(t,{configuration:e,headers:r,ident:o,authType:a,registry:n,...u}){n=xv(e,{ident:o,registry:n}),o&&o.scope&&typeof a>"u"&&(a=1);let A=await rF(n,{authType:a,configuration:e,ident:o});A&&(r={...r,authorization:A});try{return await on.get(t.charAt(0)==="/"?`${n}${t}`:t,{configuration:e,headers:r,...u})}catch(p){throw await Kh(p,{registry:n,configuration:e,headers:r}),p}}async function p1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=xv(o,{ident:n,registry:A});let E=await rF(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...LC(p)});try{return await on.post(A+t,e,{configuration:o,headers:a,...h})}catch(w){if(!nF(w)||p)throw await Kh(w,{attemptedAs:r,registry:A,configuration:o,headers:a}),w;p=await sG(w,{configuration:o});let D={...a,...LC(p)};try{return await on.post(`${A}${t}`,e,{configuration:o,headers:D,...h})}catch(b){throw await Kh(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function h1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=xv(o,{ident:n,registry:A});let E=await rF(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...LC(p)});try{return await on.put(A+t,e,{configuration:o,headers:a,...h})}catch(w){if(!nF(w))throw await Kh(w,{attemptedAs:r,registry:A,configuration:o,headers:a}),w;p=await sG(w,{configuration:o});let D={...a,...LC(p)};try{return await on.put(`${A}${t}`,e,{configuration:o,headers:D,...h})}catch(b){throw await Kh(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function g1t(t,{attemptedAs:e,configuration:r,headers:o,ident:a,authType:n=3,registry:u,otp:A,...p}){u=xv(r,{ident:a,registry:u});let h=await rF(u,{authType:n,configuration:r,ident:a});h&&(o={...o,authorization:h}),A&&(o={...o,...LC(A)});try{return await on.del(u+t,{configuration:r,headers:o,...p})}catch(E){if(!nF(E)||A)throw await Kh(E,{attemptedAs:e,registry:u,configuration:r,headers:o}),E;A=await sG(E,{configuration:r});let w={...o,...LC(A)};try{return await on.del(`${u}${t}`,{configuration:r,headers:w,...p})}catch(D){throw await Kh(D,{attemptedAs:e,registry:u,configuration:r,headers:o}),D}}}function xv(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return TC(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return uc(r)}async function rF(t,{authType:e=2,configuration:r,ident:o}){let a=nG(t,{configuration:r,ident:o}),n=d1t(a,e);if(!n)return null;let u=await r.reduceHook(A=>A.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:o});if(u)return u;if(a.get("npmAuthToken"))return`Bearer ${a.get("npmAuthToken")}`;if(a.get("npmAuthIdent")){let A=a.get("npmAuthIdent");return A.includes(":")?`Basic ${Buffer.from(A).toString("base64")}`:`Basic ${A}`}if(n&&e!==1)throw new Jt(33,"No authentication configured for request");return null}function d1t(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 m1t(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await on.get(new URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function sG(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Lt.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,pe.pretty(e,"$1",pe.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&Xi.openUrl){let{openNow:u}=await(0,iG.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});u&&(await Xi.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(` +`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||"";let{otp:o}=await(0,iG.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(` +`),o}function nF(t){if(t.originalError?.name!=="HTTPError")return!1;try{return(t.originalError?.response.headers["www-authenticate"].split(/,\s*/).map(r=>r.toLowerCase())).includes("otp")}catch{return!1}}function LC(t){return{"npm-otp":t}}var bv=class{supports(e,r){if(!e.reference.startsWith(Zn))return!1;let{selector:o,params:a}=G.parseRange(e.reference);return!(!o2e.default.valid(o)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.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),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let{params:o}=G.parseRange(e.reference);if(o===null||typeof o.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await gd(o.__archiveUrl,{customErrorMessage:hd,configuration:r.project.configuration,ident:e});return await $i.convertToZip(a,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}};Ve();var kv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Zn)||!G.tryParseDescriptor(e.range.slice(Zn.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){let o=r.project.configuration.normalizeDependency(G.parseDescriptor(e.range.slice(Zn.length),!0));return r.resolver.getResolutionDependencies(o,r)}async getCandidates(e,r,o){let a=o.project.configuration.normalizeDependency(G.parseDescriptor(e.range.slice(Zn.length),!0));return await o.resolver.getCandidates(a,r,o)}async getSatisfying(e,r,o,a){let n=a.project.configuration.normalizeDependency(G.parseDescriptor(e.range.slice(Zn.length),!0));return a.resolver.getSatisfying(n,r,o,a)}resolve(e,r){throw new Error("Unreachable")}};Ve();Ve();var a2e=et(ni());var rp=class t{supports(e,r){if(!e.reference.startsWith(Zn))return!1;let o=new URL(e.reference);return!(!a2e.default.valid(o.pathname)||o.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.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),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o;try{o=await gd(t.getLocatorUrl(e),{customErrorMessage:hd,configuration:r.project.configuration,ident:e})}catch{o=await gd(t.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:hd,configuration:r.project.configuration,ident:e})}return await $i.convertToZip(o,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:o}){let a=TC(e.scope,{configuration:o}),n=t.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),a=a.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===a+n||r===a+n.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=Ur.clean(e.reference.slice(Zn.length));if(r===null)throw new Jt(10,"The npm semver resolver got selected, but the version isn't semver");return`${tF(e)}/-/${e.name}-${r}.tgz`}};Ve();Ve();Ve();var oG=et(ni());var iF=G.makeIdent(null,"node-gyp"),y1t=/\b(node-gyp|prebuild-install)\b/,Qv=class{supportsDescriptor(e,r){return e.range.startsWith(Zn)?!!Ur.validRange(e.range.slice(Zn.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Zn))return!1;let{selector:o}=G.parseRange(e.reference);return!!oG.default.valid(o)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=Ur.validRange(e.range.slice(Zn.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(Zn.length)}`);let n=await NC(e,{cache:o.fetchOptions?.cache,project:o.project,version:oG.default.valid(a.raw)?a.raw:void 0}),u=qe.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new Ur.SemVer(h);if(a.test(E))return E}catch{}return qe.mapAndFilter.skip}),A=u.filter(h=>!n.versions[h.raw].deprecated),p=A.length>0?A:u;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=G.makeLocator(e,`${Zn}${h.raw}`),w=n.versions[h.raw].dist.tarball;return rp.isConventionalTarballUrl(E,w,{configuration:o.project.configuration})?E:G.bindLocator(E,{__archiveUrl:w})})}async getSatisfying(e,r,o,a){let n=Ur.validRange(e.range.slice(Zn.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Zn.length)}`);return{locators:qe.mapAndFilter(o,p=>{if(p.identHash!==e.identHash)return qe.mapAndFilter.skip;let h=G.tryParseRange(p.reference,{requireProtocol:Zn});if(!h)return qe.mapAndFilter.skip;let E=new Ur.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:qe.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:o}=G.parseRange(e.reference),a=Ur.clean(o);if(a===null)throw new Jt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await NC(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new Jt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new Jt(16,`Registry failed to return reference "${a}"`);let u=new _t;if(u.load(n.versions[a]),!u.dependencies.has(iF.identHash)&&!u.peerDependencies.has(iF.identHash)){for(let A of u.scripts.values())if(A.match(y1t)){u.dependencies.set(iF.identHash,G.makeDescriptor(iF,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:u.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(u.dependencies),peerDependencies:u.peerDependencies,dependenciesMeta:u.dependenciesMeta,peerDependenciesMeta:u.peerDependenciesMeta,bin:u.bin}}};Ve();Ve();var l2e=et(ni());var Fv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Zn)||!by.test(e.range.slice(Zn.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(Zn.length),n=await NC(e,{cache:o.fetchOptions?.cache,project:o.project});if(!Object.hasOwn(n,"dist-tags"))throw new Jt(15,'Registry returned invalid data - missing "dist-tags" field');let u=n["dist-tags"];if(!Object.hasOwn(u,a))throw new Jt(16,`Registry failed to return tag "${a}"`);let A=u[a],p=G.makeLocator(e,`${Zn}${A}`),h=n.versions[A].dist.tarball;return rp.isConventionalTarballUrl(p,h,{configuration:o.project.configuration})?[p]:[G.bindLocator(p,{__archiveUrl:h})]}async getSatisfying(e,r,o,a){let n=[];for(let u of o){if(u.identHash!==e.identHash)continue;let A=G.tryParseRange(u.reference,{requireProtocol:Zn});if(!(!A||!l2e.default.valid(A.selector))){if(A.params?.__archiveUrl){let p=G.makeRange({protocol:Zn,selector:A.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(G.makeDescriptor(e,p),r,a);if(u.reference!==h.reference)continue}n.push(u)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var KC={};Vt(KC,{getGitHead:()=>dvt,getPublishAccess:()=>XBe,getReadmeContent:()=>ZBe,makePublishBody:()=>gvt});Ve();Ve();St();var KG={};Vt(KG,{PackCommand:()=>VC,default:()=>XBt,packUtils:()=>BA});Ve();Ve();Ve();St();Gt();var BA={};Vt(BA,{genPackList:()=>PF,genPackStream:()=>VG,genPackageManifest:()=>UBe,hasPackScripts:()=>WG,prepareForPack:()=>YG});Ve();St();var GG=et(Xo()),OBe=et(RBe()),MBe=ve("zlib"),_Bt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],HBt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function WG(t){return!!(hn.hasWorkspaceScript(t,"prepack")||hn.hasWorkspaceScript(t,"postpack"))}async function YG(t,{report:e},r){await hn.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let o=V.join(t.cwd,_t.fileName);await ae.existsPromise(o)&&await t.manifest.loadFile(o,{baseFs:ae}),await r()}finally{await hn.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function VG(t,e){typeof e>"u"&&(e=await PF(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(V.normalize(n));for(let n of t.manifest.bin.values())r.add(V.normalize(n));let o=OBe.default.pack();process.nextTick(async()=>{for(let n of e){let u=V.normalize(n),A=V.resolve(t.cwd,u),p=V.join("package",u),h=await ae.lstatPromise(A),E={name:p,mtime:new Date(Si.SAFE_TIME*1e3)},w=r.has(u)?493:420,D,b,C=new Promise((N,U)=>{D=N,b=U}),T=N=>{N?b(N):D()};if(h.isFile()){let N;u==="package.json"?N=Buffer.from(JSON.stringify(await UBe(t),null,2)):N=await ae.readFilePromise(A),o.entry({...E,mode:w,type:"file"},N,T)}else h.isSymbolicLink()?o.entry({...E,mode:w,type:"symlink",linkname:await ae.readlinkPromise(A)},T):T(new Error(`Unsupported file type ${h.mode} for ${Ae.fromPortablePath(u)}`));await C}o.finalize()});let a=(0,MBe.createGzip)();return o.pipe(a),a}async function UBe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function PF(t){let e=t.project,r=e.configuration,o={accept:[],reject:[]};for(let w of HBt)o.reject.push(w);for(let w of _Bt)o.accept.push(w);o.reject.push(r.get("rcFilename"));let a=w=>{if(w===null||!w.startsWith(`${t.cwd}/`))return;let D=V.relative(t.cwd,w),b=V.resolve(Bt.root,D);o.reject.push(b)};a(V.resolve(e.cwd,mr.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(w=>w.populateYarnPaths,e,w=>{a(w)});for(let w of e.workspaces){let D=V.relative(t.cwd,w.cwd);D!==""&&!D.match(/^(\.\.)?\//)&&o.reject.push(`/${D}`)}let n={accept:[],reject:[]},u=t.manifest.publishConfig?.main??t.manifest.main,A=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;u!=null&&n.accept.push(V.resolve(Bt.root,u)),A!=null&&n.accept.push(V.resolve(Bt.root,A)),typeof p=="string"&&n.accept.push(V.resolve(Bt.root,p));for(let w of h.values())n.accept.push(V.resolve(Bt.root,w));if(p instanceof Map)for(let[w,D]of p.entries())n.accept.push(V.resolve(Bt.root,w)),typeof D=="string"&&n.accept.push(V.resolve(Bt.root,D));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let w of t.manifest.files)_Be(n.accept,w,{cwd:Bt.root})}return await qBt(t.cwd,{hasExplicitFileList:E,globalList:o,ignoreList:n})}async function qBt(t,{hasExplicitFileList:e,globalList:r,ignoreList:o}){let a=[],n=new Gu(t),u=[[Bt.root,[o]]];for(;u.length>0;){let[A,p]=u.pop(),h=await n.lstatPromise(A);if(!LBe(A,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=await n.readdirPromise(A),w=!1,D=!1;if(!e||A!==Bt.root)for(let T of E)w=w||T===".gitignore",D=D||T===".npmignore";let b=D?await TBe(n,A,".npmignore"):w?await TBe(n,A,".gitignore"):null,C=b!==null?[b].concat(p):p;LBe(A,{globalList:r,ignoreLists:p})&&(C=[...p,{accept:[],reject:["**/*"]}]);for(let T of E)u.push([V.resolve(A,T),C])}else(h.isFile()||h.isSymbolicLink())&&a.push(V.relative(Bt.root,A))}return a.sort()}async function TBe(t,e,r){let o={accept:[],reject:[]},a=await t.readFilePromise(V.join(e,r),"utf8");for(let n of a.split(/\n/g))_Be(o.reject,n,{cwd:e});return o}function jBt(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 _Be(t,e,{cwd:r}){let o=e.trim();o===""||o[0]==="#"||t.push(jBt(o,{cwd:r}))}function LBe(t,{globalList:e,ignoreLists:r}){let o=SF(t,e.accept);if(o!==0)return o===2;let a=SF(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let u=SF(t,n.accept);if(u!==0)return u===2;let A=SF(t,n.reject);if(A!==0)return A===1}return!1}function SF(t,e){let r=e,o=[];for(let a=0;a{await YG(a,{report:p},async()=>{p.reportJson({base:Ae.fromPortablePath(a.cwd)});let h=await PF(a);for(let E of h)p.reportInfo(null,Ae.fromPortablePath(E)),p.reportJson({location:Ae.fromPortablePath(E)});if(!this.dryRun){let E=await VG(a,h);await ae.mkdirPromise(V.dirname(u),{recursive:!0});let w=ae.createWriteStream(u);E.pipe(w),await new Promise(D=>{w.on("finish",D)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${pe.pretty(r,u,pe.Type.PATH)}`),p.reportJson({output:Ae.fromPortablePath(u)}))})).exitCode()}};function GBt(t,{workspace:e}){let r=t.replace("%s",WBt(e)).replace("%v",YBt(e));return Ae.toPortablePath(r)}function WBt(t){return t.manifest.name!==null?G.slugifyIdent(t.manifest.name):"package"}function YBt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var VBt=["dependencies","devDependencies","peerDependencies"],KBt="workspace:",JBt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),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.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let o of VBt)for(let a of t.manifest.getForScope(o).values()){let n=r.tryWorkspaceByDescriptor(a),u=G.parseRange(a.range);if(u.protocol===KBt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new Jt(21,`${G.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let A;G.areDescriptorsEqual(a,n.anchoredDescriptor)||u.selector==="*"?A=n.manifest.version??"0.0.0":u.selector==="~"||u.selector==="^"?A=`${u.selector}${n.manifest.version??"0.0.0"}`:A=u.selector;let p=o==="dependencies"?G.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":o;e[h][G.stringifyIdent(a)]=A}}},zBt={hooks:{beforeWorkspacePacking:JBt},commands:[VC]},XBt=zBt;var JBe=ve("crypto"),zBe=et(KBe());async function gvt(t,e,{access:r,tag:o,registry:a,gitHead:n}){let u=t.manifest.name,A=t.manifest.version,p=G.stringifyIdent(u),h=(0,JBe.createHash)("sha1").update(e).digest("hex"),E=zBe.default.fromData(e).toString(),w=r??XBe(t,u),D=await ZBe(t),b=await BA.genPackageManifest(t),C=`${p}-${A}.tgz`,T=new URL(`${uc(a)}/${p}/-/${C}`);return{_id:p,_attachments:{[C]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:p,access:w,"dist-tags":{[o]:A},versions:{[A]:{...b,_id:`${p}@${A}`,name:p,version:A,gitHead:n,dist:{shasum:h,integrity:E,tarball:T.toString()}}},readme:D}}async function dvt(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}}function XBe(t,e){let r=t.project.configuration;return t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?t.manifest.publishConfig.access:r.get("npmPublishAccess")!==null?r.get("npmPublishAccess"):e.scope?"restricted":"public"}async function ZBe(t){let e=Ae.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${G.stringifyIdent(r)} +`;try{a=await ae.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var ZG={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"BOOLEAN",default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:"SECRET",default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:"SECRET",default:null}},$Be={npmAuditRegistry:{description:"Registry to query for audit reports",type:"STRING",default:null},npmPublishRegistry:{description:"Registry to push packages to",type:"STRING",default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"STRING",default:"https://registry.yarnpkg.com"}},mvt={configuration:{...ZG,...$Be,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...ZG,...$Be}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:uc,valueDefinition:{description:"",type:"SHAPE",properties:{...ZG}}}},fetchers:[bv,rp],resolvers:[kv,Qv,Fv]},yvt=mvt;var l5={};Vt(l5,{NpmAuditCommand:()=>zC,NpmInfoCommand:()=>XC,NpmLoginCommand:()=>ZC,NpmLogoutCommand:()=>eI,NpmPublishCommand:()=>tI,NpmTagAddCommand:()=>nI,NpmTagListCommand:()=>rI,NpmTagRemoveCommand:()=>iI,NpmWhoamiCommand:()=>sI,default:()=>Dvt,npmAuditTypes:()=>Xv,npmAuditUtils:()=>xF});Ve();Ve();Gt();var i5=et(Xo());il();var Xv={};Vt(Xv,{Environment:()=>Jv,Severity:()=>zv});var Jv=(o=>(o.All="all",o.Production="production",o.Development="development",o))(Jv||{}),zv=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(zv||{});var xF={};Vt(xF,{allSeverities:()=>JC,getPackages:()=>n5,getReportTree:()=>t5,getSeverityInclusions:()=>e5,getTopLevelDependencies:()=>r5});Ve();var eve=et(ni());var JC=["info","low","moderate","high","critical"];function e5(t){if(typeof t>"u")return new Set(JC);let e=JC.indexOf(t),r=JC.slice(e);return new Set(r)}function t5(t){let e={},r={children:e};for(let[o,a]of qe.sortMap(Object.entries(t),n=>n[0]))for(let n of qe.sortMap(a,u=>`${u.id}`))e[`${o}/${n.id}`]={value:pe.tuple(pe.Type.IDENT,G.parseIdent(o)),children:{ID:typeof n.id<"u"&&{label:"ID",value:pe.tuple(pe.Type.ID,n.id)},Issue:{label:"Issue",value:pe.tuple(pe.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:pe.tuple(pe.Type.URL,n.url)},Severity:{label:"Severity",value:pe.tuple(pe.Type.NO_HINT,n.severity)},"Vulnerable Versions":{label:"Vulnerable Versions",value:pe.tuple(pe.Type.RANGE,n.vulnerable_versions)},"Tree Versions":{label:"Tree Versions",children:[...n.versions].sort(eve.default.compare).map(u=>({value:pe.tuple(pe.Type.REFERENCE,u)}))},Dependents:{label:"Dependents",children:qe.sortMap(n.dependents,u=>G.stringifyLocator(u)).map(u=>({value:pe.tuple(pe.Type.LOCATOR,u)}))}}};return r}function r5(t,e,{all:r,environment:o}){let a=[],n=r?t.workspaces:[e],u=["all","production"].includes(o),A=["all","development"].includes(o);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!A:!u)||a.push({workspace:p,dependency:h});return a}function n5(t,e,{recursive:r}){let o=new Map,a=new Set,n=[],u=(A,p)=>{let h=t.storedResolutions.get(p.descriptorHash);if(typeof h>"u")throw new Error("Assertion failed: The resolution should have been registered");if(!a.has(h))a.add(h);else return;let E=t.storedPackages.get(h);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");if(G.ensureDevirtualizedLocator(E).reference.startsWith("npm:")&&E.version!==null){let D=G.stringifyIdent(E),b=qe.getMapWithDefault(o,D);qe.getArrayWithDefault(b,E.version).push(A)}if(r)for(let D of E.dependencies.values())n.push([E,D])};for(let{workspace:A,dependency:p}of e)n.push([A.anchoredLocator,p]);for(;n.length>0;){let[A,p]=n.shift();u(A,p)}return o}var zC=class extends ut{constructor(){super(...arguments);this.all=de.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=de.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=de.String("--environment","all",{description:"Which environments to cover",validator:js(Jv)});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.noDeprecations=de.Boolean("--no-deprecations",!1,{description:"Don't warn about deprecated packages"});this.severity=de.String("--severity","info",{description:"Minimal severity requested for packages to be displayed",validator:js(zv)});this.excludes=de.Array("--exclude",[],{description:"Array of glob patterns of packages to exclude from audit"});this.ignores=de.Array("--ignore",[],{description:"Array of glob patterns of advisory ID's to ignore in the audit report"})}static{this.paths=[["npm","audit"]]}static{this.usage=ot.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 ${JC.map(r=>`\`${r}\``).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. + + If certain packages produce false positives for a particular environment, the \`--exclude\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \`npmAuditExcludePackages\` option. + + If particular advisories are needed to be ignored, the \`--ignore\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \`npmAuditIgnoreAdvisories\` option. + + To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why package\` 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"],["Exclude certain packages","yarn npm audit --exclude package1 --exclude package2"],["Ignore specific advisories","yarn npm audit --ignore 1234567 --ignore 7654321"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd);if(!a)throw new or(o.cwd,this.context.cwd);await o.restoreInstallState();let n=r5(o,a,{all:this.all,environment:this.environment}),u=n5(o,n,{recursive:this.recursive}),A=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[N,U]of u)A.some(J=>i5.default.isMatch(N,J))||(p[N]=[...U.keys()]);let h=si.getAuditRegistry({configuration:r}),E,w=await pA.start({configuration:r,stdout:this.context.stdout},async()=>{let N=en.post("/-/npm/v1/security/advisories/bulk",p,{authType:en.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=this.noDeprecations?[]:await Promise.all(Array.from(Object.entries(p),async([te,le])=>{let ce=await en.getPackageMetadata(G.parseIdent(te),{project:o});return qe.mapAndFilter(le,ue=>{let{deprecated:Ie}=ce.versions[ue];return Ie?[te,ue,Ie]:qe.mapAndFilter.skip})})),J=await N;for(let[te,le,ce]of U.flat(1))Object.hasOwn(J,te)&&J[te].some(ue=>Ur.satisfiesWithPrereleases(le,ue.vulnerable_versions))||(J[te]??=[],J[te].push({id:`${te} (deprecation)`,title:ce.trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:le}));E=J});if(w.hasErrors())return w.exitCode();let D=e5(this.severity),b=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),C=Object.create(null);for(let[N,U]of Object.entries(E)){let J=U.filter(te=>!i5.default.isMatch(`${te.id}`,b)&&D.has(te.severity));J.length>0&&(C[N]=J.map(te=>{let le=u.get(N);if(typeof le>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let ce=[...le.keys()].filter(Ie=>Ur.satisfiesWithPrereleases(Ie,te.vulnerable_versions)),ue=new Map;for(let Ie of ce)for(let he of le.get(Ie))ue.set(he.locatorHash,he);return{...te,versions:ce,dependents:[...ue.values()]}}))}let T=Object.keys(C).length>0;return T?(As.emitTree(t5(C),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Lt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async N=>{N.reportInfo(1,"No audit suggestions")}),T?1:0)}};Ve();Ve();St();Gt();var s5=et(ni()),o5=ve("util"),XC=class extends ut{constructor(){super(...arguments);this.fields=de.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=de.Rest()}static{this.paths=[["npm","info"]]}static{this.usage=ot.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command fetches 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 or to the corresponding tagged version. 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 information.\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 all available information about react@next","yarn npm info react@next"],["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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o}=await Qt.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],u=!1,A=await Lt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async p=>{for(let h of this.packages){let E;if(h==="."){let le=o.topLevelWorkspace;if(!le.manifest.name)throw new it(`Missing ${pe.pretty(r,"name",pe.Type.CODE)} field in ${Ae.fromPortablePath(V.join(le.cwd,mr.manifest))}`);E=G.makeDescriptor(le.manifest.name,"unknown")}else E=G.parseDescriptor(h);let w=en.getIdentUrl(E),D=a5(await en.get(w,{configuration:r,ident:E,jsonResponse:!0,customErrorMessage:en.customPackageError})),b=Object.keys(D.versions).sort(s5.default.compareLoose),T=D["dist-tags"].latest||b[b.length-1],N=Ur.validRange(E.range);if(N){let le=s5.default.maxSatisfying(b,N);le!==null?T=le:(p.reportWarning(0,`Unmet range ${G.prettyRange(r,E.range)}; falling back to the latest version`),u=!0)}else Object.hasOwn(D["dist-tags"],E.range)?T=D["dist-tags"][E.range]:E.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${G.prettyRange(r,E.range)}; falling back to the latest version`),u=!0);let U=D.versions[T],J={...D,...U,version:T,versions:b},te;if(a!==null){te={};for(let le of a){let ce=J[le];if(typeof ce<"u")te[le]=ce;else{p.reportWarning(1,`The ${pe.pretty(r,le,pe.Type.CODE)} field doesn't exist inside ${G.prettyIdent(r,E)}'s information`),u=!0;continue}}}else this.json||(delete J.dist,delete J.readme,delete J.users),te=J;p.reportJson(te),this.json||n.push(te)}});o5.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||u)&&this.context.stdout.write(` +`),this.context.stdout.write(`${(0,o5.inspect)(p,{depth:1/0,colors:!0,compact:!1})} +`);return A.exitCode()}};function a5(t){if(Array.isArray(t)){let e=[];for(let r of t)r=a5(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 o=a5(t[r]);o&&(e[r]=o)}return e}else return t||null}Ve();Ve();Gt();var tve=et(Q2()),ZC=class extends ut{constructor(){super(...arguments);this.scope=de.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=de.Boolean("--publish",!1,{description:"Login to the publish registry"});this.alwaysAuth=de.Boolean("--always-auth",{description:"Set the npmAlwaysAuth configuration"})}static{this.paths=[["npm","login"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),o=await bF({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Lt.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let u=await Ivt({configuration:r,registry:o,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),A=await Evt(o,u,r);return await Cvt(o,A,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};async function bF({scope:t,publish:e,configuration:r,cwd:o}){return t&&e?si.getScopeRegistry(t,{configuration:r,type:si.RegistryType.PUBLISH_REGISTRY}):t?si.getScopeRegistry(t,{configuration:r}):e?si.getPublishRegistry((await aE(r,o)).manifest,{configuration:r}):si.getDefaultRegistry({configuration:r})}async function Evt(t,e,r){let o=`/-/user/org.couchdb.user:${encodeURIComponent(e.name)}`,a={_id:`org.couchdb.user:${e.name}`,name:e.name,password:e.password,type:"user",roles:[],date:new Date().toISOString()},n={attemptedAs:e.name,configuration:r,registry:t,jsonResponse:!0,authType:en.AuthType.NO_AUTH};try{return(await en.put(o,a,n)).token}catch(E){if(!(E.originalError?.name==="HTTPError"&&E.originalError?.response.statusCode===409))throw E}let u={...n,authType:en.AuthType.NO_AUTH,headers:{authorization:`Basic ${Buffer.from(`${e.name}:${e.password}`).toString("base64")}`}},A=await en.get(o,u);for(let[E,w]of Object.entries(A))(!a[E]||E==="roles")&&(a[E]=w);let p=`${o}/-rev/${a._rev}`;return(await en.put(p,a,u)).token}async function Cvt(t,e,{alwaysAuth:r,scope:o}){let a=u=>A=>{let p=qe.isIndexableObject(A)?A:{},h=p[u],E=qe.isIndexableObject(h)?h:{};return{...p,[u]:{...E,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=o?{npmScopes:a(o)}:{npmRegistries:a(t)};return await ze.updateHomeConfiguration(n)}async function Ivt({configuration:t,registry:e,report:r,stdin:o,stdout:a}){r.reportInfo(0,`Logging in to ${pe.pretty(t,e,pe.Type.URL)}`);let n=!1;if(e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(r.reportInfo(0,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),r.reportSeparator(),t.env.YARN_IS_TEST_ENV)return{name:t.env.YARN_INJECT_NPM_USER||"",password:t.env.YARN_INJECT_NPM_PASSWORD||""};let u=await(0,tve.prompt)([{type:"input",name:"name",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a}]);return r.reportSeparator(),u}Ve();Ve();Gt();var $C=new Set(["npmAuthIdent","npmAuthToken"]),eI=class extends ut{constructor(){super(...arguments);this.scope=de.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=de.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=de.Boolean("-A,--all",!1,{description:"Logout of all registries"})}static{this.paths=[["npm","logout"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),o=async()=>{let n=await bF({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),u=await ze.find(this.context.cwd,this.context.plugins),A=G.makeIdent(this.scope??null,"pkg");return!si.getAuthConfiguration(n,{configuration:u,ident:A}).get("npmAuthToken")};return(await Lt.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await Bvt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await rve("npmScopes",this.scope),await o()?n.reportInfo(0,`Successfully logged out from ${this.scope}`):n.reportWarning(0,"Scope authentication settings removed, but some other ones settings still apply to it");return}let u=await bF({configuration:r,cwd:this.context.cwd,publish:this.publish});await rve("npmRegistries",u),await o()?n.reportInfo(0,`Successfully logged out from ${u}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};function wvt(t,e){let r=t[e];if(!qe.isIndexableObject(r))return!1;let o=new Set(Object.keys(r));if([...$C].every(n=>!o.has(n)))return!1;for(let n of $C)o.delete(n);if(o.size===0)return t[e]=void 0,!0;let a={...r};for(let n of $C)delete a[n];return t[e]=a,!0}async function Bvt(){let t=e=>{let r=!1,o=qe.isIndexableObject(e)?{...e}:{};o.npmAuthToken&&(delete o.npmAuthToken,r=!0);for(let a of Object.keys(o))wvt(o,a)&&(r=!0);if(Object.keys(o).length!==0)return r?o:e};return await ze.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function rve(t,e){return await ze.updateHomeConfiguration({[t]:r=>{let o=qe.isIndexableObject(r)?r:{};if(!Object.hasOwn(o,e))return r;let a=o[e],n=qe.isIndexableObject(a)?a:{},u=new Set(Object.keys(n));if([...$C].every(p=>!u.has(p)))return r;for(let p of $C)u.delete(p);if(u.size===0)return Object.keys(o).length===1?void 0:{...o,[e]:void 0};let A={};for(let p of $C)A[p]=void 0;return{...o,[e]:{...n,...A}}}})}Ve();Gt();var tI=class extends ut{constructor(){super(...arguments);this.access=de.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=de.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=de.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"});this.otp=de.String("--otp",{description:"The OTP token to use with the command"})}static{this.paths=[["npm","publish"]]}static{this.usage=ot.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 overridden 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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd);if(!a)throw new or(o.cwd,this.context.cwd);if(a.manifest.private)throw new it("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new it("Workspaces must have valid names and versions to be published on an external registry");await o.restoreInstallState();let n=a.manifest.name,u=a.manifest.version,A=si.getPublishRegistry(a.manifest,{configuration:r});return(await Lt.start({configuration:r,stdout:this.context.stdout},async h=>{if(this.tolerateRepublish)try{let E=await en.get(en.getIdentUrl(n),{configuration:r,registry:A,ident:n,jsonResponse:!0});if(!Object.hasOwn(E,"versions"))throw new Jt(15,'Registry returned invalid data for - missing "versions" field');if(Object.hasOwn(E.versions,u)){h.reportWarning(0,`Registry already knows about version ${u}; skipping.`);return}}catch(E){if(E.originalError?.response?.statusCode!==404)throw E}await hn.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await BA.prepareForPack(a,{report:h},async()=>{let E=await BA.genPackList(a);for(let T of E)h.reportInfo(null,T);let w=await BA.genPackStream(a,E),D=await qe.bufferStream(w),b=await KC.getGitHead(a.cwd),C=await KC.makePublishBody(a,D,{access:this.access,tag:this.tag,registry:A,gitHead:b});await en.put(en.getIdentUrl(n),C,{configuration:r,registry:A,ident:n,otp:this.otp,jsonResponse:!0})}),h.reportInfo(0,"Package archive published")})).exitCode()}};Ve();Gt();var nve=et(ni());Ve();St();Gt();var rI=class extends ut{constructor(){super(...arguments);this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=de.String({required:!1})}static{this.paths=[["npm","tag","list"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n;if(typeof this.package<"u")n=G.parseIdent(this.package);else{if(!a)throw new or(o.cwd,this.context.cwd);if(!a.manifest.name)throw new it(`Missing 'name' field in ${Ae.fromPortablePath(V.join(a.cwd,mr.manifest))}`);n=a.manifest.name}let u=await Zv(n,r),p={children:qe.sortMap(Object.entries(u),([h])=>h).map(([h,E])=>({value:pe.tuple(pe.Type.RESOLUTION,{descriptor:G.makeDescriptor(n,h),locator:G.makeLocator(n,E)})}))};return As.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};async function Zv(t,e){let r=`/-/package${en.getIdentUrl(t)}/dist-tags`;return en.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:en.customPackageError})}var nI=class extends ut{constructor(){super(...arguments);this.package=de.String();this.tag=de.String()}static{this.paths=[["npm","tag","add"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd);if(!a)throw new or(o.cwd,this.context.cwd);let n=G.parseDescriptor(this.package,!0),u=n.range;if(!nve.default.valid(u))throw new it(`The range ${pe.pretty(r,n.range,pe.Type.RANGE)} must be a valid semver version`);let A=si.getPublishRegistry(a.manifest,{configuration:r}),p=pe.pretty(r,n,pe.Type.IDENT),h=pe.pretty(r,u,pe.Type.RANGE),E=pe.pretty(r,this.tag,pe.Type.CODE);return(await Lt.start({configuration:r,stdout:this.context.stdout},async D=>{let b=await Zv(n,r);Object.hasOwn(b,this.tag)&&b[this.tag]===u&&D.reportWarning(0,`Tag ${E} is already set to version ${h}`);let C=`/-/package${en.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await en.put(C,u,{configuration:r,registry:A,ident:n,jsonRequest:!0,jsonResponse:!0}),D.reportInfo(0,`Tag ${E} added to version ${h} of package ${p}`)})).exitCode()}};Ve();Gt();var iI=class extends ut{constructor(){super(...arguments);this.package=de.String();this.tag=de.String()}static{this.paths=[["npm","tag","remove"]]}static{this.usage=ot.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"]]})}async execute(){if(this.tag==="latest")throw new it("The 'latest' tag cannot be removed.");let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd);if(!a)throw new or(o.cwd,this.context.cwd);let n=G.parseIdent(this.package),u=si.getPublishRegistry(a.manifest,{configuration:r}),A=pe.pretty(r,this.tag,pe.Type.CODE),p=pe.pretty(r,n,pe.Type.IDENT),h=await Zv(n,r);if(!Object.hasOwn(h,this.tag))throw new it(`${A} is not a tag of package ${p}`);return(await Lt.start({configuration:r,stdout:this.context.stdout},async w=>{let D=`/-/package${en.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await en.del(D,{configuration:r,registry:u,ident:n,jsonResponse:!0}),w.reportInfo(0,`Tag ${A} removed from package ${p}`)})).exitCode()}};Ve();Ve();Gt();var sI=class extends ut{constructor(){super(...arguments);this.scope=de.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=de.Boolean("--publish",!1,{description:"Print username for the publish registry"})}static{this.paths=[["npm","whoami"]]}static{this.usage=ot.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"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),o;return this.scope&&this.publish?o=si.getScopeRegistry(this.scope,{configuration:r,type:si.RegistryType.PUBLISH_REGISTRY}):this.scope?o=si.getScopeRegistry(this.scope,{configuration:r}):this.publish?o=si.getPublishRegistry((await aE(r,this.context.cwd)).manifest,{configuration:r}):o=si.getDefaultRegistry({configuration:r}),(await Lt.start({configuration:r,stdout:this.context.stdout},async n=>{let u;try{u=await en.get("/-/whoami",{configuration:r,registry:o,authType:en.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?G.makeIdent(this.scope,""):void 0})}catch(A){if(A.response?.statusCode===401||A.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw A}n.reportInfo(0,u.username)})).exitCode()}};var vvt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmAuditExcludePackages:{description:"Array of glob patterns of packages to exclude from npm audit",type:"STRING",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:"Array of glob patterns of advisory IDs to exclude from npm audit",type:"STRING",default:[],isArray:!0}},commands:[zC,XC,ZC,eI,tI,nI,rI,iI,sI]},Dvt=vvt;var g5={};Vt(g5,{PatchCommand:()=>AI,PatchCommitCommand:()=>uI,PatchFetcher:()=>nD,PatchResolver:()=>iD,default:()=>jvt,patchUtils:()=>Id});Ve();Ve();St();sA();var Id={};Vt(Id,{applyPatchFile:()=>QF,diffFolders:()=>p5,ensureUnpatchedDescriptor:()=>c5,ensureUnpatchedLocator:()=>RF,extractPackageToDisk:()=>f5,extractPatchFlags:()=>uve,isParentRequired:()=>A5,isPatchDescriptor:()=>FF,isPatchLocator:()=>i0,loadPatchFiles:()=>rD,makeDescriptor:()=>TF,makeLocator:()=>u5,makePatchHash:()=>h5,parseDescriptor:()=>eD,parseLocator:()=>tD,parsePatchFile:()=>$v,unpatchDescriptor:()=>_vt,unpatchLocator:()=>Hvt});Ve();St();Ve();St();var Svt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function oI(t){return V.relative(Bt.root,V.resolve(Bt.root,Ae.toPortablePath(t)))}function Pvt(t){let e=t.trim().match(Svt);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 xvt=420,bvt=493;var ive=()=>({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}),kvt=t=>({header:Pvt(t),parts:[]}),Qvt={"@":"header","-":"deletion","+":"insertion"," ":"context","\\":"pragma",undefined:"context"};function Fvt(t){let e=[],r=ive(),o="parsing header",a=null,n=null;function u(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function A(){u(),e.push(r),r=ive()}for(let p=0;p0?"patch":"mode change",J=null;switch(U){case"rename":{if(!E||!w)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:o,fromPath:oI(E),toPath:oI(w)}),J=w}break;case"file deletion":{let te=a||C;if(!te)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:o,hunk:N&&N[0]||null,path:oI(te),mode:kF(p),hash:D})}break;case"file creation":{let te=n||T;if(!te)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:o,hunk:N&&N[0]||null,path:oI(te),mode:kF(h),hash:b})}break;case"patch":case"mode change":J=T||n;break;default:qe.assertNever(U);break}J&&u&&A&&u!==A&&e.push({type:"mode change",semverExclusivity:o,path:oI(J),oldMode:kF(u),newMode:kF(A)}),J&&N&&N.length&&e.push({type:"patch",semverExclusivity:o,path:oI(J),hunks:N,beforeHash:D,afterHash:b})}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 kF(t){let e=parseInt(t,8)&511;if(e!==xvt&&e!==bvt)throw new Error(`Unexpected file mode string: ${t}`);return e}function $v(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),Rvt(Fvt(e))}function Tvt(t){let e=0,r=0;for(let{type:o,lines:a}of t.parts)switch(o){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:qe.assertNever(o);break}if(e!==t.header.original.length||r!==t.header.patched.length){let o=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${o(t.header.original.length)} ${o(t.header.patched.length)} @@, got @@ ${o(e)} ${o(r)} @@)`)}}Ve();St();var aI=class extends Error{constructor(r,o){super(`Cannot apply hunk #${r+1}`);this.hunk=o}};async function lI(t,e,r){let o=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,o.atime,o.mtime)}async function QF(t,{baseFs:e=new _n,dryRun:r=!1,version:o=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&o!==null&&!Ur.satisfiesWithPrereleases(o,a.semverExclusivity)))switch(a.type){case"file deletion":if(r){if(!e.existsSync(a.path))throw new Error(`Trying to delete a file that doesn't exist: ${a.path}`)}else await lI(e,V.dirname(a.path),async()=>{await e.unlinkPromise(a.path)});break;case"rename":if(r){if(!e.existsSync(a.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${a.fromPath}`)}else await lI(e,V.dirname(a.fromPath),async()=>{await lI(e,V.dirname(a.toPath),async()=>{await lI(e,a.fromPath,async()=>(await e.movePromise(a.fromPath,a.toPath),a.toPath))})});break;case"file creation":if(r){if(e.existsSync(a.path))throw new Error(`Trying to create a file that already exists: ${a.path}`)}else{let n=a.hunk?a.hunk.parts[0].lines.join(` +`)+(a.hunk.parts[0].noNewlineAtEndOfFile?"":` +`):"";await e.mkdirpPromise(V.dirname(a.path),{chmod:493,utimes:[Si.SAFE_TIME,Si.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,Si.SAFE_TIME,Si.SAFE_TIME)}break;case"patch":await lI(e,a.path,async()=>{await Ovt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let u=(await e.statPromise(a.path)).mode;if(sve(a.newMode)!==sve(u))continue;await lI(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:qe.assertNever(a);break}}function sve(t){return(t&64)>0}function ove(t){return t.replace(/\s+$/,"")}function Nvt(t,e){return ove(t)===ove(e)}async function Ovt({hunks:t,path:e},{baseFs:r,dryRun:o=!1}){let a=await r.statSync(e).mode,u=(await r.readFileSync(e,"utf8")).split(/\n/),A=[],p=0,h=0;for(let w of t){let D=Math.max(h,w.header.patched.start+p),b=Math.max(0,D-h),C=Math.max(0,u.length-D-w.header.original.length),T=Math.max(b,C),N=0,U=0,J=null;for(;N<=T;){if(N<=b&&(U=D-N,J=ave(w,u,U),J!==null)){N=-N;break}if(N<=C&&(U=D+N,J=ave(w,u,U),J!==null))break;N+=1}if(J===null)throw new aI(t.indexOf(w),w);A.push(J),p+=N,h=U+w.header.original.length}if(o)return;let E=0;for(let w of A)for(let D of w)switch(D.type){case"splice":{let b=D.index+E;u.splice(b,D.numToDelete,...D.linesToInsert),E+=D.linesToInsert.length-D.numToDelete}break;case"pop":u.pop();break;case"push":u.push(D.line);break;default:qe.assertNever(D);break}await r.writeFilePromise(e,u.join(` +`),{mode:a})}function ave(t,e,r){let o=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let u=e[r];if(u==null||!Nvt(u,n))return null;r+=1}a.type==="deletion"&&(o.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&o.push({type:"push",line:""}))}break;case"insertion":o.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&o.push({type:"pop"});break;default:qe.assertNever(a.type);break}return o}var Uvt=/^builtin<([^>]+)>$/;function cI(t,e){let{protocol:r,source:o,selector:a,params:n}=G.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(o===null)throw new Error("Patch locators must explicitly define their source");let u=a?a.split(/&/).map(E=>Ae.toPortablePath(E)):[],A=n&&typeof n.locator=="string"?G.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(o);return{parentLocator:A,sourceItem:h,patchPaths:u,sourceVersion:p}}function FF(t){return t.range.startsWith("patch:")}function i0(t){return t.reference.startsWith("patch:")}function eD(t){let{sourceItem:e,...r}=cI(t.range,G.parseDescriptor);return{...r,sourceDescriptor:e}}function tD(t){let{sourceItem:e,...r}=cI(t.reference,G.parseLocator);return{...r,sourceLocator:e}}function _vt(t){let{sourceItem:e}=cI(t.range,G.parseDescriptor);return e}function Hvt(t){let{sourceItem:e}=cI(t.reference,G.parseLocator);return e}function c5(t){if(!FF(t))return t;let{sourceItem:e}=cI(t.range,G.parseDescriptor);return e}function RF(t){if(!i0(t))return t;let{sourceItem:e}=cI(t.reference,G.parseLocator);return e}function lve({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:o,patchHash:a},n){let u=t!==null?{locator:G.stringifyLocator(t)}:{},A=typeof o<"u"?{version:o}:{},p=typeof a<"u"?{hash:a}:{};return G.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...A,...p,...u}})}function TF(t,{parentLocator:e,sourceDescriptor:r,patchPaths:o}){return G.makeDescriptor(t,lve({parentLocator:e,sourceItem:r,patchPaths:o},G.stringifyDescriptor))}function u5(t,{parentLocator:e,sourcePackage:r,patchPaths:o,patchHash:a}){return G.makeLocator(t,lve({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:o,patchHash:a},G.stringifyLocator))}function cve({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:o},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let u=a.match(Uvt);return u!==null?o(u[1]):a.startsWith("~/")?r(a.slice(2)):V.isAbsolute(a)?t(a):e(a)}function uve(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function A5(t){return cve({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function rD(t,e,r){let o=t!==null?await r.fetcher.fetch(t,r):null,a=o&&o.localPath?{packageFs:new En(Bt.root),prefixPath:V.relative(Bt.root,o.localPath)}:o;o&&o!==a&&o.releaseFs&&o.releaseFs();let n=await qe.releaseAfterUseAsync(async()=>await Promise.all(e.map(async u=>{let A=uve(u),p=await cve({onAbsolute:async h=>await ae.readFilePromise(h,"utf8"),onRelative:async h=>{if(a===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await a.packageFs.readFilePromise(V.join(a.prefixPath,h),"utf8")},onProject:async h=>await ae.readFilePromise(V.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(E=>E.getBuiltinPatch,r.project,h)},u);return{...A,source:p}})));for(let u of n)typeof u.source=="string"&&(u.source=u.source.replace(/\r\n?/g,` +`));return n}async function f5(t,{cache:e,project:r}){let o=r.storedPackages.get(t.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=RF(t),n=r.storedChecksums,u=new Ri,A=await ae.mktempPromise(),p=V.join(A,"source"),h=V.join(A,"user"),E=V.join(A,".yarn-patch.json"),w=r.configuration.makeFetcher(),D=[];try{let b,C;if(t.locatorHash===a.locatorHash){let T=await w.fetch(t,{cache:e,project:r,fetcher:w,checksums:n,report:u});D.push(()=>T.releaseFs?.()),b=T,C=T}else b=await w.fetch(t,{cache:e,project:r,fetcher:w,checksums:n,report:u}),D.push(()=>b.releaseFs?.()),C=await w.fetch(t,{cache:e,project:r,fetcher:w,checksums:n,report:u}),D.push(()=>C.releaseFs?.());await Promise.all([ae.copyPromise(p,b.prefixPath,{baseFs:b.packageFs}),ae.copyPromise(h,C.prefixPath,{baseFs:C.packageFs}),ae.writeJsonPromise(E,{locator:G.stringifyLocator(t),version:o.version})])}finally{for(let b of D)b()}return ae.detachTemp(A),h}async function p5(t,e){let r=Ae.fromPortablePath(t).replace(/\\/g,"/"),o=Ae.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await Hr.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--no-renames","--text",r,o],{cwd:Ae.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""}});if(n.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': +${n}`);let u=r.startsWith("/")?A=>A.slice(1):A=>A;return a.replace(new RegExp(`(a|b)(${qe.escapeRegExp(`/${u(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${qe.escapeRegExp(`/${u(o)}/`)}`,"g"),"$1/").replace(new RegExp(qe.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(qe.escapeRegExp(`${o}/`),"g"),"")}function h5(t,e){let r=[];for(let{source:o}of t){if(o===null)continue;let a=$v(o);for(let n of a){let{semverExclusivity:u,...A}=n;u!==null&&e!==null&&!Ur.satisfiesWithPrereleases(e,u)||r.push(JSON.stringify(A))}}return bn.makeHash(`${3}`,...r).slice(0,6)}Ve();function Ave(t,{configuration:e,report:r}){for(let o of t.parts)for(let a of o.lines)switch(o.type){case"context":r.reportInfo(null,` ${pe.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${pe.pretty(e,a,pe.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${pe.pretty(e,a,pe.Type.ADDED)}`);break;default:qe.assertNever(o.type)}}var nD=class{supports(e,r){return!!i0(e)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async patchPackage(e,r){let{parentLocator:o,sourceLocator:a,sourceVersion:n,patchPaths:u}=tD(e),A=await rD(o,u,r),p=await ae.mktempPromise(),h=V.join(p,"current.zip"),E=await r.fetcher.fetch(a,r),w=G.getIdentVendorPath(e),D=new Zi(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await qe.releaseAfterUseAsync(async()=>{await D.copyPromise(w,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs),D.saveAndClose();for(let{source:b,optional:C}of A){if(b===null)continue;let T=new Zi(h,{level:r.project.configuration.get("compressionLevel")}),N=new En(V.resolve(Bt.root,w),{baseFs:T});try{await QF($v(b),{baseFs:N,version:n})}catch(U){if(!(U instanceof aI))throw U;let J=r.project.configuration.get("enableInlineHunks"),te=!J&&!C?" (set enableInlineHunks for details)":"",le=`${G.prettyLocator(r.project.configuration,e)}: ${U.message}${te}`,ce=ue=>{J&&Ave(U.hunk,{configuration:r.project.configuration,report:ue})};if(T.discardAndClose(),C){r.report.reportWarningOnce(66,le,{reportExtra:ce});continue}else throw new Jt(66,le,ce)}T.saveAndClose()}return new Zi(h,{level:r.project.configuration.get("compressionLevel")})}};Ve();var iD=class{supportsDescriptor(e,r){return!!FF(e)}supportsLocator(e,r){return!!i0(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){let{patchPaths:a}=eD(e);return a.every(n=>!A5(n))?e:G.bindDescriptor(e,{locator:G.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:o}=eD(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(o)}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=eD(e),u=await rD(a,n,o.fetchOptions),A=r.sourceDescriptor;if(typeof A>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=h5(u,A.version);return[u5(e,{parentLocator:a,sourcePackage:A,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:o}=tD(e);return{...await r.resolver.resolve(o,r),...e}}};Ve();St();Gt();var uI=class extends ut{constructor(){super(...arguments);this.save=de.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=de.String()}static{this.paths=[["patch-commit"]]}static{this.usage=ot.Usage({description:"generate a patch out of a directory",details:"\n By default, 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 With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\n\n Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd);if(!a)throw new or(o.cwd,this.context.cwd);await o.restoreInstallState();let n=V.resolve(this.context.cwd,Ae.toPortablePath(this.patchFolder)),u=V.join(n,"../source"),A=V.join(n,"../.yarn-patch.json");if(!ae.existsSync(u))throw new it("The argument folder didn't get created by 'yarn patch'");let p=await p5(u,n),h=await ae.readJsonPromise(A),E=G.parseLocator(h.locator,!0);if(!o.storedPackages.has(E.locatorHash))throw new it("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let w=r.get("patchFolder"),D=V.join(w,`${G.slugifyLocator(E)}.patch`);await ae.mkdirPromise(w,{recursive:!0}),await ae.writeFilePromise(D,p);let b=[],C=new Map;for(let T of o.storedPackages.values()){if(G.isVirtualLocator(T))continue;let N=T.dependencies.get(E.identHash);if(!N)continue;let U=G.ensureDevirtualizedDescriptor(N),J=c5(U),te=o.storedResolutions.get(J.descriptorHash);if(!te)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!o.storedPackages.get(te))throw new Error("Assertion failed: Expected the package to have been registered");let ce=o.tryWorkspaceByLocator(T);if(ce)b.push(ce);else{let ue=o.originalPackages.get(T.locatorHash);if(!ue)throw new Error("Assertion failed: Expected the original package to have been registered");let Ie=ue.dependencies.get(N.identHash);if(!Ie)throw new Error("Assertion failed: Expected the original dependency to have been registered");C.set(Ie.descriptorHash,Ie)}}for(let T of b)for(let N of _t.hardDependencies){let U=T.manifest[N].get(E.identHash);if(!U)continue;let J=TF(U,{parentLocator:null,sourceDescriptor:G.convertLocatorToDescriptor(E),patchPaths:[V.join(mr.home,V.relative(o.cwd,D))]});T.manifest[N].set(U.identHash,J)}for(let T of C.values()){let N=TF(T,{parentLocator:null,sourceDescriptor:G.convertLocatorToDescriptor(E),patchPaths:[V.join(mr.home,V.relative(o.cwd,D))]});o.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:G.stringifyIdent(N),description:T.range}},reference:N.range})}await o.persist()}};Ve();St();Gt();var AI=class extends ut{constructor(){super(...arguments);this.update=de.Boolean("-u,--update",!1,{description:"Reapply local patches that already apply to this packages"});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=de.String()}static{this.paths=[["patch"]]}static{this.usage=ot.Usage({description:"prepare a package for patching",details:"\n This command will cause a package to be extracted in a temporary directory intended to be editable at will.\n\n Once you're done with your changes, run `yarn patch-commit -s path` (with `path` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\n\n Calling the command when you already have a patch won't import it by default (in other words, the default behavior is to reset existing patches). However, adding the `-u,--update` flag will import any current patch.\n "})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n=await Wr.find(r);if(!a)throw new or(o.cwd,this.context.cwd);await o.restoreInstallState();let u=G.parseLocator(this.package);if(u.reference==="unknown"){let A=qe.mapAndFilter([...o.storedPackages.values()],p=>p.identHash!==u.identHash?qe.mapAndFilter.skip:G.isVirtualLocator(p)?qe.mapAndFilter.skip:i0(p)!==this.update?qe.mapAndFilter.skip:p);if(A.length===0)throw new it("No package found in the project for the given locator");if(A.length>1)throw new it(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): +${A.map(p=>` +- ${G.prettyLocator(r,p)}`).join("")}`);u=A[0]}if(!o.storedPackages.has(u.locatorHash))throw new it("No package found in the project for the given locator");await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=RF(u),h=await f5(u,{cache:n,project:o});A.reportJson({locator:G.stringifyLocator(p),path:Ae.fromPortablePath(h)});let E=this.update?" along with its current modifications":"";A.reportInfo(0,`Package ${G.prettyLocator(r,p)} got extracted with success${E}!`),A.reportInfo(0,`You can now edit the following folder: ${pe.pretty(r,Ae.fromPortablePath(h),"magenta")}`),A.reportInfo(0,`Once you are done run ${pe.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${Ae.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};var qvt={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:"BOOLEAN",default:!1},patchFolder:{description:"Folder where the patch files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/patches"}},commands:[uI,AI],fetchers:[nD],resolvers:[iD]},jvt=qvt;var y5={};Vt(y5,{PnpmLinker:()=>sD,default:()=>Kvt});Ve();St();Gt();var sD=class{getCustomDataKey(){return JSON.stringify({name:"PnpmLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${pe.pretty(r.project.configuration,`${r.project.cwd}/package.json`,pe.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=a.pathsByLocator.get(e.locatorHash);if(typeof n>"u")throw new it(`Couldn't find ${G.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return n.packageLocation}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${pe.pretty(r.project.configuration,`${r.project.cwd}/package.json`,pe.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(n){let p=a.locatorByPath.get(n[1]);if(p)return p}let u=e,A=e;do{A=u,u=V.dirname(A);let p=a.locatorByPath.get(A);if(p)return p}while(u!==A);return null}makeInstaller(e){return new d5(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},d5=class{constructor(e){this.opts=e;this.asyncActions=new qe.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=$D(ae,{indexPath:V.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,o){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,o);case"HARD":return this.installPackageHard(e,r,o)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,o){let a=V.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?V.join(a,mr.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,o){let a=Gvt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,G.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await ae.mkdirPromise(n,{recursive:!0}),await ae.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let A=G.isVirtualLocator(e)?G.devirtualizeLocator(e):e,p={manifest:await _t.tryFind(r.prefixPath,{baseFs:r.packageFs})??new _t,misc:{hasBindingGyp:CA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(A,e.version),E=CA.extractBuildRequest(e,p,h,{configuration:this.opts.project.configuration});return{packageLocation:n,buildRequest:E}}async attachInternalDependencies(e,r){if(this.opts.project.configuration.get("nodeLinker")!=="pnpm"||!fve(e,{project:this.opts.project}))return;let o=this.customData.pathsByLocator.get(e.locatorHash);if(typeof o>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${G.stringifyLocator(e)})`);let{dependenciesLocation:a}=o;a&&this.asyncActions.reduce(e.locatorHash,async n=>{await ae.mkdirPromise(a,{recursive:!0});let u=await Wvt(a),A=new Map(u),p=[n],h=(w,D)=>{let b=D;fve(D,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),b=G.devirtualizeLocator(D));let C=this.customData.pathsByLocator.get(b.locatorHash);if(typeof C>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${G.stringifyLocator(D)})`);let T=G.stringifyIdent(w),N=V.join(a,T),U=V.relative(V.dirname(N),C.packageLocation),J=A.get(T);A.delete(T),p.push(Promise.resolve().then(async()=>{if(J){if(J.isSymbolicLink()&&await ae.readlinkPromise(N)===U)return;await ae.removePromise(N)}await ae.mkdirpPromise(V.dirname(N)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await ae.symlinkPromise(C.packageLocation,N,"junction"):await ae.symlinkPromise(U,N)}))},E=!1;for(let[w,D]of r)w.identHash===e.identHash&&(E=!0),h(w,D);!E&&!this.opts.project.tryWorkspaceByLocator(e)&&h(G.convertLocatorToDescriptor(e),e),p.push(Yvt(a,A)),await Promise.all(p)})}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=hve(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await ae.removePromise(e);else{let r;try{r=new Set(await ae.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:o}of this.customData.pathsByLocator.values()){if(!o)continue;let a=V.contains(e,o);if(a===null)continue;let[n]=a.split(V.sep);r.delete(n)}await Promise.all([...r].map(async o=>{await ae.removePromise(V.join(e,o))}))}return await this.asyncActions.wait(),await m5(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await m5(pve(this.opts.project)),{customData:this.customData}}};function pve(t){return V.join(t.cwd,mr.nodeModules)}function hve(t){return V.join(pve(t),".store")}function Gvt(t,{project:e}){let r=G.slugifyLocator(t),o=hve(e),a=V.join(o,r,"package"),n=V.join(o,r,mr.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function fve(t,{project:e}){return!G.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function Wvt(t){let e=new Map,r=[];try{r=await ae.readdirPromise(t,{withFileTypes:!0})}catch(o){if(o.code!=="ENOENT")throw o}try{for(let o of r)if(!o.name.startsWith("."))if(o.name.startsWith("@")){let a=await ae.readdirPromise(V.join(t,o.name),{withFileTypes:!0});if(a.length===0)e.set(o.name,o);else for(let n of a)e.set(`${o.name}/${n.name}`,n)}else e.set(o.name,o)}catch(o){if(o.code!=="ENOENT")throw o}return e}async function Yvt(t,e){let r=[],o=new Set;for(let a of e.keys()){r.push(ae.removePromise(V.join(t,a)));let n=G.tryParseIdent(a)?.scope;n&&o.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...o].map(a=>m5(V.join(t,a)))))}async function m5(t){try{await ae.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var Vvt={linkers:[sD]},Kvt=Vvt;var D5={};Vt(D5,{StageCommand:()=>fI,default:()=>sDt,stageUtils:()=>NF});Ve();St();Gt();Ve();St();var NF={};Vt(NF,{ActionType:()=>E5,checkConsensus:()=>LF,expandDirectory:()=>w5,findConsensus:()=>B5,findVcsRoot:()=>C5,genCommitMessage:()=>v5,getCommitPrefix:()=>gve,isYarnFile:()=>I5});St();var E5=(n=>(n[n.CREATE=0]="CREATE",n[n.DELETE=1]="DELETE",n[n.ADD=2]="ADD",n[n.REMOVE=3]="REMOVE",n[n.MODIFY=4]="MODIFY",n))(E5||{});async function C5(t,{marker:e}){do if(!ae.existsSync(V.join(t,e)))t=V.dirname(t);else return t;while(t!=="/");return null}function I5(t,{roots:e,names:r}){if(r.has(V.basename(t)))return!0;do if(!e.has(t))t=V.dirname(t);else return!0;while(t!=="/");return!1}function w5(t){let e=[],r=[t];for(;r.length>0;){let o=r.pop(),a=ae.readdirSync(o);for(let n of a){let u=V.resolve(o,n);ae.lstatSync(u).isDirectory()?r.push(u):e.push(u)}}return e}function LF(t,e){let r=0,o=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:o+=1);return r>=o}function B5(t){let e=LF(t,/^(\w\(\w+\):\s*)?\w+s/),r=LF(t,/^(\w\(\w+\):\s*)?[A-Z]/),o=LF(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:o}}function gve(t){return t.useComponent?"chore(yarn): ":""}var Jvt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function v5(t,e){let r=gve(t),o=[],a=e.slice().sort((n,u)=>n[0]-u[0]);for(;a.length>0;){let[n,u]=a.shift(),A=Jvt.get(n);t.useUpperCase&&o.length===0&&(A=`${A[0].toUpperCase()}${A.slice(1)}`),t.useThirdPerson&&(A+="s");let p=[u];for(;a.length>0&&a[0][0]===n;){let[,E]=a.shift();p.push(E)}p.sort();let h=p.shift();p.length===1?h+=" (and one other)":p.length>1&&(h+=` (and ${p.length} others)`),o.push(`${A} ${h}`)}return`${r}${o.join(", ")}`}var zvt="Commit generated via `yarn stage`",Xvt=11;async function dve(t){let{code:e,stdout:r}=await Hr.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function Zvt(t,e){let r=[],o=e.filter(h=>V.basename(h.path)==="package.json");for(let{action:h,path:E}of o){let w=V.relative(t,E);if(h===4){let D=await dve(t),{stdout:b}=await Hr.execvp("git",["show",`${D}:${w}`],{cwd:t,strict:!0}),C=await _t.fromText(b),T=await _t.fromFile(E),N=new Map([...T.dependencies,...T.devDependencies]),U=new Map([...C.dependencies,...C.devDependencies]);for(let[J,te]of U){let le=G.stringifyIdent(te),ce=N.get(J);ce?ce.range!==te.range&&r.push([4,`${le} to ${ce.range}`]):r.push([3,le])}for(let[J,te]of N)U.has(J)||r.push([2,G.stringifyIdent(te)])}else if(h===0){let D=await _t.fromFile(E);D.name?r.push([0,G.stringifyIdent(D.name)]):r.push([0,"a package"])}else if(h===1){let D=await dve(t),{stdout:b}=await Hr.execvp("git",["show",`${D}:${w}`],{cwd:t,strict:!0}),C=await _t.fromText(b);C.name?r.push([1,G.stringifyIdent(C.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await Hr.execvp("git",["log",`-${Xvt}`,"--pretty=format:%s"],{cwd:t}),u=a===0?n.split(/\n/g).filter(h=>h!==""):[],A=B5(u);return v5(A,r)}var $vt={0:[" A ","?? "],4:[" M "],1:[" D "]},eDt={0:["A "],4:["M "],1:["D "]},mve={async findRoot(t){return await C5(t,{marker:".git"})},async filterChanges(t,e,r,o){let{stdout:a}=await Hr.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),u=o?.staged?eDt:$vt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),E=V.resolve(t,p.slice(3));if(!o?.staged&&h==="?? "&&p.endsWith("/"))return w5(E).map(w=>({action:0,path:w}));{let D=[0,4,1].find(b=>u[b].includes(h));return D!==void 0?[{action:D,path:E}]:[]}})).filter(p=>I5(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await Zvt(t,e)},async makeStage(t,e){let r=e.map(o=>Ae.fromPortablePath(o.path));await Hr.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let o=e.map(a=>Ae.fromPortablePath(a.path));await Hr.execvp("git",["add","-N","--",...o],{cwd:t,strict:!0}),await Hr.execvp("git",["commit","-m",`${r} + +${zvt} +`,"--",...o],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(o=>Ae.fromPortablePath(o.path));await Hr.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var tDt=[mve],fI=class extends ut{constructor(){super(...arguments);this.commit=de.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=de.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=de.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=de.Boolean("-u,--update",!1,{hidden:!0})}static{this.paths=[["stage"]]}static{this.usage=ot.Usage({description:"add all yarn files to your vcs",details:"\n This command will add to your staging area the files belonging to Yarn (typically any modified `package.json` and `.yarnrc.yml` files, but also linker-generated files, cache data, etc). It will take your ignore list into account, so the cache files won't be added if the cache is ignored in a `.gitignore` file (assuming you use Git).\n\n Running `--reset` will instead remove them from the staging area (the changes will still be there, but won't be committed until you stage them back).\n\n Since the staging area is a non-existent concept in Mercurial, Yarn will always create a new commit when running this command on Mercurial repositories. You can get this behavior when using Git by using the `--commit` flag which will directly create a commit.\n ",examples:[["Adds all modified project files to the staging area","yarn stage"],["Creates a new commit containing all modified project files","yarn stage --commit"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o}=await Qt.find(r,this.context.cwd),{driver:a,root:n}=await rDt(o.cwd),u=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(w=>w.populateYarnPaths,o,w=>{u.push(w)});let A=new Set;for(let w of u)for(let D of nDt(n,w))A.add(D);let p=new Set([r.get("rcFilename"),mr.lockfile,mr.manifest]),h=await a.filterChanges(n,A,p),E=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${E} +`);else for(let w of h)this.context.stdout.write(`${Ae.fromPortablePath(w.path)} +`);else if(this.reset){let w=await a.filterChanges(n,A,p,{staged:!0});w.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,w)}else h.length===0?this.context.stdout.write("No changes found!"):this.commit?await a.makeCommit(n,h,E):(await a.makeStage(n,h),this.context.stdout.write(E))}};async function rDt(t){let e=null,r=null;for(let o of tDt)if((r=await o.findRoot(t))!==null){e=o;break}if(e===null||r===null)throw new it("No stage driver has been found for your current project");return{driver:e,root:r}}function nDt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let o;try{o=ae.statSync(e)}catch{break}if(o.isSymbolicLink())e=V.resolve(V.dirname(e),ae.readlinkSync(e));else break}return r}var iDt={commands:[fI]},sDt=iDt;var S5={};Vt(S5,{default:()=>pDt});Ve();Ve();St();var Cve=et(ni());Ve();var yve=et(N6()),oDt="e8e1bd300d860104bb8c58453ffa1eb4",aDt="OFCNCOG2CU",Eve=async(t,e)=>{let r=G.stringifyIdent(t),a=lDt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},lDt=t=>(0,yve.default)(aDt,oDt,{requester:{async send(r){try{let o=await on.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:o.body,isTimedOut:!1,status:o.statusCode}}catch(o){return{content:o.response.body,isTimedOut:!1,status:o.response.statusCode}}}}});var Ive=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,cDt=async(t,e,r,o)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??(ae.existsSync(V.join(t.cwd,"tsconfig.json"))||ae.existsSync(V.join(a.cwd,"tsconfig.json")))))return;let A=n.makeResolver(),p={project:a,resolver:A,report:new Ri};if(!await Eve(r,n))return;let E=Ive(r),w=G.parseRange(r.range).selector;if(!Ur.validRange(w)){let N=n.normalizeDependency(r),U=await A.getCandidates(N,{},p);w=G.parseRange(U[0].reference).selector}let D=Cve.default.coerce(w);if(D===null)return;let b=`${nu.Modifier.CARET}${D.major}`,C=G.makeDescriptor(G.makeIdent("types",E),b),T=qe.mapAndFind(a.workspaces,N=>{let U=N.manifest.dependencies.get(r.identHash)?.descriptorHash,J=N.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&J!==r.descriptorHash)return qe.mapAndFind.skip;let te=[];for(let le of _t.allDependencies){let ce=N.manifest[le].get(C.identHash);typeof ce>"u"||te.push([le,ce])}return te.length===0?qe.mapAndFind.skip:te});if(typeof T<"u")for(let[N,U]of T)t.manifest[N].set(U.identHash,U);else{try{let N=n.normalizeDependency(C);if((await A.getCandidates(N,{},p)).length===0)return}catch{return}t.manifest[nu.Target.DEVELOPMENT].set(C.identHash,C)}},uDt=async(t,e,r)=>{if(r.scope==="types")return;let{project:o}=t,{configuration:a}=o;if(!(a.get("tsEnableAutoTypes")??(ae.existsSync(V.join(t.cwd,"tsconfig.json"))||ae.existsSync(V.join(o.cwd,"tsconfig.json")))))return;let u=Ive(r),A=G.makeIdent("types",u);for(let p of _t.allDependencies)typeof t.manifest[p].get(A.identHash)>"u"||t.manifest[p].delete(A.identHash)},ADt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},fDt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:cDt,afterWorkspaceDependencyRemoval:uDt,beforeWorkspacePacking:ADt}},pDt=fDt;var Q5={};Vt(Q5,{VersionApplyCommand:()=>mI,VersionCheckCommand:()=>yI,VersionCommand:()=>EI,default:()=>FDt,versionUtils:()=>dI});Ve();Ve();Gt();var dI={};Vt(dI,{Decision:()=>hI,applyPrerelease:()=>Pve,applyReleases:()=>k5,applyStrategy:()=>MF,clearVersionFiles:()=>P5,getUndecidedDependentWorkspaces:()=>aD,getUndecidedWorkspaces:()=>OF,openVersionFile:()=>gI,requireMoreDecisions:()=>bDt,resolveVersionFiles:()=>oD,suggestStrategy:()=>b5,updateVersionFiles:()=>x5,validateReleaseDecision:()=>pI});Ve();St();Ol();Gt();var Sve=et(Dve()),SA=et(ni()),xDt=/^(>=|[~^]|)(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/,hI=(u=>(u.UNDECIDED="undecided",u.DECLINE="decline",u.MAJOR="major",u.MINOR="minor",u.PATCH="patch",u.PRERELEASE="prerelease",u))(hI||{});function pI(t){let e=SA.default.valid(t);return e||qe.validateEnum((0,Sve.default)(hI,"UNDECIDED"),t)}async function oD(t,{prerelease:e=null}={}){let r=new Map,o=t.configuration.get("deferredVersionFolder");if(!ae.existsSync(o))return r;let a=await ae.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=V.join(o,n),A=await ae.readFilePromise(u,"utf8"),p=Vi(A);for(let[h,E]of Object.entries(p.releases||{})){if(E==="decline")continue;let w=G.parseIdent(h),D=t.tryWorkspaceByIdent(w);if(D===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${V.basename(u)} references ${h})`);if(D.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${G.prettyLocator(t.configuration,D.anchoredLocator)})`);let b=D.manifest.raw.stableVersion??D.manifest.version,C=r.get(D),T=MF(b,pI(E));if(T===null)throw new Error(`Assertion failed: Expected ${b} to support being bumped via strategy ${E}`);let N=typeof C<"u"?SA.default.gt(T,C)?T:C:T;r.set(D,N)}}return e&&(r=new Map([...r].map(([n,u])=>[n,Pve(u,{current:n.manifest.version,prerelease:e})]))),r}async function P5(t){let e=t.configuration.get("deferredVersionFolder");ae.existsSync(e)&&await ae.removePromise(e)}async function x5(t,e){let r=new Set(e),o=t.configuration.get("deferredVersionFolder");if(!ae.existsSync(o))return;let a=await ae.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=V.join(o,n),A=await ae.readFilePromise(u,"utf8"),p=Vi(A),h=p?.releases;if(h){for(let E of Object.keys(h)){let w=G.parseIdent(E),D=t.tryWorkspaceByIdent(w);(D===null||r.has(D))&&delete p.releases[E]}Object.keys(p.releases).length>0?await ae.changeFilePromise(u,Sa(new Sa.PreserveOrdering(p))):await ae.unlinkPromise(u)}}}async function gI(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let o=await ra.fetchRoot(r.projectCwd),a=o!==null?await ra.fetchBase(o,{baseRefs:r.get("changesetBaseRefs")}):null,n=o!==null?await ra.fetchChangedFiles(o,{base:a.hash,project:t}):[],u=r.get("deferredVersionFolder"),A=n.filter(b=>V.contains(u,b)!==null);if(A.length>1)throw new it(`Your current branch contains multiple versioning files; this isn't supported: +- ${A.map(b=>Ae.fromPortablePath(b)).join(` +- `)}`);let p=new Set(qe.mapAndFilter(n,b=>{let C=t.tryWorkspaceByFilePath(b);return C===null?qe.mapAndFilter.skip:C}));if(A.length===0&&p.size===0&&!e)return null;let h=A.length===1?A[0]:V.join(u,`${bn.makeHash(Math.random().toString()).slice(0,8)}.yml`),E=ae.existsSync(h)?await ae.readFilePromise(h,"utf8"):"{}",w=Vi(E),D=new Map;for(let b of w.declined||[]){let C=G.parseIdent(b),T=t.getWorkspaceByIdent(C);D.set(T,"decline")}for(let[b,C]of Object.entries(w.releases||{})){let T=G.parseIdent(b),N=t.getWorkspaceByIdent(T);D.set(N,pI(C))}return{project:t,root:o,baseHash:a!==null?a.hash:null,baseTitle:a!==null?a.title:null,changedFiles:new Set(n),changedWorkspaces:p,releaseRoots:new Set([...p].filter(b=>b.manifest.version!==null)),releases:D,async saveAll(){let b={},C=[],T=[];for(let N of t.workspaces){if(N.manifest.version===null)continue;let U=G.stringifyIdent(N.anchoredLocator),J=D.get(N);J==="decline"?C.push(U):typeof J<"u"?b[U]=pI(J):p.has(N)&&T.push(U)}await ae.mkdirPromise(V.dirname(h),{recursive:!0}),await ae.changeFilePromise(h,Sa(new Sa.PreserveOrdering({releases:Object.keys(b).length>0?b:void 0,declined:C.length>0?C:void 0,undecided:T.length>0?T:void 0})))}}}function bDt(t){return OF(t).size>0||aD(t).length>0}function OF(t){let e=new Set;for(let r of t.changedWorkspaces)r.manifest.version!==null&&(t.releases.has(r)||e.add(r));return e}function aD(t,{include:e=new Set}={}){let r=[],o=new Map(qe.mapAndFilter([...t.releases],([n,u])=>u==="decline"?qe.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(qe.mapAndFilter([...t.releases],([n,u])=>u!=="decline"?qe.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||o.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let u of _t.hardDependencies)for(let A of n.manifest.getForScope(u).values()){let p=t.project.tryWorkspaceByDescriptor(A);p!==null&&o.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function b5(t,e){let r=SA.default.clean(e);for(let o of Object.values(hI))if(o!=="undecided"&&o!=="decline"&&SA.default.inc(t,o)===r)return o;return null}function MF(t,e){if(SA.default.valid(e))return e;if(t===null)throw new it(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!SA.default.valid(t))throw new it(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=SA.default.inc(t,e);if(r===null)throw new it(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function k5(t,e,{report:r}){let o=new Map;for(let a of t.workspaces)for(let n of _t.allDependencies)for(let u of a.manifest[n].values()){let A=t.tryWorkspaceByDescriptor(u);if(A===null||!e.has(A))continue;qe.getArrayWithDefault(o,A).push([a,n,u.identHash])}for(let[a,n]of e){let u=a.manifest.version;a.manifest.version=n,SA.default.prerelease(n)===null?delete a.manifest.raw.stableVersion:a.manifest.raw.stableVersion||(a.manifest.raw.stableVersion=u);let A=a.manifest.name!==null?G.stringifyIdent(a.manifest.name):null;r.reportInfo(0,`${G.prettyLocator(t.configuration,a.anchoredLocator)}: Bumped to ${n}`),r.reportJson({cwd:Ae.fromPortablePath(a.cwd),ident:A,oldVersion:u,newVersion:n});let p=o.get(a);if(!(typeof p>"u"))for(let[h,E,w]of p){let D=h.manifest[E].get(w);if(typeof D>"u")throw new Error("Assertion failed: The dependency should have existed");let b=D.range,C=!1;if(b.startsWith(ci.protocol)&&(b=b.slice(ci.protocol.length),C=!0,b===a.relativeCwd))continue;let T=b.match(xDt);if(!T){r.reportWarning(0,`Couldn't auto-upgrade range ${b} (in ${G.prettyLocator(t.configuration,h.anchoredLocator)})`);continue}let N=`${T[1]}${n}`;C&&(N=`${ci.protocol}${N}`);let U=G.makeDescriptor(D,N);h.manifest[E].set(w,U)}}}var kDt=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function Pve(t,{current:e,prerelease:r}){let o=new SA.default.SemVer(e),a=o.prerelease.slice(),n=[];o.prerelease=[],o.format()!==t&&(a.length=0);let u=!0,A=r.split(/\./g);for(let p of A){let h=kDt.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():u=!1;else{let E=u?h.extract(a):null;E!==null&&typeof E[0]=="number"?(n.push(h.generate(E[0])),a=E[1]):(n.push(h.generate()),u=!1)}}return o.prerelease&&(o.prerelease=[]),`${t}-${n.join(".")}`}var mI=class extends ut{constructor(){super(...arguments);this.all=de.Boolean("--all",!1,{description:"Apply the deferred version changes on all workspaces"});this.dryRun=de.Boolean("--dry-run",!1,{description:"Print the versions without actually generating the package archive"});this.prerelease=de.String("--prerelease",{description:"Add a prerelease identifier to new versions",tolerateBoolean:!0});this.recursive=de.Boolean("-R,--recursive",{description:"Release the transitive workspaces as well"});this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}static{this.paths=[["version","apply"]]}static{this.usage=ot.Usage({category:"Release-related commands",description:"apply all the deferred version bumps at once",details:` + This command will apply the deferred version changes and remove their definitions from the repository. + + Note that if \`--prerelease\` is set, the given prerelease identifier (by default \`rc.%n\`) will be used on all new versions and the version definitions will be kept as-is. + + By default only the current workspace will be bumped, but you can configure this behavior by using one of: + + - \`--recursive\` to also apply the version bump on its dependencies + - \`--all\` to apply the version bump on all packages in the repository + + Note that this command will also update the \`workspace:\` references across all your local workspaces, thus ensuring that they keep referring to the same workspaces even after the version bump. + `,examples:[["Apply the version change to the local workspace","yarn version apply"],["Apply the version change to all the workspaces in the local workspace","yarn version apply --all"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n=await Wr.find(r);if(!a)throw new or(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=await Lt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await oD(o,{prerelease:p}),E=new Map;if(this.all)E=h;else{let w=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let D of w){let b=h.get(D);typeof b<"u"&&E.set(D,b)}}if(E.size===0){let w=h.size>0?" Did you want to add --all?":"";A.reportWarning(0,`The current workspace doesn't seem to require a version bump.${w}`);return}k5(o,E,{report:A}),this.dryRun||(p||(this.all?await P5(o):await x5(o,[...E.keys()])),A.reportSeparator())});return this.dryRun||u.hasErrors()?u.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};Ve();St();Gt();var UF=et(ni());var yI=class extends ut{constructor(){super(...arguments);this.interactive=de.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}static{this.paths=[["version","check"]]}static{this.usage=ot.Usage({category:"Release-related commands",description:"check that all the relevant packages have been bumped",details:"\n **Warning:** This command currently requires Git.\n\n This command will check that all the packages covered by the files listed in argument have been properly bumped or declined to bump.\n\n In the case of a bump, the check will also cover transitive packages - meaning that should `Foo` be bumped, a package `Bar` depending on `Foo` will require a decision as to whether `Bar` will need to be bumped. This check doesn't cross packages that have declined to bump.\n\n In case no arguments are passed to the function, the list of modified files will be generated by comparing the HEAD against `master`.\n ",examples:[["Check whether the modified packages need a bump","yarn version check"]]})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){AC(this.context);let{Gem:r}=await Promise.resolve().then(()=>(UQ(),oj)),{ScrollableItems:o}=await Promise.resolve().then(()=>(jQ(),qQ)),{FocusRequest:a}=await Promise.resolve().then(()=>(lj(),Qwe)),{useListInput:n}=await Promise.resolve().then(()=>(HQ(),Fwe)),{renderForm:u}=await Promise.resolve().then(()=>(VQ(),YQ)),{Box:A,Text:p}=await Promise.resolve().then(()=>et(ac())),{default:h,useCallback:E,useState:w}=await Promise.resolve().then(()=>et(ln())),D=await ze.find(this.context.cwd,this.context.plugins),{project:b,workspace:C}=await Qt.find(D,this.context.cwd);if(!C)throw new or(b.cwd,this.context.cwd);await b.restoreInstallState();let T=await gI(b);if(T===null||T.releaseRoots.size===0)return 0;if(T.root===null)throw new it("This command can only be run on Git repositories");let N=()=>h.createElement(A,{flexDirection:"row",paddingBottom:1},h.createElement(A,{flexDirection:"column",width:60},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:Ie,active:he,decision:De,setDecision:Ee})=>{let g=Ie.manifest.raw.stableVersion??Ie.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${G.prettyLocator(D,Ie.anchoredLocator)})`);if(UF.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let me=["undecided","decline","patch","minor","major"];n(De,me,{active:he,minus:"left",plus:"right",set:Ee});let Ce=De==="undecided"?h.createElement(p,{color:"yellow"},g):De==="decline"?h.createElement(p,{color:"green"},g):h.createElement(p,null,h.createElement(p,{color:"magenta"},g)," \u2192 ",h.createElement(p,{color:"green"},UF.default.valid(De)?De:UF.default.inc(g,De)));return h.createElement(A,{flexDirection:"column"},h.createElement(A,null,h.createElement(p,null,G.prettyLocator(D,Ie.anchoredLocator)," - ",Ce)),h.createElement(A,null,me.map(fe=>h.createElement(A,{key:fe,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:fe===De})," ",fe)))))},J=Ie=>{let he=new Set(T.releaseRoots),De=new Map([...Ie].filter(([Ee])=>he.has(Ee)));for(;;){let Ee=aD({project:T.project,releases:De}),g=!1;if(Ee.length>0){for(let[me]of Ee)if(!he.has(me)){he.add(me),g=!0;let Ce=Ie.get(me);typeof Ce<"u"&&De.set(me,Ce)}}if(!g)break}return{relevantWorkspaces:he,relevantReleases:De}},te=()=>{let[Ie,he]=w(()=>new Map(T.releases)),De=E((Ee,g)=>{let me=new Map(Ie);g!=="undecided"?me.set(Ee,g):me.delete(Ee);let{relevantReleases:Ce}=J(me);he(Ce)},[Ie,he]);return[Ie,De]},le=({workspaces:Ie,releases:he})=>{let De=[];De.push(`${Ie.size} total`);let Ee=0,g=0;for(let me of Ie){let Ce=he.get(me);typeof Ce>"u"?g+=1:Ce!=="decline"&&(Ee+=1)}return De.push(`${Ee} release${Ee===1?"":"s"}`),De.push(`${g} remaining`),h.createElement(p,{color:"yellow"},De.join(", "))},ue=await u(({useSubmit:Ie})=>{let[he,De]=te();Ie(he);let{relevantWorkspaces:Ee}=J(he),g=new Set([...Ee].filter(ie=>!T.releaseRoots.has(ie))),[me,Ce]=w(0),fe=E(ie=>{switch(ie){case a.BEFORE:Ce(me-1);break;case a.AFTER:Ce(me+1);break}},[me,Ce]);return h.createElement(A,{flexDirection:"column"},h.createElement(N,null),h.createElement(A,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(A,{flexDirection:"column",marginTop:1,paddingLeft:2},[...T.changedFiles].map(ie=>h.createElement(A,{key:ie},h.createElement(p,null,h.createElement(p,{color:"grey"},Ae.fromPortablePath(T.root)),Ae.sep,Ae.relative(Ae.fromPortablePath(T.root),Ae.fromPortablePath(ie)))))),T.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),g.size>3?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:T.releaseRoots,releases:he})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:me%2===0,radius:1,size:2,onFocusRequest:fe},[...T.releaseRoots].map(ie=>h.createElement(U,{key:ie.cwd,workspace:ie,decision:he.get(ie)||"undecided",setDecision:Z=>De(ie,Z)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),h.createElement(A,null,h.createElement(p,null,"(Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),g.size>5?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:g,releases:he})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:me%2===1,radius:2,size:2,onFocusRequest:fe},[...g].map(ie=>h.createElement(U,{key:ie.cwd,workspace:ie,decision:he.get(ie)||"undecided",setDecision:Z=>De(ie,Z)}))))):null)},{versionFile:T},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof ue>"u")return 1;T.releases.clear();for(let[Ie,he]of ue)T.releases.set(Ie,he);await T.saveAll()}async executeStandard(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd);if(!a)throw new or(o.cwd,this.context.cwd);return await o.restoreInstallState(),(await Lt.start({configuration:r,stdout:this.context.stdout},async u=>{let A=await gI(o);if(A===null||A.releaseRoots.size===0)return;if(A.root===null)throw new it("This command can only be run on Git repositories");if(u.reportInfo(0,`Your PR was started right after ${pe.pretty(r,A.baseHash.slice(0,7),"yellow")} ${pe.pretty(r,A.baseTitle,"magenta")}`),A.changedFiles.size>0){u.reportInfo(0,"You have changed the following files since then:"),u.reportSeparator();for(let D of A.changedFiles)u.reportInfo(null,`${pe.pretty(r,Ae.fromPortablePath(A.root),"gray")}${Ae.sep}${Ae.relative(Ae.fromPortablePath(A.root),Ae.fromPortablePath(D))}`)}let p=!1,h=!1,E=OF(A);if(E.size>0){p||u.reportSeparator();for(let D of E)u.reportError(0,`${G.prettyLocator(r,D.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let w=aD(A);for(let[D,b]of w)h||u.reportSeparator(),u.reportError(0,`${G.prettyLocator(r,D.anchoredLocator)} doesn't have a release strategy attached, but depends on ${G.prettyWorkspace(r,b)} which is planned for release.`),h=!0;(p||h)&&(u.reportSeparator(),u.reportInfo(0,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),u.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};Ve();Gt();var _F=et(ni());var EI=class extends ut{constructor(){super(...arguments);this.deferred=de.Boolean("-d,--deferred",{description:"Prepare the version to be bumped during the next release cycle"});this.immediate=de.Boolean("-i,--immediate",{description:"Bump the version immediately"});this.strategy=de.String()}static{this.paths=[["version"]]}static{this.usage=ot.Usage({category:"Release-related commands",description:"apply a new version to the current package",details:"\n This command will bump the version number for the given package, following the specified strategy:\n\n - If `major`, the first number from the semver range will be increased (`X.0.0`).\n - If `minor`, the second number from the semver range will be increased (`0.X.0`).\n - If `patch`, the third number from the semver range will be increased (`0.0.X`).\n - If prefixed by `pre` (`premajor`, ...), a `-0` suffix will be set (`0.0.0-0`).\n - If `prerelease`, the suffix will be increased (`0.0.0-X`); the third number from the semver range will also be increased if there was no suffix in the previous version.\n - If `decline`, the nonce will be increased for `yarn version check` to pass without version bump.\n - If a valid semver range, it will be used as new version.\n - If unspecified, Yarn will ask you for guidance.\n\n For more information about the `--deferred` flag, consult our documentation (https://yarnpkg.com/features/release-workflow#deferred-versioning).\n ",examples:[["Immediately bump the version to the next major","yarn version major"],["Prepare the version to be bumped to the next major","yarn version major --deferred"]]})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd);if(!a)throw new or(o.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let u=_F.default.valid(this.strategy),A=this.strategy==="decline",p;if(u)if(a.manifest.version!==null){let E=b5(a.manifest.version,this.strategy);E!==null?p=E:p=this.strategy}else p=this.strategy;else{let E=a.manifest.version;if(!A){if(E===null)throw new it("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof E!="string"||!_F.default.valid(E))throw new it(`Can't bump the version (${E}) if it's not valid semver`)}p=pI(this.strategy)}if(!n){let w=(await oD(o)).get(a);if(typeof w<"u"&&p!=="decline"){let D=MF(a.manifest.version,p);if(_F.default.lt(D,w))throw new it(`Can't bump the version to one that would be lower than the current deferred one (${w})`)}}let h=await gI(o,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};var QDt={configuration:{deferredVersionFolder:{description:"Folder where are stored the versioning files",type:"ABSOLUTE_PATH",default:"./.yarn/versions"},preferDeferredVersions:{description:"If true, running `yarn version` will assume the `--deferred` flag unless `--immediate` is set",type:"BOOLEAN",default:!1}},commands:[mI,yI,EI]},FDt=QDt;var F5={};Vt(F5,{WorkspacesFocusCommand:()=>CI,WorkspacesForeachCommand:()=>wI,default:()=>LDt});Ve();Ve();Gt();var CI=class extends ut{constructor(){super(...arguments);this.json=de.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=de.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=de.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=de.Rest()}static{this.paths=[["workspaces","focus"]]}static{this.usage=ot.Usage({category:"Workspace-related commands",description:"install a single workspace and its dependencies",details:"\n This command will run an install as if the specified workspaces (and all other workspaces they depend on) were the only ones in the project. If no workspaces are explicitly listed, the active one will be assumed.\n\n Note that this command is only very moderately useful when using zero-installs, since the cache will contain all the packages anyway - meaning that the only difference between a full install and a focused install would just be a few extra lines in the `.pnp.cjs` file, at the cost of introducing an extra complexity.\n\n If the `-A,--all` flag is set, the entire project will be installed. Combine with `--production` to replicate the old `yarn install --production`.\n "})}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd),n=await Wr.find(r);await o.restoreInstallState({restoreResolutions:!1});let u;if(this.all)u=new Set(o.workspaces);else if(this.workspaces.length===0){if(!a)throw new or(o.cwd,this.context.cwd);u=new Set([a])}else u=new Set(this.workspaces.map(A=>o.getWorkspaceByIdent(G.parseIdent(A))));for(let A of u)for(let p of this.production?["dependencies"]:_t.hardDependencies)for(let h of A.manifest.getForScope(p).values()){let E=o.tryWorkspaceByDescriptor(h);E!==null&&u.add(E)}for(let A of o.workspaces)u.has(A)?this.production&&A.manifest.devDependencies.clear():(A.manifest.installConfig=A.manifest.installConfig||{},A.manifest.installConfig.selfReferences=!1,A.manifest.dependencies.clear(),A.manifest.devDependencies.clear(),A.manifest.peerDependencies.clear(),A.manifest.scripts.clear());return await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};Ve();Ve();Ve();Gt();var II=et(Xo()),bve=et(lg());il();var wI=class extends ut{constructor(){super(...arguments);this.from=de.Array("--from",{description:"An array of glob pattern idents or paths from which to base any recursion"});this.all=de.Boolean("-A,--all",{description:"Run the command on all workspaces of a project"});this.recursive=de.Boolean("-R,--recursive",{description:"Run the command on the current workspace and all of its recursive dependencies"});this.worktree=de.Boolean("-W,--worktree",{description:"Run the command on all workspaces of the current worktree"});this.verbose=de.Counter("-v,--verbose",{description:"Increase level of logging verbosity up to 2 times"});this.parallel=de.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=de.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=de.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to; or `unlimited`",validator:pL([js(["unlimited"]),vw(fL(),[gL(),hL(1)])])});this.topological=de.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=de.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=de.Array("--include",[],{description:"An array of glob pattern idents or paths; only matching workspaces will be traversed"});this.exclude=de.Array("--exclude",[],{description:"An array of glob pattern idents or paths; matching workspaces won't be traversed"});this.publicOnly=de.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.since=de.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.dryRun=de.Boolean("-n,--dry-run",{description:"Print the commands that would be run, without actually running them"});this.commandName=de.String();this.args=de.Proxy()}static{this.paths=[["workspaces","foreach"]]}static{this.usage=ot.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project.\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 `-W,--worktree` is set, Yarn will find workspaces to run the command on by looking at the current worktree.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on 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 `--dry-run` is set, Yarn will explain what it would do without actually doing anything.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (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 The `-v,--verbose` flag can be passed up to twice: once to prefix output lines with the originating workspace's name, and again to include start/finish/timing log lines. Maximum verbosity is enabled by default in terminal environments.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish all packages","yarn workspaces foreach -A npm publish --tolerate-republish"],["Run the build script on all descendant packages","yarn workspaces foreach -A run build"],["Run the build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -Apt run build"],["Run the build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -Rpt --from '{workspace-a,workspace-b}' run build"]]})}static{this.schema=[Sw("all",Vu.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),dL(["all","recursive","since","worktree"],{missingIf:"undefined"})]}async execute(){let r=await ze.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await Qt.find(r,this.context.cwd);if(!this.all&&!a)throw new or(o.cwd,this.context.cwd);await o.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),u=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new it("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let A=Ee=>{this.dryRun&&this.context.stdout.write(`${Ee} +`)},p=()=>{let Ee=this.from.map(g=>II.default.matcher(g));return o.workspaces.filter(g=>{let me=G.stringifyIdent(g.anchoredLocator),Ce=g.relativeCwd;return Ee.some(fe=>fe(me)||fe(Ce))})},h=[];if(this.since?(A("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await ra.fetchChangedWorkspaces({ref:this.since,project:o}))):this.from?(A("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(A("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(A("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(A("Option --all is set; selecting all workspaces"),h=[...o.workspaces]),this.dryRun&&!this.all){for(let Ee of h)A(` +- ${Ee.relativeCwd} + ${G.prettyLocator(r,Ee.anchoredLocator)}`);h.length>0&&A("")}let E;if(this.recursive?this.since?(A("Option --recursive --since is set; recursively selecting all dependent workspaces"),E=new Set(h.map(Ee=>[...Ee.getRecursiveWorkspaceDependents()]).flat())):(A("Option --recursive is set; recursively selecting all transitive dependencies"),E=new Set(h.map(Ee=>[...Ee.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(A("Option --worktree is set; recursively selecting all nested workspaces"),E=new Set(h.map(Ee=>[...Ee.getRecursiveWorkspaceChildren()]).flat())):E=null,E!==null&&(h=[...new Set([...h,...E])],this.dryRun))for(let Ee of E)A(` +- ${Ee.relativeCwd} + ${G.prettyLocator(r,Ee.anchoredLocator)}`);let w=[],D=!1;if(u?.includes(":")){for(let Ee of o.workspaces)if(Ee.manifest.scripts.has(u)&&(D=!D,D===!1))break}for(let Ee of h){if(u&&!Ee.manifest.scripts.has(u)&&!D&&!(await hn.getWorkspaceAccessibleBinaries(Ee)).has(u)){A(`Excluding ${Ee.relativeCwd} because it doesn't have a "${u}" script`);continue}if(!(u===r.env.npm_lifecycle_event&&Ee.cwd===a.cwd)){if(this.include.length>0&&!II.default.isMatch(G.stringifyIdent(Ee.anchoredLocator),this.include)&&!II.default.isMatch(Ee.relativeCwd,this.include)){A(`Excluding ${Ee.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(II.default.isMatch(G.stringifyIdent(Ee.anchoredLocator),this.exclude)||II.default.isMatch(Ee.relativeCwd,this.exclude))){A(`Excluding ${Ee.relativeCwd} because it matches the --exclude filter`);continue}if(this.publicOnly&&Ee.manifest.private===!0){A(`Excluding ${Ee.relativeCwd} because it's a private workspace and --no-private was set`);continue}w.push(Ee)}}if(this.dryRun)return 0;let b=this.verbose??(this.context.stdout.isTTY?1/0:0),C=b>0,T=b>1,N=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(Xi.availableParallelism()/2):1,U=N===1?!1:this.parallel,J=U?this.interlaced:!0,te=(0,bve.default)(N),le=new Map,ce=new Set,ue=0,Ie=null,he=!1,De=await Lt.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async Ee=>{let g=async(me,{commandIndex:Ce})=>{if(he)return-1;!U&&T&&Ce>1&&Ee.reportSeparator();let fe=RDt(me,{configuration:r,label:C,commandIndex:Ce}),[ie,Z]=xve(Ee,{prefix:fe,interlaced:J}),[Se,Re]=xve(Ee,{prefix:fe,interlaced:J});try{T&&Ee.reportInfo(null,`${fe?`${fe} `:""}Process started`);let ht=Date.now(),q=await this.cli.run([this.commandName,...this.args],{cwd:me.cwd,stdout:ie,stderr:Se})||0;ie.end(),Se.end(),await Z,await Re;let nt=Date.now();if(T){let Le=r.get("enableTimers")?`, completed in ${pe.pretty(r,nt-ht,pe.Type.DURATION)}`:"";Ee.reportInfo(null,`${fe?`${fe} `:""}Process exited (exit code ${q})${Le}`)}return q===130&&(he=!0,Ie=q),q}catch(ht){throw ie.end(),Se.end(),await Z,await Re,ht}};for(let me of w)le.set(me.anchoredLocator.locatorHash,me);for(;le.size>0&&!Ee.hasErrors();){let me=[];for(let[Z,Se]of le){if(ce.has(Se.anchoredDescriptor.descriptorHash))continue;let Re=!0;if(this.topological||this.topologicalDev){let ht=this.topologicalDev?new Map([...Se.manifest.dependencies,...Se.manifest.devDependencies]):Se.manifest.dependencies;for(let q of ht.values()){let nt=o.tryWorkspaceByDescriptor(q);if(Re=nt===null||!le.has(nt.anchoredLocator.locatorHash),!Re)break}}if(Re&&(ce.add(Se.anchoredDescriptor.descriptorHash),me.push(te(async()=>{let ht=await g(Se,{commandIndex:++ue});return le.delete(Z),ce.delete(Se.anchoredDescriptor.descriptorHash),{workspace:Se,exitCode:ht}})),!U))break}if(me.length===0){let Z=Array.from(le.values()).map(Se=>G.prettyLocator(r,Se.anchoredLocator)).join(", ");Ee.reportError(3,`Dependency cycle detected (${Z})`);return}let Ce=await Promise.all(me);Ce.forEach(({workspace:Z,exitCode:Se})=>{Se!==0&&Ee.reportError(0,`The command failed in workspace ${G.prettyLocator(r,Z.anchoredLocator)} with exit code ${Se}`)});let ie=Ce.map(Z=>Z.exitCode).find(Z=>Z!==0);(this.topological||this.topologicalDev)&&typeof ie<"u"&&Ee.reportError(0,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return Ie!==null?Ie:De.exitCode()}};function xve(t,{prefix:e,interlaced:r}){let o=t.createStreamReporter(e),a=new qe.DefaultStream;a.pipe(o,{end:!1}),a.on("finish",()=>{o.end()});let n=new Promise(A=>{o.on("finish",()=>{A(a.active)})});if(r)return[a,n];let u=new qe.BufferStream;return u.pipe(a,{end:!1}),u.on("finish",()=>{a.end()}),[u,n]}function RDt(t,{configuration:e,commandIndex:r,label:o}){if(!o)return null;let n=`[${G.stringifyIdent(t.anchoredLocator)}]:`,u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[r%u.length];return pe.pretty(e,n,A)}var TDt={commands:[CI,wI]},LDt=TDt;var lE=()=>({modules:new Map([["@yarnpkg/cli",P2],["@yarnpkg/core",S2],["@yarnpkg/fslib",Aw],["@yarnpkg/libzip",K1],["@yarnpkg/parsers",Ew],["@yarnpkg/shell",e2],["clipanion",Qw],["semver",NDt],["typanion",Yo],["@yarnpkg/plugin-essentials",MH],["@yarnpkg/plugin-compat",jH],["@yarnpkg/plugin-constraints",a6],["@yarnpkg/plugin-dlx",l6],["@yarnpkg/plugin-exec",A6],["@yarnpkg/plugin-file",p6],["@yarnpkg/plugin-git",OH],["@yarnpkg/plugin-github",d6],["@yarnpkg/plugin-http",m6],["@yarnpkg/plugin-init",y6],["@yarnpkg/plugin-interactive-tools",mj],["@yarnpkg/plugin-link",yj],["@yarnpkg/plugin-nm",tG],["@yarnpkg/plugin-npm",$G],["@yarnpkg/plugin-npm-cli",l5],["@yarnpkg/plugin-pack",KG],["@yarnpkg/plugin-patch",g5],["@yarnpkg/plugin-pnp",jj],["@yarnpkg/plugin-pnpm",y5],["@yarnpkg/plugin-stage",D5],["@yarnpkg/plugin-typescript",S5],["@yarnpkg/plugin-version",Q5],["@yarnpkg/plugin-workspace-tools",F5]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@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","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"])});function Fve({cwd:t,pluginConfiguration:e}){let r=new Ko({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:nn??""});return Object.assign(r,{defaultContext:{...Ko.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function ODt(t){if(qe.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,o=">=18.12.0";if(Ur.satisfiesWithPrereleases(r,o))return!0;let a=new it(`This tool requires a Node version compatible with ${o} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return Ko.defaultContext.stdout.write(t.error(a)),!1}async function Rve({selfPath:t,pluginConfiguration:e}){return await ze.find(Ae.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function MDt(t,e,{yarnPath:r}){if(!ae.existsSync(r))return t.error(new Error(`The "yarn-path" option has been set, but the specified location doesn't exist (${r}).`)),1;process.on("SIGINT",()=>{});let o={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,kve.execFileSync)(process.execPath,[Ae.fromPortablePath(r),...e],o)}catch(a){return a.status??1}return 0}function UDt(t,e){let r=null,o=e;return e.length>=2&&e[0]==="--cwd"?(r=Ae.toPortablePath(e[1]),o=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=Ae.toPortablePath(e[0].slice(6)),o=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=Ae.toPortablePath(e[e.length-1]),o=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?V.resolve(r):V.cwd(),o}function _Dt(t,{configuration:e}){if(!e.get("enableTelemetry")||Qve.isCI||!process.stdout.isTTY)return;ze.telemetry=new sE(e,"puba9cdc10ec5790a2cf4969dd413a47270");let o=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())oE.has(a.match(o)?.[1]??"")&&ze.telemetry?.reportPluginName(a);t.binaryVersion&&ze.telemetry.reportVersion(t.binaryVersion)}function Tve(t,{configuration:e}){for(let r of e.plugins.values())for(let o of r.commands||[])t.register(o)}async function HDt(t,e,{selfPath:r,pluginConfiguration:o}){if(!ODt(t))return 1;let a=await Rve({selfPath:r,pluginConfiguration:o}),n=a.get("yarnPath"),u=a.get("ignorePath");if(n&&!u)return MDt(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let A=UDt(t,e);_Dt(t,{configuration:a}),Tve(t,{configuration:a});let p=t.process(A,t.defaultContext);return p.help||ze.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function qhe({cwd:t=V.cwd(),pluginConfiguration:e=lE()}={}){let r=Fve({cwd:t,pluginConfiguration:e}),o=await Rve({pluginConfiguration:e,selfPath:null});return Tve(r,{configuration:o}),r}async function Nk(t,{cwd:e=V.cwd(),selfPath:r,pluginConfiguration:o}){let a=Fve({cwd:e,pluginConfiguration:o});function n(){Ko.defaultContext.stdout.write(`ERROR: Yarn is terminating due to an unexpected empty event loop. +Please report this issue at https://github.com/yarnpkg/berry/issues.`)}process.once("beforeExit",n);try{process.exitCode=42,process.exitCode=await HDt(a,t,{selfPath:r,pluginConfiguration:o})}catch(u){Ko.defaultContext.stdout.write(a.error(u)),process.exitCode=1}finally{process.off("beforeExit",n),await ae.rmtempPromise()}}Nk(process.argv.slice(2),{cwd:V.cwd(),selfPath:Ae.toPortablePath(Ae.resolve(process.argv[1])),pluginConfiguration:lE()});})(); +/** + @license + Copyright (c) 2015, Rebecca Turner + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + */ +/** + @license + Copyright Node.js contributors. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. +*/ +/** + @license + The MIT License (MIT) + + Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +/** + @license + Copyright Joyent, Inc. and other Node contributors. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to permit + persons to whom the Software is furnished to do so, subject to the + following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/*! Bundled license information: + +is-number/index.js: + (*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + *) + +to-regex-range/index.js: + (*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + *) + +fill-range/index.js: + (*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + *) + +is-extglob/index.js: + (*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + *) + +is-glob/index.js: + (*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + *) + +queue-microtask/index.js: + (*! queue-microtask. MIT License. Feross Aboukhadijeh *) + +run-parallel/index.js: + (*! run-parallel. MIT License. Feross Aboukhadijeh *) + +git-url-parse/lib/index.js: + (*! + * buildToken + * Builds OAuth token prefix (helper function) + * + * @name buildToken + * @function + * @param {GitUrl} obj The parsed Git url object. + * @return {String} token prefix + *) + +object-assign/index.js: + (* + object-assign + (c) Sindre Sorhus + @license MIT + *) + +react/cjs/react.production.min.js: + (** @license React v17.0.2 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +scheduler/cjs/scheduler.production.min.js: + (** @license React v0.20.2 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +react-reconciler/cjs/react-reconciler.production.min.js: + (** @license React v0.26.2 + * react-reconciler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) + +is-windows/index.js: + (*! + * is-windows + * + * Copyright © 2015-2018, Jon Schlinkert. + * Released under the MIT License. + *) +*/ diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 000000000..add4a76ab --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1,7 @@ +compressionLevel: mixed + +enableGlobalCache: false + +nodeLinker: node-modules + +yarnPath: .yarn/releases/yarn-4.7.0.cjs diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e58efc6b..79c3f0639 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,217 +1,1136 @@ -## [v4.13.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.13.0...4.13.1) +## [5.23.3](https://github.com/algolia/algoliasearch-client-javascript/compare/5.23.2...5.23.3) -* fix(search): add type for queryLanguages (#1406) ([61c2976](https://github.com/algolia/algoliasearch-client-javascript/commit/61c2976)), closes [#1406](https://github.com/algolia/algoliasearch-client-javascript/issues/1406) [#1405](https://github.com/algolia/algoliasearch-client-javascript/issues/1405) +- [dbaef6696](https://github.com/algolia/api-clients-automation/commit/dbaef6696) fix(specs): userData is any type ([#4702](https://github.com/algolia/api-clients-automation/pull/4702)) by [@millotp](https://github.com/millotp/) +- [a922dca5a](https://github.com/algolia/api-clients-automation/commit/a922dca5a) docs(partialUpdate): add note about multiple operations ([#4721](https://github.com/algolia/api-clients-automation/pull/4721)) by [@Jerska](https://github.com/Jerska/) +- [931095383](https://github.com/algolia/api-clients-automation/commit/931095383) chore(deps): dependencies 2025-04-07 ([#4703](https://github.com/algolia/api-clients-automation/pull/4703)) by [@algolia-bot](https://github.com/algolia-bot/) +- [e150cd934](https://github.com/algolia/api-clients-automation/commit/e150cd934) fix(specs): message is not required in WatchResponse ([#4723](https://github.com/algolia/api-clients-automation/pull/4723)) by [@millotp](https://github.com/millotp/) -## [v4.13.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.12.2...4.13.0) +## [5.23.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.23.1...5.23.2) -- feat(recommend): Add trending types and methods (#1396) ([6882ec8](https://github.com/algolia/algoliasearch-client-javascript/commit/6882ec8)), closes [#1396](https://github.com/algolia/algoliasearch-client-javascript/issues/1396) +- [ac400354a9](https://github.com/algolia/api-clients-automation/commit/ac400354a9) fix(specs): make the updateAt non-null in ingestion ([#4697](https://github.com/algolia/api-clients-automation/pull/4697)) by [@millotp](https://github.com/millotp/) -## [v4.12.2](https://github.com/algolia/algoliasearch-client-javascript/compare/4.12.1...4.12.2) +## [5.23.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.23.0...5.23.1) -- fix(types): allow mixed arrays in numeric and tag filters (#1395) ([326c833](https://github.com/algolia/algoliasearch-client-javascript/commit/326c833)), closes [#1395](https://github.com/algolia/algoliasearch-client-javascript/issues/1395) -- fix(types): updating reRankingApplyFilter type and adding new property to RankingInfo (#1394) ([e8f08ed](https://github.com/algolia/algoliasearch-client-javascript/commit/e8f08ed)), closes [#1394](https://github.com/algolia/algoliasearch-client-javascript/issues/1394) +- [8b5413f002](https://github.com/algolia/api-clients-automation/commit/8b5413f002) chore(deps): dependencies 2025-03-31 ([#4661](https://github.com/algolia/api-clients-automation/pull/4661)) by [@algolia-bot](https://github.com/algolia-bot/) +- [a51683025e](https://github.com/algolia/api-clients-automation/commit/a51683025e) chore: deprecate mcm methods ([#4694](https://github.com/algolia/api-clients-automation/pull/4694)) by [@kai687](https://github.com/kai687/) -## [v4.12.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.12.0...4.12.1) +## [5.23.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.22.0...5.23.0) -- fix(types): allow mix of strings and arrays in facetFilters (#1384) ([dfc2a09](https://github.com/algolia/algoliasearch-client-javascript/commit/dfc2a09)), closes [#1384](https://github.com/algolia/algoliasearch-client-javascript/issues/1384) +- [3994f53d4](https://github.com/algolia/api-clients-automation/commit/3994f53d4) feat(clients): add new realtime-personalization api ([#4613](https://github.com/algolia/api-clients-automation/pull/4613)) by [@benamib](https://github.com/benamib/) +- [6d8c0548d](https://github.com/algolia/api-clients-automation/commit/6d8c0548d) chore: do not generate realtime personalization ([#4655](https://github.com/algolia/api-clients-automation/pull/4655)) by [@shortcuts](https://github.com/shortcuts/) +- [c3addb449](https://github.com/algolia/api-clients-automation/commit/c3addb449) feat(specs): add CT Query predicate property ([#4654](https://github.com/algolia/api-clients-automation/pull/4654)) by [@morganleroi](https://github.com/morganleroi/) -## [v4.12.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.11.0...4.12.0) +## [5.22.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.21.0...5.22.0) -- feat(types): add reranking engine settings to types (#1378) ([e9c0f30](https://github.com/algolia/algoliasearch-client-javascript/commit/e9c0f30)), closes [#1378](https://github.com/algolia/algoliasearch-client-javascript/issues/1378) -- chore: clean up unused package and auto exports (#1315) ([dfa7254](https://github.com/algolia/algoliasearch-client-javascript/commit/dfa7254)), closes [#1315](https://github.com/algolia/algoliasearch-client-javascript/issues/1315) -- chore: Configure Renovate (#1304) ([f75924d](https://github.com/algolia/algoliasearch-client-javascript/commit/f75924d)), closes [#1304](https://github.com/algolia/algoliasearch-client-javascript/issues/1304) -- chore: disable renovate until the test suite is less flaky (#1370) ([8c8db3d](https://github.com/algolia/algoliasearch-client-javascript/commit/8c8db3d)), closes [#1370](https://github.com/algolia/algoliasearch-client-javascript/issues/1370) +- [03a7074763](https://github.com/algolia/api-clients-automation/commit/03a7074763) chore(deps): dependencies 2025-03-10 ([#4566](https://github.com/algolia/api-clients-automation/pull/4566)) by [@algolia-bot](https://github.com/algolia-bot/) +- [26457d0ec8](https://github.com/algolia/api-clients-automation/commit/26457d0ec8) feat(specs): add the owner attributes to ingestion resources ([#4616](https://github.com/algolia/api-clients-automation/pull/4616)) by [@millotp](https://github.com/millotp/) +- [cdf605e369](https://github.com/algolia/api-clients-automation/commit/cdf605e369) chore(deps): dependencies 2025-03-24 ([#4617](https://github.com/algolia/api-clients-automation/pull/4617)) by [@algolia-bot](https://github.com/algolia-bot/) -## [v4.11.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.10.5...4.11.0) +## [5.21.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.20.4...5.21.0) -- fix(insideBoundingBox): allow strings (#1310) ([87d5b0d](https://github.com/algolia/algoliasearch-client-javascript/commit/87d5b0d)), closes [#1310](https://github.com/algolia/algoliasearch-client-javascript/issues/1310) -- feat: add custom request function (#1312) ([3cea192](https://github.com/algolia/algoliasearch-client-javascript/commit/3cea192)), closes [#1312](https://github.com/algolia/algoliasearch-client-javascript/issues/1312) -- feat(ts): document enableReRanking (#1306) ([00ad924](https://github.com/algolia/algoliasearch-client-javascript/commit/00ad924)), closes [#1306](https://github.com/algolia/algoliasearch-client-javascript/issues/1306) -- docs(recommend): add TSDoc (#1305) ([a5df2fb](https://github.com/algolia/algoliasearch-client-javascript/commit/a5df2fb)), closes [#1305](https://github.com/algolia/algoliasearch-client-javascript/issues/1305) +- [ab623194e](https://github.com/algolia/api-clients-automation/commit/ab623194e) feat(specs): add `subscriptionAction` to ingestion specs ([#4587](https://github.com/algolia/api-clients-automation/pull/4587)) by [@shortcuts](https://github.com/shortcuts/) -## [v4.10.5](https://github.com/algolia/algoliasearch-client-javascript/compare/4.10.4...4.10.5) +## [5.20.4](https://github.com/algolia/algoliasearch-client-javascript/compare/5.20.3...5.20.4) -- fix(recommend): prevent `undefined` threshold (#1300) ([7d21d3c](https://github.com/algolia/algoliasearch-client-javascript/commit/7d21d3c)), closes [#1300](https://github.com/algolia/algoliasearch-client-javascript/issues/1300) +- [92bd911848](https://github.com/algolia/api-clients-automation/commit/92bd911848) chore(scripts): point jira issues to another epic ([#4505](https://github.com/algolia/api-clients-automation/pull/4505)) by [@millotp](https://github.com/millotp/) +- [b8918494d0](https://github.com/algolia/api-clients-automation/commit/b8918494d0) chore(deps): dependencies 2025-03-03 ([#4511](https://github.com/algolia/api-clients-automation/pull/4511)) by [@algolia-bot](https://github.com/algolia-bot/) +- [97d2722bc9](https://github.com/algolia/api-clients-automation/commit/97d2722bc9) fix(specs): Increase optionalWords visibility in docs ([#4559](https://github.com/algolia/api-clients-automation/pull/4559)) by [@gazconroy](https://github.com/gazconroy/) -## [v4.10.4](https://github.com/algolia/algoliasearch-client-javascript/compare/4.10.3...4.10.4) +## [5.20.3](https://github.com/algolia/algoliasearch-client-javascript/compare/5.20.2...5.20.3) -- fix(recommend): expose correct key on window in umd (#1298) ([169b12a](https://github.com/algolia/algoliasearch-client-javascript/commit/169b12a)), closes [#1298](https://github.com/algolia/algoliasearch-client-javascript/issues/1298) +- [ecd6bc4fed](https://github.com/algolia/api-clients-automation/commit/ecd6bc4fed) chore(deps): dependencies 2025-02-17 ([#4459](https://github.com/algolia/api-clients-automation/pull/4459)) by [@algolia-bot](https://github.com/algolia-bot/) -## [v4.10.3](https://github.com/algolia/algoliasearch-client-javascript/compare/4.10.2...4.10.3) +## [5.20.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.20.1...5.20.2) -- fix(answers): omit original hits in response (#1293) ([fb62b15](https://github.com/algolia/algoliasearch-client-javascript/commit/fb62b15)), closes [#1293](https://github.com/algolia/algoliasearch-client-javascript/issues/1293) -- fix(facetOrdering): facetOrdering.facets, not .facet ([d931976](https://github.com/algolia/algoliasearch-client-javascript/commit/d931976)) +- [c0e70d9864](https://github.com/algolia/api-clients-automation/commit/c0e70d9864) chore(deps): dependencies 2025-02-10 ([#4432](https://github.com/algolia/api-clients-automation/pull/4432)) by [@algolia-bot](https://github.com/algolia-bot/) -## [v4.10.2](https://github.com/algolia/algoliasearch-client-javascript/compare/4.10.0...4.10.2) +## [5.20.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.20.0...5.20.1) -- fix(recommend): export method types (#1287) ([95281fe](https://github.com/algolia/algoliasearch-client-javascript/commit/95281fe)), closes [#1287](https://github.com/algolia/algoliasearch-client-javascript/issues/1287) -- chore(release): force public access on npm release (#1288) ([2fefd78](https://github.com/algolia/algoliasearch-client-javascript/commit/2fefd78)), closes [#1288](https://github.com/algolia/algoliasearch-client-javascript/issues/1288) +- [506b8a5636](https://github.com/algolia/api-clients-automation/commit/506b8a5636) fix(specs): responseFields description ([#4399](https://github.com/algolia/api-clients-automation/pull/4399)) by [@kai687](https://github.com/kai687/) +- [09e657fa76](https://github.com/algolia/api-clients-automation/commit/09e657fa76) fix(specs): add a linter to assert that type is present ([#4393](https://github.com/algolia/api-clients-automation/pull/4393)) by [@millotp](https://github.com/millotp/) +- [27ad6df2ab](https://github.com/algolia/api-clients-automation/commit/27ad6df2ab) chore(deps): dependencies 2025-01-27 ([#4395](https://github.com/algolia/api-clients-automation/pull/4395)) by [@algolia-bot](https://github.com/algolia-bot/) -## [v4.10.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.9.3...4.10.0) +## [5.20.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.19.0...5.20.0) -The `@algolia/client-recommendation` is now deprecated, please use `@algolia/client-personalization` instead. If you were using `initRecommendation` from the `algoliasearch` package, please use `initPersonalization` instead. +- [5aa57630d6](https://github.com/algolia/api-clients-automation/commit/5aa57630d6) feat(specs): only use shortname in the source input ([#4287](https://github.com/algolia/api-clients-automation/pull/4287)) by [@millotp](https://github.com/millotp/) +- [1e847f4caf](https://github.com/algolia/api-clients-automation/commit/1e847f4caf) fix(specs): move customRanking and keepDiacriticsOnCharacters to indexSettings ([#4324](https://github.com/algolia/api-clients-automation/pull/4324)) by [@millotp](https://github.com/millotp/) +- [13742383ab](https://github.com/algolia/api-clients-automation/commit/13742383ab) chore(deps): dependencies 2025-01-13 ([#4325](https://github.com/algolia/api-clients-automation/pull/4325)) by [@algolia-bot](https://github.com/algolia-bot/) +- [58cc5449f5](https://github.com/algolia/api-clients-automation/commit/58cc5449f5) fix(specs): optionalFilters additional explanation ([#4353](https://github.com/algolia/api-clients-automation/pull/4353)) by [@kai687](https://github.com/kai687/) +- [3b129e01df](https://github.com/algolia/api-clients-automation/commit/3b129e01df) fix(specs): ingestion expected and received events type ([#4356](https://github.com/algolia/api-clients-automation/pull/4356)) by [@shortcuts](https://github.com/shortcuts/) +- [22167b8e68](https://github.com/algolia/api-clients-automation/commit/22167b8e68) fix(specs): extend Analytics descriptions ([#4360](https://github.com/algolia/api-clients-automation/pull/4360)) by [@gazconroy](https://github.com/gazconroy/) +- [5b14906c1e](https://github.com/algolia/api-clients-automation/commit/5b14906c1e) fix(specs): remove the processing outcome ([#4359](https://github.com/algolia/api-clients-automation/pull/4359)) by [@millotp](https://github.com/millotp/) +- [952639f0fb](https://github.com/algolia/api-clients-automation/commit/952639f0fb) fix(specs): adjust style for banner descriptions ([#4362](https://github.com/algolia/api-clients-automation/pull/4362)) by [@kai687](https://github.com/kai687/) +- [4ae9ccd89f](https://github.com/algolia/api-clients-automation/commit/4ae9ccd89f) chore(deps): dependencies 2025-01-20 ([#4365](https://github.com/algolia/api-clients-automation/pull/4365)) by [@algolia-bot](https://github.com/algolia-bot/) +- [83f188d333](https://github.com/algolia/api-clients-automation/commit/83f188d333) feat(specs): rename composition to composition-full (private) and add composition (public) ([#4357](https://github.com/algolia/api-clients-automation/pull/4357)) by [@e-krebs](https://github.com/e-krebs/) +- [e842e63d4e](https://github.com/algolia/api-clients-automation/commit/e842e63d4e) fix(javascript): use beta version ([#4385](https://github.com/algolia/api-clients-automation/pull/4385)) by [@shortcuts](https://github.com/shortcuts/) -- feat(recommend): introduce Recommend API client (#1280) ([97ebde6](https://github.com/algolia/algoliasearch-client-javascript/commit/97ebde6)), closes [#1280](https://github.com/algolia/algoliasearch-client-javascript/issues/1280) [#1278](https://github.com/algolia/algoliasearch-client-javascript/issues/1278) -- feat(personalization): deprecate client-recommendation (#1278) -- fix(rules): automaticOptionalFacetFilters type takes the same input as automaticFacetFilters (#1279) ([831a3de](https://github.com/algolia/algoliasearch-client-javascript/commit/831a3de)), closes [#1279](https://github.com/algolia/algoliasearch-client-javascript/issues/1279) +## [5.19.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.18.0...5.19.0) -## [v4.9.3](https://github.com/algolia/algoliasearch-client-javascript/compare/4.9.2...4.9.3) +- [f9d890bbc4](https://github.com/algolia/api-clients-automation/commit/f9d890bbc4) chore(deps): dependencies 2024-12-23 ([#4258](https://github.com/algolia/api-clients-automation/pull/4258)) by [@algolia-bot](https://github.com/algolia-bot/) +- [b569646304](https://github.com/algolia/api-clients-automation/commit/b569646304) fix(specs): drop singer from ingestion specs ([#4281](https://github.com/algolia/api-clients-automation/pull/4281)) by [@shortcuts](https://github.com/shortcuts/) +- [e972f9b28c](https://github.com/algolia/api-clients-automation/commit/e972f9b28c) feat(javascript): expose current apiKey on the client instance ([#4285](https://github.com/algolia/api-clients-automation/pull/4285)) by [@Haroenv](https://github.com/Haroenv/) +- [b2b5acddab](https://github.com/algolia/api-clients-automation/commit/b2b5acddab) chore(deps): dependencies 2024-12-30 ([#4286](https://github.com/algolia/api-clients-automation/pull/4286)) by [@algolia-bot](https://github.com/algolia-bot/) +- [37223c9779](https://github.com/algolia/api-clients-automation/commit/37223c9779) feat(clients): cleanup after replaceAllObjects failure ([#3824](https://github.com/algolia/api-clients-automation/pull/3824)) by [@millotp](https://github.com/millotp/) +- [47b567fd0d](https://github.com/algolia/api-clients-automation/commit/47b567fd0d) chore(deps): dependencies 2025-01-06 ([#4299](https://github.com/algolia/api-clients-automation/pull/4299)) by [@algolia-bot](https://github.com/algolia-bot/) +- [784e40ac53](https://github.com/algolia/api-clients-automation/commit/784e40ac53) feat(specs): improve Composition Client searchResponse specs (matches SearchClient more closely for IS) ([#4300](https://github.com/algolia/api-clients-automation/pull/4300)) by [@e-krebs](https://github.com/e-krebs/) +- [5328ce8333](https://github.com/algolia/api-clients-automation/commit/5328ce8333) feat(specs): add notification settings to tasks ([#4297](https://github.com/algolia/api-clients-automation/pull/4297)) by [@millotp](https://github.com/millotp/) +- [e7b3898f06](https://github.com/algolia/api-clients-automation/commit/e7b3898f06) feat(clients): add optionnal scopes to replaceAllObjects ([#4296](https://github.com/algolia/api-clients-automation/pull/4296)) by [@millotp](https://github.com/millotp/) +- [47193ad3d1](https://github.com/algolia/api-clients-automation/commit/47193ad3d1) chore: revert release ([#4314](https://github.com/algolia/api-clients-automation/pull/4314)) by [@shortcuts](https://github.com/shortcuts/) -- fix(ts): make all keys in facetOrdering optional ([d772f98](https://github.com/algolia/algoliasearch-client-javascript/commit/d772f98)) +## [5.18.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.17.1...5.18.0) -## [v4.9.2](https://github.com/algolia/algoliasearch-client-javascript/compare/4.9.1...4.9.2) +- [966fe05ae6](https://github.com/algolia/api-clients-automation/commit/966fe05ae6) chore(deps): dependencies 2024-12-16 ([#4235](https://github.com/algolia/api-clients-automation/pull/4235)) by [@algolia-bot](https://github.com/algolia-bot/) +- [0481473fe0](https://github.com/algolia/api-clients-automation/commit/0481473fe0) chore: trigger auto close pr ([#4250](https://github.com/algolia/api-clients-automation/pull/4250)) by [@shortcuts](https://github.com/shortcuts/) +- [d6f48a40ce](https://github.com/algolia/api-clients-automation/commit/d6f48a40ce) feat(javascript): add `worker` build ([#4249](https://github.com/algolia/api-clients-automation/pull/4249)) by [@shortcuts](https://github.com/shortcuts/) +- [679a8cdb60](https://github.com/algolia/api-clients-automation/commit/679a8cdb60) fix(specs): endpoint level timeout for ingestion ([#4251](https://github.com/algolia/api-clients-automation/pull/4251)) by [@shortcuts](https://github.com/shortcuts/) +- [448aad70ee](https://github.com/algolia/api-clients-automation/commit/448aad70ee) feat(specs): update composition specs according to upcoming API changes ([#4234](https://github.com/algolia/api-clients-automation/pull/4234)) by [@e-krebs](https://github.com/e-krebs/) -- feat(ts): document renderingContent (#1273) ([04f2a20](https://github.com/algolia/algoliasearch-client-javascript/commit/04f2a20)), closes [#1273](https://github.com/algolia/algoliasearch-client-javascript/issues/1273) -- fix(api-keys): fix typing issues (#1270) ([fec87a9](https://github.com/algolia/algoliasearch-client-javascript/commit/fec87a9)), closes [#1270](https://github.com/algolia/algoliasearch-client-javascript/issues/1270) +## [5.17.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.17.0...5.17.1) -## [v4.9.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.9.0...4.9.1) +- [cd59f445e](https://github.com/algolia/api-clients-automation/commit/cd59f445e) fix(specs): enable watcher for push ([#4229](https://github.com/algolia/api-clients-automation/pull/4229)) by [@shortcuts](https://github.com/shortcuts/) +- [baf7d6f4d](https://github.com/algolia/api-clients-automation/commit/baf7d6f4d) fix(specs): add `ignoreConjugations` to `AlternativesAsExact` ([#4230](https://github.com/algolia/api-clients-automation/pull/4230)) by [@shortcuts](https://github.com/shortcuts/) -- fix(types): support `facetQuery` in `MultipleQueriesQuery` (#1267) ([84355a9](https://github.com/algolia/algoliasearch-client-javascript/commit/84355a9)), closes [#1267](https://github.com/algolia/algoliasearch-client-javascript/issues/1267) +## [5.17.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.16.0...5.17.0) -## [v4.9.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.6...4.9.0) +- [866d859f8](https://github.com/algolia/api-clients-automation/commit/866d859f8) fix(specs): different summaries for saveObject/addOrUpdate methods ([#4223](https://github.com/algolia/api-clients-automation/pull/4223)) by [@kai687](https://github.com/kai687/) +- [baf16c689](https://github.com/algolia/api-clients-automation/commit/baf16c689) feat(specs): add `watch` to `pushTask` ingestion ([#4224](https://github.com/algolia/api-clients-automation/pull/4224)) by [@shortcuts](https://github.com/shortcuts/) -- feat(dictionaries): adds methods and tests (#1253) ([aed6554](https://github.com/algolia/algoliasearch-client-javascript/commit/aed6554)), closes [#1253](https://github.com/algolia/algoliasearch-client-javascript/issues/1253) -- feat(types): support `type` and `facet` in search methods (#1263) ([54c1cb7](https://github.com/algolia/algoliasearch-client-javascript/commit/54c1cb7)), closes [#1263](https://github.com/algolia/algoliasearch-client-javascript/issues/1263) -- fix(findAnswers): omit removeWordsIfNoResults correctly ([3aec216](https://github.com/algolia/algoliasearch-client-javascript/commit/3aec216)) +## [5.16.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.15.0...5.16.0) -## [v4.8.6](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.5...4.8.6) +- [068fdacb5](https://github.com/algolia/api-clients-automation/commit/068fdacb5) feat(specs): add info and link about indexing rate limits ([#4136](https://github.com/algolia/api-clients-automation/pull/4136)) by [@kai687](https://github.com/kai687/) +- [2e894c9ed](https://github.com/algolia/api-clients-automation/commit/2e894c9ed) fix(javascript): set latest version on prereleases ([#4138](https://github.com/algolia/api-clients-automation/pull/4138)) by [@shortcuts](https://github.com/shortcuts/) +- [9e0235697](https://github.com/algolia/api-clients-automation/commit/9e0235697) fix(specs): `nb_api_calls` in `getLogs` response is optional ([#4142](https://github.com/algolia/api-clients-automation/pull/4142)) by [@shortcuts](https://github.com/shortcuts/) +- [c04440114](https://github.com/algolia/api-clients-automation/commit/c04440114) fix(javascript): allow async param on createIterablePromise ([#4144](https://github.com/algolia/api-clients-automation/pull/4144)) by [@millotp](https://github.com/millotp/) +- [56fd73fb6](https://github.com/algolia/api-clients-automation/commit/56fd73fb6) chore(deps): dependencies 2024-11-25 ([#4145](https://github.com/algolia/api-clients-automation/pull/4145)) by [@algolia-bot](https://github.com/algolia-bot/) +- [b728c5f25](https://github.com/algolia/api-clients-automation/commit/b728c5f25) fix(specs): `consequence` is required when saving rules ([#4146](https://github.com/algolia/api-clients-automation/pull/4146)) by [@shortcuts](https://github.com/shortcuts/) +- [afd94fac8](https://github.com/algolia/api-clients-automation/commit/afd94fac8) fix(specs): `saveRule` response type ([#4170](https://github.com/algolia/api-clients-automation/pull/4170)) by [@shortcuts](https://github.com/shortcuts/) +- [2325c61b8](https://github.com/algolia/api-clients-automation/commit/2325c61b8) feat(clients): allow batch size on objects helper ([#4172](https://github.com/algolia/api-clients-automation/pull/4172)) by [@shortcuts](https://github.com/shortcuts/) +- [641c1c37f](https://github.com/algolia/api-clients-automation/commit/641c1c37f) chore(deps): dependencies 2024-12-02 ([#4174](https://github.com/algolia/api-clients-automation/pull/4174)) by [@algolia-bot](https://github.com/algolia-bot/) +- [aae74cb38](https://github.com/algolia/api-clients-automation/commit/aae74cb38) fix(specs): remove SFCC source type ([#4190](https://github.com/algolia/api-clients-automation/pull/4190)) by [@millotp](https://github.com/millotp/) +- [6cf044504](https://github.com/algolia/api-clients-automation/commit/6cf044504) chore: add homepage to JavaScript client package ([#4192](https://github.com/algolia/api-clients-automation/pull/4192)) by [@Adnan-Bacic](https://github.com/Adnan-Bacic/) +- [254052857](https://github.com/algolia/api-clients-automation/commit/254052857) fix(specs): add sourceType to listTasks ([#4193](https://github.com/algolia/api-clients-automation/pull/4193)) by [@millotp](https://github.com/millotp/) +- [106d64313](https://github.com/algolia/api-clients-automation/commit/106d64313) feat(generators): allow per-spec timeouts ([#4173](https://github.com/algolia/api-clients-automation/pull/4173)) by [@shortcuts](https://github.com/shortcuts/) +- [9e1e60f9e](https://github.com/algolia/api-clients-automation/commit/9e1e60f9e) chore(deps): dependencies 2024-12-09 ([#4197](https://github.com/algolia/api-clients-automation/pull/4197)) by [@algolia-bot](https://github.com/algolia-bot/) -- fix(answers): rename params to searchParameters (#1256) ([0229a12](https://github.com/algolia/algoliasearch-client-javascript/commit/0229a12)), closes [#1256](https://github.com/algolia/algoliasearch-client-javascript/issues/1256) -- fix(onSucess): correctly deprecate ([c7d04ca](https://github.com/algolia/algoliasearch-client-javascript/commit/c7d04ca)) -- fix(types): update FindAnswersOptions (#1258) ([bdf67a5](https://github.com/algolia/algoliasearch-client-javascript/commit/bdf67a5)), closes [#1258](https://github.com/algolia/algoliasearch-client-javascript/issues/1258) -- refactor(retry): Spell success properly (#1254) ([173f5f1](https://github.com/algolia/algoliasearch-client-javascript/commit/173f5f1)), closes [#1254](https://github.com/algolia/algoliasearch-client-javascript/issues/1254) +## [5.15.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.14.2...5.15.0) -## [v4.8.5](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.4...4.8.5) +- [0787a3d2a](https://github.com/algolia/api-clients-automation/commit/0787a3d2a) chore(scripts): change dist folder and bump ([#4113](https://github.com/algolia/api-clients-automation/pull/4113)) by [@millotp](https://github.com/millotp/) +- [f246995a7](https://github.com/algolia/api-clients-automation/commit/f246995a7) chore(deps): dependencies 2024-11-18 ([#4109](https://github.com/algolia/api-clients-automation/pull/4109)) by [@algolia-bot](https://github.com/algolia-bot/) +- [ff954678e](https://github.com/algolia/api-clients-automation/commit/ff954678e) fix(playground): add formatter for python ([#4125](https://github.com/algolia/api-clients-automation/pull/4125)) by [@millotp](https://github.com/millotp/) +- [da4169e1b](https://github.com/algolia/api-clients-automation/commit/da4169e1b) fix(specs): do not cache searchCompositionRules ([#4127](https://github.com/algolia/api-clients-automation/pull/4127)) by [@e-krebs](https://github.com/e-krebs/) +- [08669e2b3](https://github.com/algolia/api-clients-automation/commit/08669e2b3) feat(specs): default authMode to WithinHeaders for Composition Client ([#4129](https://github.com/algolia/api-clients-automation/pull/4129)) by [@e-krebs](https://github.com/e-krebs/) +- [f97e44ce0](https://github.com/algolia/api-clients-automation/commit/f97e44ce0) fix(cts): add tests for HTML error ([#4097](https://github.com/algolia/api-clients-automation/pull/4097)) by [@millotp](https://github.com/millotp/) -- feat(ts): add virtual index parameters (#1251) ([cffd8f0](https://github.com/algolia/algoliasearch-client-javascript/commit/cffd8f0)), closes [#1251](https://github.com/algolia/algoliasearch-client-javascript/issues/1251) [#1249](https://github.com/algolia/algoliasearch-client-javascript/issues/1249) -- feat(ts): allow filters in rule condition (#1247) ([5032d6f](https://github.com/algolia/algoliasearch-client-javascript/commit/5032d6f)), closes [#1247](https://github.com/algolia/algoliasearch-client-javascript/issues/1247) [#1246](https://github.com/algolia/algoliasearch-client-javascript/issues/1246) +## [5.14.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.14.0...5.14.2) -## [v4.8.4](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.3...4.8.4) +- [b97a88beb](https://github.com/algolia/api-clients-automation/commit/b97a88beb) fix(javascript): add support for private package publish ([#4106](https://github.com/algolia/api-clients-automation/pull/4106)) by [@shortcuts](https://github.com/shortcuts/) +- [36d583e35](https://github.com/algolia/api-clients-automation/commit/36d583e35) fix(specs): make the searchParams compatible with v4 ([#4108](https://github.com/algolia/api-clients-automation/pull/4108)) by [@millotp](https://github.com/millotp/) +- [996ba5036](https://github.com/algolia/api-clients-automation/commit/996ba5036) fix(specs): remove private beta endpoint from recommend ([#4110](https://github.com/algolia/api-clients-automation/pull/4110)) by [@shortcuts](https://github.com/shortcuts/) -- feat(ts): add decompoundQuery (#1240) ([446c9a0](https://github.com/algolia/algoliasearch-client-javascript/commit/446c9a0)), closes [#1240](https://github.com/algolia/algoliasearch-client-javascript/issues/1240) -- feat(ts): add the attributesToTransliterate setting (#1244) ([b91c035](https://github.com/algolia/algoliasearch-client-javascript/commit/b91c035)), closes [#1244](https://github.com/algolia/algoliasearch-client-javascript/issues/1244) +## [5.14.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.13.0...5.14.0) -## [v4.8.3](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.2...4.8.3) +- [4c73f4c9a](https://github.com/algolia/api-clients-automation/commit/4c73f4c9a) feat(specs): add estimate path and responses ([#4057](https://github.com/algolia/api-clients-automation/pull/4057)) by [@cdhawke](https://github.com/cdhawke/) +- [4a6d17540](https://github.com/algolia/api-clients-automation/commit/4a6d17540) chore(deps): dependencies 2024-11-11 ([#4080](https://github.com/algolia/api-clients-automation/pull/4080)) by [@algolia-bot](https://github.com/algolia-bot/) +- [39ad05495](https://github.com/algolia/api-clients-automation/commit/39ad05495) feat(specs): update estimate response type ([#4101](https://github.com/algolia/api-clients-automation/pull/4101)) by [@cdhawke](https://github.com/cdhawke/) +- [dd18afe8d](https://github.com/algolia/api-clients-automation/commit/dd18afe8d) fix(specs): rename composition run endpoint ([#4099](https://github.com/algolia/api-clients-automation/pull/4099)) by [@e-krebs](https://github.com/e-krebs/) +- [66acf19b8](https://github.com/algolia/api-clients-automation/commit/66acf19b8) fix(scripts): dart and js releases ([#4104](https://github.com/algolia/api-clients-automation/pull/4104)) by [@shortcuts](https://github.com/shortcuts/) -- fix(ts): correct type for listIndices response (#1236) ([0bb6bba](https://github.com/algolia/algoliasearch-client-javascript/commit/0bb6bba)), closes [#1236](https://github.com/algolia/algoliasearch-client-javascript/issues/1236) +## [5.13.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.12.0...5.13.0) -## [v4.8.2](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.1...4.8.2) +- [f598e77b1](https://github.com/algolia/api-clients-automation/commit/f598e77b1) fix(javascript): allow import from dist ([#4060](https://github.com/algolia/api-clients-automation/pull/4060)) by [@shortcuts](https://github.com/shortcuts/) +- [801241e12](https://github.com/algolia/api-clients-automation/commit/801241e12) fix(specs): add secrets payload for updates ([#4061](https://github.com/algolia/api-clients-automation/pull/4061)) by [@shortcuts](https://github.com/shortcuts/) +- [625421783](https://github.com/algolia/api-clients-automation/commit/625421783) fix(clients): update browse iterator ([#4058](https://github.com/algolia/api-clients-automation/pull/4058)) by [@Fluf22](https://github.com/Fluf22/) +- [ff2d23c14](https://github.com/algolia/api-clients-automation/commit/ff2d23c14) chore(deps): dependencies 2024-11-04 ([#4065](https://github.com/algolia/api-clients-automation/pull/4065)) by [@algolia-bot](https://github.com/algolia-bot/) +- [bf9173f47](https://github.com/algolia/api-clients-automation/commit/bf9173f47) feat(scripts): compute eligibility dates ([#4064](https://github.com/algolia/api-clients-automation/pull/4064)) by [@shortcuts](https://github.com/shortcuts/) +- [a38ceecc8](https://github.com/algolia/api-clients-automation/commit/a38ceecc8) feat(specs): add composition API ([#4056](https://github.com/algolia/api-clients-automation/pull/4056)) by [@e-krebs](https://github.com/e-krebs/) -- fix(findAnswers): fix typing (#1233) ([a935d88](https://github.com/algolia/algoliasearch-client-javascript/commit/a935d88)), closes [#1233](https://github.com/algolia/algoliasearch-client-javascript/issues/1233) -- fix(ts): don't require every attribute to be highlighted (#1234) ([4591d0e](https://github.com/algolia/algoliasearch-client-javascript/commit/4591d0e)), closes [#1234](https://github.com/algolia/algoliasearch-client-javascript/issues/1234) +## [5.12.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.11.0...5.12.0) -## [v4.8.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.8.0...4.8.1) +- [be40cf61d](https://github.com/algolia/api-clients-automation/commit/be40cf61d) feat(specs): add secrets authentications to ingestion ([#4054](https://github.com/algolia/api-clients-automation/pull/4054)) by [@shortcuts](https://github.com/shortcuts/) -- fix(ts): correct search response for facets_stats (#1229) ([ac732d1](https://github.com/algolia/algoliasearch-client-javascript/commit/ac732d1)), closes [#1229](https://github.com/algolia/algoliasearch-client-javascript/issues/1229) +## [5.11.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.10.2...5.11.0) -## [v4.8.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.7.0...4.8.0) +- [312d33731](https://github.com/algolia/api-clients-automation/commit/312d33731) feat(specs): add missing message attribute to GetObjectsResponse [skip-bc] ([#4029](https://github.com/algolia/api-clients-automation/pull/4029)) by [@kombucha](https://github.com/kombucha/) +- [32f9f4d16](https://github.com/algolia/api-clients-automation/commit/32f9f4d16) fix(specs): support synonyms type in camel case [skip-bc] ([#4031](https://github.com/algolia/api-clients-automation/pull/4031)) by [@shortcuts](https://github.com/shortcuts/) +- [be9231793](https://github.com/algolia/api-clients-automation/commit/be9231793) chore(deps): dependencies 2024-10-28 [skip-bc] ([#4032](https://github.com/algolia/api-clients-automation/pull/4032)) by [@algolia-bot](https://github.com/algolia-bot/) +- [7f5fe6b68](https://github.com/algolia/api-clients-automation/commit/7f5fe6b68) feat(clients): expose waitForTasks to batch helpers [skip-bc] ([#4030](https://github.com/algolia/api-clients-automation/pull/4030)) by [@shortcuts](https://github.com/shortcuts/) -- feat(saveSynonyms): replaceExistingSynonyms -> clearExistingSynonyms (#1226) ([2fcf485](https://github.com/algolia/algoliasearch-client-javascript/commit/2fcf485)), closes [#1226](https://github.com/algolia/algoliasearch-client-javascript/issues/1226) [#1224](https://github.com/algolia/algoliasearch-client-javascript/issues/1224) -- fix(findAnswers): expose in lite version (#1227) ([6cb1d0a](https://github.com/algolia/algoliasearch-client-javascript/commit/6cb1d0a)), closes [#1227](https://github.com/algolia/algoliasearch-client-javascript/issues/1227) +## [5.10.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.10.1...5.10.2) -## [v4.7.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.6.0...4.7.0) +- [209553724](https://github.com/algolia/api-clients-automation/commit/209553724) chore(javascript): update release script ([#4022](https://github.com/algolia/api-clients-automation/pull/4022)) by [@shortcuts](https://github.com/shortcuts/) +- [1f36e8f93](https://github.com/algolia/api-clients-automation/commit/1f36e8f93) fix(specs): results in getObjects is required ([#4024](https://github.com/algolia/api-clients-automation/pull/4024)) by [@shortcuts](https://github.com/shortcuts/) -- feat(findAnswers): implement the new method (experimental) (#1219) ([8d962ea](https://github.com/algolia/algoliasearch-client-javascript/commit/8d962ea)), closes [#1219](https://github.com/algolia/algoliasearch-client-javascript/issues/1219) -- feat(analytics & recommendation): allow creation of clients (initAnalytics, initRecommendation) with their own credentials (#1223) ([a7938b0](https://github.com/algolia/algoliasearch-client-javascript/commit/a7938b0)) +## [5.10.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.10.0...5.10.1) -## [v4.6.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.5.1...4.6.0) +- [25de7005c](https://github.com/algolia/api-clients-automation/commit/25de7005c) fix(javascript): common package types ([#4015](https://github.com/algolia/api-clients-automation/pull/4015)) by [@shortcuts](https://github.com/shortcuts/) -- fix(node): allow passing requesterOptions (#1215) ([4348b38](https://github.com/algolia/algoliasearch-client-javascript/commit/4348b38)), closes [#1215](https://github.com/algolia/algoliasearch-client-javascript/issues/1215) -- fix(node): reuse http agent across client (#1216) ([f6e9e56](https://github.com/algolia/algoliasearch-client-javascript/commit/f6e9e56)), closes [#1216](https://github.com/algolia/algoliasearch-client-javascript/issues/1216) -- feat(client-search): add personalization field to RankingInfo (#1213) ([50b78a3](https://github.com/algolia/algoliasearch-client-javascript/commit/50b78a3)), closes [#1213](https://github.com/algolia/algoliasearch-client-javascript/issues/1213) +## [5.10.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.9.1...5.10.0) -## [v4.5.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.5.0...4.5.1) +- [0a84faf07](https://github.com/algolia/api-clients-automation/commit/0a84faf07) feat(javascript): assert algoliasearch bundle ([#3991](https://github.com/algolia/api-clients-automation/pull/3991)) by [@shortcuts](https://github.com/shortcuts/) +- [d3ef71cde](https://github.com/algolia/api-clients-automation/commit/d3ef71cde) fix(javascript): do not publish ts ([#4009](https://github.com/algolia/api-clients-automation/pull/4009)) by [@shortcuts](https://github.com/shortcuts/) +- [b8fc14883](https://github.com/algolia/api-clients-automation/commit/b8fc14883) chore(deps): dependencies 2024-10-21 ([#3992](https://github.com/algolia/api-clients-automation/pull/3992)) by [@algolia-bot](https://github.com/algolia-bot/) +- [2c53b455d](https://github.com/algolia/api-clients-automation/commit/2c53b455d) fix(javascript): use unknown over any ([#4011](https://github.com/algolia/api-clients-automation/pull/4011)) by [@shortcuts](https://github.com/shortcuts/) +- [fe2c8440e](https://github.com/algolia/api-clients-automation/commit/fe2c8440e) docs(analytics): constrain pagination only to limit query parameter ([#4012](https://github.com/algolia/api-clients-automation/pull/4012)) by [@febeck](https://github.com/febeck/) +- [003bd28f0](https://github.com/algolia/api-clients-automation/commit/003bd28f0) chore(javascript): build algoliasearch everytime ([#4013](https://github.com/algolia/api-clients-automation/pull/4013)) by [@shortcuts](https://github.com/shortcuts/) -### Fixed +## [5.9.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.9.0...5.9.1) -- avoid bundle-size increase by using a slightly older version of babel +- [b076b69ba](https://github.com/algolia/api-clients-automation/commit/b076b69ba) fix(javascript): missing search dependency ([#3988](https://github.com/algolia/api-clients-automation/pull/3988)) by [@shortcuts](https://github.com/shortcuts/) -## [v4.5.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.4.0...4.5.0) +## [5.9.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.8.1...5.9.0) -### Added +- [56164aab9](https://github.com/algolia/api-clients-automation/commit/56164aab9) fix(javascript): do not publish ts ([#3966](https://github.com/algolia/api-clients-automation/pull/3966)) by [@shortcuts](https://github.com/shortcuts/) +- [cd98290fa](https://github.com/algolia/api-clients-automation/commit/cd98290fa) fix(specs): Typo tolernace on words ([#3968](https://github.com/algolia/api-clients-automation/pull/3968)) by [@gazconroy](https://github.com/gazconroy/) +- [21d09d3d3](https://github.com/algolia/api-clients-automation/commit/21d09d3d3) feat(javascript): add every APIs ([#3942](https://github.com/algolia/api-clients-automation/pull/3942)) by [@shortcuts](https://github.com/shortcuts/) +- [5866c2954](https://github.com/algolia/api-clients-automation/commit/5866c2954) fix(specs): Add context to hitsPerPage ([#3969](https://github.com/algolia/api-clients-automation/pull/3969)) by [@gazconroy](https://github.com/gazconroy/) +- [95e4149a3](https://github.com/algolia/api-clients-automation/commit/95e4149a3) chore(deps): dependencies 2024-10-14 ([#3944](https://github.com/algolia/api-clients-automation/pull/3944)) by [@algolia-bot](https://github.com/algolia-bot/) +- [8b879dead](https://github.com/algolia/api-clients-automation/commit/8b879dead) fix(specs): alternativesAsExact is plurals and synonyms ([#3974](https://github.com/algolia/api-clients-automation/pull/3974)) by [@gazconroy](https://github.com/gazconroy/) +- [1a9b95e85](https://github.com/algolia/api-clients-automation/commit/1a9b95e85) fix(specs): Separators are non-alphanumeric characters ([#3978](https://github.com/algolia/api-clients-automation/pull/3978)) by [@gazconroy](https://github.com/gazconroy/) +- [519fd9840](https://github.com/algolia/api-clients-automation/commit/519fd9840) fix(specs): multiple clients fixes ([#3971](https://github.com/algolia/api-clients-automation/pull/3971)) by [@shortcuts](https://github.com/shortcuts/) -- introduce a new `Hit` type, returned from search operations ([#1191](https://github.com/algolia/algoliasearch-client-javascript/pull/1191)) -- Allow `hosts` array to also accept strings ([#1189](https://github.com/algolia/algoliasearch-client-javascript/pull/1189)) +## [5.8.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.8.0...5.8.1) -### Fixed +- [f516d0243](https://github.com/algolia/api-clients-automation/commit/f516d0243) fix(specs): Typos in API descriptions ([#3932](https://github.com/algolia/api-clients-automation/pull/3932)) by [@gazconroy](https://github.com/gazconroy/) +- [434c99f80](https://github.com/algolia/api-clients-automation/commit/434c99f80) fix(specs): use the read transporter for browse ([#3938](https://github.com/algolia/api-clients-automation/pull/3938)) by [@millotp](https://github.com/millotp/) +- [6b07138e7](https://github.com/algolia/api-clients-automation/commit/6b07138e7) chore: apply codacy fixes ([#3935](https://github.com/algolia/api-clients-automation/pull/3935)) by [@millotp](https://github.com/millotp/) +- [45d433d0a](https://github.com/algolia/api-clients-automation/commit/45d433d0a) fix(specs): correct type for banners [skip-bc] ([#3939](https://github.com/algolia/api-clients-automation/pull/3939)) by [@millotp](https://github.com/millotp/) -- add missing updatedAt attribute to client-analytics ([#1186](https://github.com/algolia/algoliasearch-client-javascript/pull/1186)) -- a/b test VariantResponse typing ([#1185](https://github.com/algolia/algoliasearch-client-javascript/pull/1185)) -- getObjects can also return `null` if an object is not existing ([#1183](https://github.com/algolia/algoliasearch-client-javascript/pull/1183)) +## [5.8.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.7.0...5.8.0) -## [v4.4.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.3.1...4.4.0) +- [ad8e3d224](https://github.com/algolia/api-clients-automation/commit/ad8e3d224) fix(specs): update analytics and abtesting max pagination query limit ([#3696](https://github.com/algolia/api-clients-automation/pull/3696)) by [@febeck](https://github.com/febeck/) +- [bed119166](https://github.com/algolia/api-clients-automation/commit/bed119166) feat(specs): add support for widgets / banners in search for the csharp client ([#3870](https://github.com/algolia/api-clients-automation/pull/3870)) by [@Kalmar99](https://github.com/Kalmar99/) +- [844e57f35](https://github.com/algolia/api-clients-automation/commit/844e57f35) fix(specs): correct typos is Search API ([#3898](https://github.com/algolia/api-clients-automation/pull/3898)) by [@gazconroy](https://github.com/gazconroy/) +- [3c4c87619](https://github.com/algolia/api-clients-automation/commit/3c4c87619) chore(deps): dependencies 2024-10-07 ([#3876](https://github.com/algolia/api-clients-automation/pull/3876)) by [@algolia-bot](https://github.com/algolia-bot/) +- [3d5828d61](https://github.com/algolia/api-clients-automation/commit/3d5828d61) fix(javascript): node 14 compatibility ([#3897](https://github.com/algolia/api-clients-automation/pull/3897)) by [@shortcuts](https://github.com/shortcuts/) +- [ed6f4ba0e](https://github.com/algolia/api-clients-automation/commit/ed6f4ba0e) chore(javascript): use oxlint ([#3895](https://github.com/algolia/api-clients-automation/pull/3895)) by [@shortcuts](https://github.com/shortcuts/) +- [f554e09c3](https://github.com/algolia/api-clients-automation/commit/f554e09c3) chore: revert and fix release ([#3922](https://github.com/algolia/api-clients-automation/pull/3922)) by [@millotp](https://github.com/millotp/) -### Added +## [5.7.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.6.1...5.7.0) -- Accept multiple objectIDs in a Rule promotion ([#1156](https://github.com/algolia/algoliasearch-client-javascript/pull/1156), [#1155](https://github.com/algolia/algoliasearch-client-javascript/pull/1155)) -- Accept a custom http(s) agent in `createNodeHttpRequester` ([#1180](https://github.com/algolia/algoliasearch-client-javascript/pull/1180)) +- [788483537](https://github.com/algolia/api-clients-automation/commit/788483537) chore(clients): add workflow to auto-close PR ([#3834](https://github.com/algolia/api-clients-automation/pull/3834)) by [@shortcuts](https://github.com/shortcuts/) +- [e59dd41d5](https://github.com/algolia/api-clients-automation/commit/e59dd41d5) fix(specs): API key description will be obfuscated ([#3840](https://github.com/algolia/api-clients-automation/pull/3840)) by [@kai687](https://github.com/kai687/) +- [dc28c0268](https://github.com/algolia/api-clients-automation/commit/dc28c0268) feat(specs): add recommend batch rules endpoint ([#3782](https://github.com/algolia/api-clients-automation/pull/3782)) by [@raed667](https://github.com/raed667/) +- [6f58ae2dc](https://github.com/algolia/api-clients-automation/commit/6f58ae2dc) chore(deps): dependencies 2024-09-30 ([#3842](https://github.com/algolia/api-clients-automation/pull/3842)) by [@algolia-bot](https://github.com/algolia-bot/) -## [v4.3.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.3.0...4.3.1) +## [5.6.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.6.0...5.6.1) -### Added +- [847ce7753](https://github.com/algolia/api-clients-automation/commit/847ce7753) chore(javascript): update READMEs ([#3829](https://github.com/algolia/api-clients-automation/pull/3829)) by [@shortcuts](https://github.com/shortcuts/) +- [022131871](https://github.com/algolia/api-clients-automation/commit/022131871) fix(specs): correct query params for ingestion [skip-bc] ([#3830](https://github.com/algolia/api-clients-automation/pull/3830)) by [@millotp](https://github.com/millotp/) -- Support to multiple `conditions` on query rules ([#1171](https://github.com/algolia/algoliasearch-client-javascript/pull/1171), [#1174](https://github.com/algolia/algoliasearch-client-javascript/pull/1174)) +## [5.6.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.5.3...5.6.0) -## [v4.3.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.2.0...4.3.0) +- [1939114e1](https://github.com/algolia/api-clients-automation/commit/1939114e1) chore(deps): dependencies 2024-09-23 ([#3790](https://github.com/algolia/api-clients-automation/pull/3790)) by [@algolia-bot](https://github.com/algolia-bot/) +- [db4cf48c5](https://github.com/algolia/api-clients-automation/commit/db4cf48c5) feat(javascript): add logger-console package from v4 ([#3823](https://github.com/algolia/api-clients-automation/pull/3823)) by [@shortcuts](https://github.com/shortcuts/) -### Added +## [5.5.3](https://github.com/algolia/algoliasearch-client-javascript/compare/5.5.2...5.5.3) -- `naturalLanguages` option type ([#1147](https://github.com/algolia/algoliasearch-client-javascript/pull/1147)) -- `shouldStop` option to stop browse ([#1029](https://github.com/algolia/algoliasearch-client-javascript/pull/1029)) -- `inner_queries` property to `getLogs` response ([#1109](https://github.com/algolia/algoliasearch-client-javascript/pull/1109), [#1166](https://github.com/algolia/algoliasearch-client-javascript/pull/1166)) -- `enablePersonalization` option to type `Settings` ([#1151](https://github.com/algolia/algoliasearch-client-javascript/pull/1151)) +- [b187a09df](https://github.com/algolia/api-clients-automation/commit/b187a09df) fix(javascript): add override to name property ([#3785](https://github.com/algolia/api-clients-automation/pull/3785)) by [@shortcuts](https://github.com/shortcuts/) -### Fixed +## [5.5.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.5.1...5.5.2) -- additional `clear`, `delete` & `deleteObject` types for the `.batch` method ([#1149](https://github.com/algolia/algoliasearch-client-javascript/pull/1149)) -- unhandled promise issue while using while using `accountCopyIndex` ([#1154](https://github.com/algolia/algoliasearch-client-javascript/pull/1154)) -- node requester unicode characters being corrupted on large responses ([#1164](https://github.com/algolia/algoliasearch-client-javascript/pull/1164)) +- [1a73994ff](https://github.com/algolia/api-clients-automation/commit/1a73994ff) fix(specs): recommend remove unsupported query parameters [RECO-2345] [skip-bc] ([#3692](https://github.com/algolia/api-clients-automation/pull/3692)) by [@raed667](https://github.com/raed667/) +- [92438873c](https://github.com/algolia/api-clients-automation/commit/92438873c) fix(specs): remove models from ingestion specs [skip-bc] ([#3774](https://github.com/algolia/api-clients-automation/pull/3774)) by [@shortcuts](https://github.com/shortcuts/) -## [v4.2.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.1.0...4.2.0) +## [5.5.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.5.0...5.5.1) -### Added +- [901076592](https://github.com/algolia/api-clients-automation/commit/901076592) fix(javascript): react-native lite resolution ([#3771](https://github.com/algolia/api-clients-automation/pull/3771)) by [@shortcuts](https://github.com/shortcuts/) -- Improved `acl` property type in `GetApiKeyResponse` and `addApiKey` function param ([#1126](https://github.com/algolia/algoliasearch-client-javascript/pull/1126)) -- Improved `AnalyticsClientOptions` property type region ([#1085](https://github.com/algolia/algoliasearch-client-javascript/pull/1085)) -- Responses types can now be mutated ([#1068](https://github.com/algolia/algoliasearch-client-javascript/pull/1068)) +## [5.5.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.4.3...5.5.0) -### Fixed +- [d67c0e0e6](https://github.com/algolia/api-clients-automation/commit/d67c0e0e6) feat(javascript): add react-native field in package.json ([#3767](https://github.com/algolia/api-clients-automation/pull/3767)) by [@shortcuts](https://github.com/shortcuts/) -- Type `Log` ([#1139](https://github.com/algolia/algoliasearch-client-javascript/pull/1139)) +## [5.4.3](https://github.com/algolia/algoliasearch-client-javascript/compare/5.4.2...5.4.3) -## [v4.1.0](https://github.com/algolia/algoliasearch-client-javascript/compare/4.0.3...4.1.0) +- [638058eae](https://github.com/algolia/api-clients-automation/commit/638058eae) fix(specs): update search api specs [skip-bc] ([#3760](https://github.com/algolia/api-clients-automation/pull/3760)) by [@Fluf22](https://github.com/Fluf22/) +- [08d8ee6de](https://github.com/algolia/api-clients-automation/commit/08d8ee6de) chore(deps): dependencies 2024-09-16 [skip-bc] ([#3704](https://github.com/algolia/api-clients-automation/pull/3704)) by [@algolia-bot](https://github.com/algolia-bot/) -### Added +## [5.4.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.4.1...5.4.2) -- Field `filterPromotes` in Rule type ([#1013](https://github.com/algolia/algoliasearch-client-javascript/pull/1013)) -- Method `hasPendingMappings` ([#1024](https://github.com/algolia/algoliasearch-client-javascript/pull/1024)) +- [274fae19b](https://github.com/algolia/api-clients-automation/commit/274fae19b) fix(javascript): umd export name ([#3701](https://github.com/algolia/api-clients-automation/pull/3701)) by [@shortcuts](https://github.com/shortcuts/) -### Fixed +## [5.4.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.4.0...5.4.1) -- Field `abtests` in GetAbTestsResponse type ([#1012](https://github.com/algolia/algoliasearch-client-javascript/pull/1012)) -- `browse` related methods not bubbling up errors as expected ([#1042](https://github.com/algolia/algoliasearch-client-javascript/pull/1042)) -- Header `x-algolia-user-id` is not allowed on browser env ([#1023](https://github.com/algolia/algoliasearch-client-javascript/pull/1023)) +- [d4df544d6](https://github.com/algolia/api-clients-automation/commit/d4df544d6) fix(specs): remove usage [skip-bc] ([#3691](https://github.com/algolia/api-clients-automation/pull/3691)) by [@kai687](https://github.com/kai687/) +- [d39b87726](https://github.com/algolia/api-clients-automation/commit/d39b87726) chore: assert node helpers ([#3689](https://github.com/algolia/api-clients-automation/pull/3689)) by [@shortcuts](https://github.com/shortcuts/) +- [46d9d8fd0](https://github.com/algolia/api-clients-automation/commit/46d9d8fd0) feat(specs): add (optional) \_automaticInsights to search result ([#3688](https://github.com/algolia/api-clients-automation/pull/3688)) by [@raed667](https://github.com/raed667/) -## [v4.0.3](https://github.com/algolia/algoliasearch-client-javascript/compare/4.0.2...4.0.3) +## [5.4.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.3.2...5.4.0) -### Fixed +- [52e1b570a](https://github.com/algolia/api-clients-automation/commit/52e1b570a) feat(javascript): add requester-testing package ([#3684](https://github.com/algolia/api-clients-automation/pull/3684)) by [@shortcuts](https://github.com/shortcuts/) +- [896435217](https://github.com/algolia/api-clients-automation/commit/896435217) feat(javascript): add worker exports ([#3680](https://github.com/algolia/api-clients-automation/pull/3680)) by [@shortcuts](https://github.com/shortcuts/) -- `browseObjects` missing cursor error ([#1011](https://github.com/algolia/algoliasearch-client-javascript/pull/1011)) -- `browseSynonyms|browseRules` giving just a maximum of 20 hits ([#1011](https://github.com/algolia/algoliasearch-client-javascript/pull/1011)) -- Node entry point not es6 compliant ([#1005](https://github.com/algolia/algoliasearch-client-javascript/pull/1005)) +## [5.3.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.3.1...5.3.2) -## [v4.0.2](https://github.com/algolia/algoliasearch-client-javascript/compare/4.0.1...4.0.2) +- [0a433cc7a](https://github.com/algolia/api-clients-automation/commit/0a433cc7a) fix(javascript): use transporter directly ([#3682](https://github.com/algolia/api-clients-automation/pull/3682)) by [@shortcuts](https://github.com/shortcuts/) -### Fixed +## [5.3.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.3.0...5.3.1) -- DOMException being thrown while instantiating browser local storage cache driver ([#999](https://github.com/algolia/algoliasearch-client-javascript/pull/999)) +- [50bd07392](https://github.com/algolia/api-clients-automation/commit/50bd07392) fix(javascript): assert helpers and fix setClientApiKey helper ([#3663](https://github.com/algolia/api-clients-automation/pull/3663)) by [@shortcuts](https://github.com/shortcuts/) -## [v4.0.1](https://github.com/algolia/algoliasearch-client-javascript/compare/4.0.0...4.0.1) +## [5.3.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.2.5...5.3.0) -### Fixed +- [3b673cee4](https://github.com/algolia/api-clients-automation/commit/3b673cee4) fix(javascript): type definition and template cleanup ([#3656](https://github.com/algolia/api-clients-automation/pull/3656)) by [@shortcuts](https://github.com/shortcuts/) +- [2c65a8d11](https://github.com/algolia/api-clients-automation/commit/2c65a8d11) feat(clients): helper to switch API key in use ([#3616](https://github.com/algolia/api-clients-automation/pull/3616)) by [@Fluf22](https://github.com/Fluf22/) +- [f126366dc](https://github.com/algolia/api-clients-automation/commit/f126366dc) fix(specs): note on Analytics API server ([#3650](https://github.com/algolia/api-clients-automation/pull/3650)) by [@kai687](https://github.com/kai687/) +- [3d02b3164](https://github.com/algolia/api-clients-automation/commit/3d02b3164) feat(clients): add helper to check if an index exists ([#3646](https://github.com/algolia/api-clients-automation/pull/3646)) by [@millotp](https://github.com/millotp/) +- [a36746d65](https://github.com/algolia/api-clients-automation/commit/a36746d65) fix(specs): note on insights API server ([#3649](https://github.com/algolia/api-clients-automation/pull/3649)) by [@kai687](https://github.com/kai687/) +- [1f53716c6](https://github.com/algolia/api-clients-automation/commit/1f53716c6) fix(specs): don't extend $ref objects ([#3623](https://github.com/algolia/api-clients-automation/pull/3623)) by [@kai687](https://github.com/kai687/) -- Missing `repository` entry on `package.json` ([#989](https://github.com/algolia/algoliasearch-client-javascript/pull/989)) +## [5.2.5](https://github.com/algolia/algoliasearch-client-javascript/compare/5.2.4...5.2.5) -## [v4.0.0](https://github.com/algolia/algoliasearch-client-javascript/compare/3.35.1...4.0.0) +- [ff0c99653](https://github.com/algolia/api-clients-automation/commit/ff0c99653) chore(javascript): use tsup bundler ([#3640](https://github.com/algolia/api-clients-automation/pull/3640)) by [@shortcuts](https://github.com/shortcuts/) +- [a9405b168](https://github.com/algolia/api-clients-automation/commit/a9405b168) fix(specs): usage api ([#3624](https://github.com/algolia/api-clients-automation/pull/3624)) by [@kai687](https://github.com/kai687/) +- [e3af9554e](https://github.com/algolia/api-clients-automation/commit/e3af9554e) fix(specs): no links across API specs ([#3643](https://github.com/algolia/api-clients-automation/pull/3643)) by [@kai687](https://github.com/kai687/) -- Major version: [Upgrade Guide](https://www.algolia.com/doc/api-client/getting-started/upgrade-guides/javascript/) +## [5.2.4](https://github.com/algolia/algoliasearch-client-javascript/compare/5.2.3...5.2.4) + +- [3d07a1e4f](https://github.com/algolia/api-clients-automation/commit/3d07a1e4f) fix(specs): ignorePlurals can be a boolean string ([#3620](https://github.com/algolia/api-clients-automation/pull/3620)) by [@millotp](https://github.com/millotp/) +- [c0675ff6b](https://github.com/algolia/api-clients-automation/commit/c0675ff6b) fix(clients): correly parse usage hosts ([#3622](https://github.com/algolia/api-clients-automation/pull/3622)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.2.3](https://github.com/algolia/algoliasearch-client-javascript/compare/5.2.2...5.2.3) + +- [327e08d4e](https://github.com/algolia/api-clients-automation/commit/327e08d4e) fix(specs): ingestion push task payload [skip-bc] ([#3607](https://github.com/algolia/api-clients-automation/pull/3607)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.2.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.2.1...5.2.2) + +- [7189cbe4c](https://github.com/algolia/api-clients-automation/commit/7189cbe4c) fix(javascript): dependency imports and low-level init ([#3596](https://github.com/algolia/api-clients-automation/pull/3596)) by [@shortcuts](https://github.com/shortcuts/) +- [796ae3fe2](https://github.com/algolia/api-clients-automation/commit/796ae3fe2) chore(javascript): add license to the root of the repo ([#3610](https://github.com/algolia/api-clients-automation/pull/3610)) by [@shortcuts](https://github.com/shortcuts/) +- [f8b7a77a8](https://github.com/algolia/api-clients-automation/commit/f8b7a77a8) fix(javascript): prefix with `node:` for node packages ([#3608](https://github.com/algolia/api-clients-automation/pull/3608)) by [@atinux](https://github.com/atinux/) + +## [5.2.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.2.0...5.2.1) + +- [41f849e41](https://github.com/algolia/api-clients-automation/commit/41f849e41) fix(specs): partial update operation ([#3486](https://github.com/algolia/api-clients-automation/pull/3486)) by [@kai687](https://github.com/kai687/) + +## [5.2.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.1.1...5.2.0) + +- [23a799f0e](https://github.com/algolia/api-clients-automation/commit/23a799f0e) feat(specs): push source type ([#3600](https://github.com/algolia/api-clients-automation/pull/3600)) by [@shortcuts](https://github.com/shortcuts/) +- [536fdef01](https://github.com/algolia/api-clients-automation/commit/536fdef01) fix(specs): filter run list by type ([#3577](https://github.com/algolia/api-clients-automation/pull/3577)) by [@millotp](https://github.com/millotp/) +- [9b6dc0b70](https://github.com/algolia/api-clients-automation/commit/9b6dc0b70) docs(specs): update api's length minimum value ([#3574](https://github.com/algolia/api-clients-automation/pull/3574)) by [@Jerska](https://github.com/Jerska/) + +## [5.1.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.1.0...5.1.1) + +- [4cbbce55c](https://github.com/algolia/api-clients-automation/commit/4cbbce55c) fix(clients): highlight and snippet results e2e ([#3567](https://github.com/algolia/api-clients-automation/pull/3567)) by [@shortcuts](https://github.com/shortcuts/) +- [7c7de04ab](https://github.com/algolia/api-clients-automation/commit/7c7de04ab) fix(specs): another wrong link ([#3570](https://github.com/algolia/api-clients-automation/pull/3570)) by [@kai687](https://github.com/kai687/) +- [f38a9ef12](https://github.com/algolia/api-clients-automation/commit/f38a9ef12) chore(specs): breaking change method names mapping table ([#3568](https://github.com/algolia/api-clients-automation/pull/3568)) by [@shortcuts](https://github.com/shortcuts/) +- [73868d60e](https://github.com/algolia/api-clients-automation/commit/73868d60e) fix(javascript): exports type field ([#3569](https://github.com/algolia/api-clients-automation/pull/3569)) by [@shortcuts](https://github.com/shortcuts/) +- [9dedfc90f](https://github.com/algolia/api-clients-automation/commit/9dedfc90f) fix(clients): mention `main` branch instead of `master` ([#3566](https://github.com/algolia/api-clients-automation/pull/3566)) by [@shortcuts](https://github.com/shortcuts/) +- [0e5ffb1e8](https://github.com/algolia/api-clients-automation/commit/0e5ffb1e8) fix(specs): broken link ([#3559](https://github.com/algolia/api-clients-automation/pull/3559)) by [@kai687](https://github.com/kai687/) + +## [5.1.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.2...5.1.0) + +- [c8343884e](https://github.com/algolia/api-clients-automation/commit/c8343884e) feat(javascript): add search wrappers to lite client ([#3556](https://github.com/algolia/api-clients-automation/pull/3556)) by [@shortcuts](https://github.com/shortcuts/) +- [d53060d96](https://github.com/algolia/api-clients-automation/commit/d53060d96) feat(specs): add /schedule endpoint ([#3350](https://github.com/algolia/api-clients-automation/pull/3350)) by [@febeck](https://github.com/febeck/) + +## [5.0.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.1...5.0.2) + +- [6cfc2d479](https://github.com/algolia/api-clients-automation/commit/6cfc2d479) chore(specs): update rendered title for search params ([#3553](https://github.com/algolia/api-clients-automation/pull/3553)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0...5.0.1) + +- [40c5d47bd](https://github.com/algolia/api-clients-automation/commit/40c5d47bd) fix(specs): delete user token processing time ([#3525](https://github.com/algolia/api-clients-automation/pull/3525)) by [@kai687](https://github.com/kai687/) + +## [5.0.0](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.18...5.0.0) + +New major version released! Browse [our documentation](https://www.algolia.com/doc/libraries/javascript) + +- [22348001a](https://github.com/algolia/api-clients-automation/commit/22348001a) fix(specs): required ingestion search params ([#3516](https://github.com/algolia/api-clients-automation/pull/3516)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-beta.18](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.17...5.0.0-beta.18) + +- [4c052002e](https://github.com/algolia/api-clients-automation/commit/4c052002e) feat(specs): recursive snippets and highlights result ([#3497](https://github.com/algolia/api-clients-automation/pull/3497)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-beta.17](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.16...5.0.0-beta.17) + +- [7d2ab99ce](https://github.com/algolia/api-clients-automation/commit/7d2ab99ce) feat(specs): add authentications to ingestion transformations ([#3494](https://github.com/algolia/api-clients-automation/pull/3494)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-beta.16](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.15...5.0.0-beta.16) + +- [2c6147ee7](https://github.com/algolia/api-clients-automation/commit/2c6147ee7) feat(specs): add generate code endpoint to ingestion specs ([#3489](https://github.com/algolia/api-clients-automation/pull/3489)) by [@shortcuts](https://github.com/shortcuts/) +- [6c62a81a7](https://github.com/algolia/api-clients-automation/commit/6c62a81a7) fix(specs): ingestion docker task input ([#3488](https://github.com/algolia/api-clients-automation/pull/3488)) by [@shortcuts](https://github.com/shortcuts/) +- [eab2887f8](https://github.com/algolia/api-clients-automation/commit/eab2887f8) fix(specs): ingestion search endpoint ([#3487](https://github.com/algolia/api-clients-automation/pull/3487)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-beta.15](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.14...5.0.0-beta.15) + +- [ac0cadb8a](https://github.com/algolia/api-clients-automation/commit/ac0cadb8a) feat(specs): add transformation copilot to ingestion ([#3479](https://github.com/algolia/api-clients-automation/pull/3479)) by [@Fluf22](https://github.com/Fluf22/) +- [08a04dec8](https://github.com/algolia/api-clients-automation/commit/08a04dec8) fix(specs): ingestion destination reject indexPrefix ([#3478](https://github.com/algolia/api-clients-automation/pull/3478)) by [@shortcuts](https://github.com/shortcuts/) +- [cdd673d33](https://github.com/algolia/api-clients-automation/commit/cdd673d33) fix(specs): ingestion destinations and transformations ([#3477](https://github.com/algolia/api-clients-automation/pull/3477)) by [@shortcuts](https://github.com/shortcuts/) +- [b4742be76](https://github.com/algolia/api-clients-automation/commit/b4742be76) fix(clients): move the license to the root ([#3457](https://github.com/algolia/api-clients-automation/pull/3457)) by [@millotp](https://github.com/millotp/) +- [e5d14171c](https://github.com/algolia/api-clients-automation/commit/e5d14171c) fix(specs): dictionary entry for stopwords has type property ([#3456](https://github.com/algolia/api-clients-automation/pull/3456)) by [@kai687](https://github.com/kai687/) +- [7af1e75e9](https://github.com/algolia/api-clients-automation/commit/7af1e75e9) fix(specs): body is not required in multiple batch request ([#3454](https://github.com/algolia/api-clients-automation/pull/3454)) by [@kai687](https://github.com/kai687/) +- [b90bef261](https://github.com/algolia/api-clients-automation/commit/b90bef261) feat(specs): add runSource endpoint ([#3453](https://github.com/algolia/api-clients-automation/pull/3453)) by [@millotp](https://github.com/millotp/) +- [27679b7fd](https://github.com/algolia/api-clients-automation/commit/27679b7fd) chore(clients): remove mention of GA ([#3452](https://github.com/algolia/api-clients-automation/pull/3452)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-beta.14](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.13...5.0.0-beta.14) + +- [e982ddf0a](https://github.com/algolia/api-clients-automation/commit/e982ddf0a) fix(specs): built-in ops accept also int ([#3450](https://github.com/algolia/api-clients-automation/pull/3450)) by [@kai687](https://github.com/kai687/) +- [9a2e7a837](https://github.com/algolia/api-clients-automation/commit/9a2e7a837) fix(specs): required prop for dictionaryEntry ([#3449](https://github.com/algolia/api-clients-automation/pull/3449)) by [@kai687](https://github.com/kai687/) +- [41d86ce68](https://github.com/algolia/api-clients-automation/commit/41d86ce68) feat(clients): delete unused models ([#3445](https://github.com/algolia/api-clients-automation/pull/3445)) by [@millotp](https://github.com/millotp/) +- [e17970142](https://github.com/algolia/api-clients-automation/commit/e17970142) fix(specs): proper title with linter ([#3444](https://github.com/algolia/api-clients-automation/pull/3444)) by [@millotp](https://github.com/millotp/) +- [8fbbd5ebd](https://github.com/algolia/api-clients-automation/commit/8fbbd5ebd) fix(specs): getObject return object ([#3446](https://github.com/algolia/api-clients-automation/pull/3446)) by [@millotp](https://github.com/millotp/) +- [a35e814ab](https://github.com/algolia/api-clients-automation/commit/a35e814ab) fix(specs): clarify decompounding limitations ([#3227](https://github.com/algolia/api-clients-automation/pull/3227)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-beta.13](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.12...5.0.0-beta.13) + +- [3ec5f5f7e](https://github.com/algolia/api-clients-automation/commit/3ec5f5f7e) feat(specs): add v2 endpoints for ingestion ([#3416](https://github.com/algolia/api-clients-automation/pull/3416)) by [@shortcuts](https://github.com/shortcuts/) +- [200f07e9c](https://github.com/algolia/api-clients-automation/commit/200f07e9c) fix(specs): add primary to get settings response ([#3415](https://github.com/algolia/api-clients-automation/pull/3415)) by [@kai687](https://github.com/kai687/) +- [81c15cf5b](https://github.com/algolia/api-clients-automation/commit/81c15cf5b) chore(specs): add eslint rule to avoid cross-references ([#3413](https://github.com/algolia/api-clients-automation/pull/3413)) by [@millotp](https://github.com/millotp/) +- [be060a060](https://github.com/algolia/api-clients-automation/commit/be060a060) fix(specs): remove cross-references of analytics ([#3414](https://github.com/algolia/api-clients-automation/pull/3414)) by [@millotp](https://github.com/millotp/) +- [fe6f5edab](https://github.com/algolia/api-clients-automation/commit/fe6f5edab) feat(specs): add v2 endpoints for ingestion ([#3410](https://github.com/algolia/api-clients-automation/pull/3410)) by [@shortcuts](https://github.com/shortcuts/) +- [e3c6b8401](https://github.com/algolia/api-clients-automation/commit/e3c6b8401) fix(specs): remove cross-specs references ([#3412](https://github.com/algolia/api-clients-automation/pull/3412)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-beta.12](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.11...5.0.0-beta.12) + +- [280037178](https://github.com/algolia/api-clients-automation/commit/280037178) fix(specs): update shopify feature flags ([#3380](https://github.com/algolia/api-clients-automation/pull/3380)) by [@millotp](https://github.com/millotp/) +- [a68907d1c](https://github.com/algolia/api-clients-automation/commit/a68907d1c) feat(clients): add api key helper test ([#3338](https://github.com/algolia/api-clients-automation/pull/3338)) by [@Fluf22](https://github.com/Fluf22/) +- [31ba7f6d0](https://github.com/algolia/api-clients-automation/commit/31ba7f6d0) fix(specs): recommend non required parameters ([#3355](https://github.com/algolia/api-clients-automation/pull/3355)) by [@shortcuts](https://github.com/shortcuts/) +- [337eea93e](https://github.com/algolia/api-clients-automation/commit/337eea93e) fix(specs): results is required in GetRecommendationsResponse ([#3357](https://github.com/algolia/api-clients-automation/pull/3357)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-beta.11](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.10...5.0.0-beta.11) + +- [a009967f6](https://github.com/algolia/api-clients-automation/commit/a009967f6) fix(specs): browse response required properties ([#3348](https://github.com/algolia/api-clients-automation/pull/3348)) by [@millotp](https://github.com/millotp/) +- [04a799417](https://github.com/algolia/api-clients-automation/commit/04a799417) fix(specs): ingestion task and transformation ([#3347](https://github.com/algolia/api-clients-automation/pull/3347)) by [@shortcuts](https://github.com/shortcuts/) +- [dcb1b59dc](https://github.com/algolia/api-clients-automation/commit/dcb1b59dc) fix(specs): clarify browse parameters ([#3333](https://github.com/algolia/api-clients-automation/pull/3333)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-beta.10](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.9...5.0.0-beta.10) + +- [d82229de0](https://github.com/algolia/api-clients-automation/commit/d82229de0) chore(javascript): nx cache lock ([#3327](https://github.com/algolia/api-clients-automation/pull/3327)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-beta.9](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.8...5.0.0-beta.9) + +- [9776cb3ba](https://github.com/algolia/api-clients-automation/commit/9776cb3ba) feat(specs): add redirect to renderingContent ([#3296](https://github.com/algolia/api-clients-automation/pull/3296)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-beta.8](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.7...5.0.0-beta.8) + +- [8e98407c1](https://github.com/algolia/api-clients-automation/commit/8e98407c1) fix(clients): update ingestion transformations description and fix taggroups ([#3265](https://github.com/algolia/api-clients-automation/pull/3265)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-beta.7](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.6...5.0.0-beta.7) + +- [e5cfcf0c4](https://github.com/algolia/api-clients-automation/commit/e5cfcf0c4) feat(clients): generate common LICENSE ([#3258](https://github.com/algolia/api-clients-automation/pull/3258)) by [@shortcuts](https://github.com/shortcuts/) +- [47dd4bb5b](https://github.com/algolia/api-clients-automation/commit/47dd4bb5b) fix(clients): update README snippets and contributing guides ([#3257](https://github.com/algolia/api-clients-automation/pull/3257)) by [@shortcuts](https://github.com/shortcuts/) +- [7a90e4532](https://github.com/algolia/api-clients-automation/commit/7a90e4532) feat(clients): add `saveObjects`, `deleteObjects` and `partialUpdateObjects` helpers ([#3180](https://github.com/algolia/api-clients-automation/pull/3180)) by [@shortcuts](https://github.com/shortcuts/) +- [5dbdb91e9](https://github.com/algolia/api-clients-automation/commit/5dbdb91e9) fix(specs): virtual is a fetchedIndex props ([#3255](https://github.com/algolia/api-clients-automation/pull/3255)) by [@shortcuts](https://github.com/shortcuts/) +- [0a6277937](https://github.com/algolia/api-clients-automation/commit/0a6277937) fix(specs): add virtual index settings and update renderingContent ([#3254](https://github.com/algolia/api-clients-automation/pull/3254)) by [@shortcuts](https://github.com/shortcuts/) +- [536a348f1](https://github.com/algolia/api-clients-automation/commit/536a348f1) fix(clients): chunked batch helper size property consistency ([#3253](https://github.com/algolia/api-clients-automation/pull/3253)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-beta.6](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.5...5.0.0-beta.6) + +- [632827bef](https://github.com/algolia/api-clients-automation/commit/632827bef) feat(javascript): legacy `getRecommendations` signature ([#3241](https://github.com/algolia/api-clients-automation/pull/3241)) by [@aymeric-giraudet](https://github.com/aymeric-giraudet/) +- [07e074806](https://github.com/algolia/api-clients-automation/commit/07e074806) feat(clients): add recommend to algoliasearch ([#2860](https://github.com/algolia/api-clients-automation/pull/2860)) by [@shortcuts](https://github.com/shortcuts/) +- [683ecb979](https://github.com/algolia/api-clients-automation/commit/683ecb979) fix(javascript): deprecated publish options ([#3220](https://github.com/algolia/api-clients-automation/pull/3220)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-beta.5](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.4...5.0.0-beta.5) + +- [b7ae19f2b](https://github.com/algolia/api-clients-automation/commit/b7ae19f2b) feat(specs): add transformations endpoints to ingestion ([#3215](https://github.com/algolia/api-clients-automation/pull/3215)) by [@shortcuts](https://github.com/shortcuts/) +- [a99f796dd](https://github.com/algolia/api-clients-automation/commit/a99f796dd) fix(specs): update discover endpoint ([#3212](https://github.com/algolia/api-clients-automation/pull/3212)) by [@shortcuts](https://github.com/shortcuts/) +- [c91ca54f2](https://github.com/algolia/api-clients-automation/commit/c91ca54f2) feat(specs): add validate endpoint ([#3087](https://github.com/algolia/api-clients-automation/pull/3087)) by [@Fluf22](https://github.com/Fluf22/) +- [36aababfd](https://github.com/algolia/api-clients-automation/commit/36aababfd) chore(clients): use the ruff python formatter ([#3204](https://github.com/algolia/api-clients-automation/pull/3204)) by [@millotp](https://github.com/millotp/) +- [9ad5c8cae](https://github.com/algolia/api-clients-automation/commit/9ad5c8cae) fix(clients): reduce common tests flakyness ([#3205](https://github.com/algolia/api-clients-automation/pull/3205)) by [@millotp](https://github.com/millotp/) +- [fc1752b6e](https://github.com/algolia/api-clients-automation/commit/fc1752b6e) feat(clients): add chunkedBatch helper for Kotlin and Scala ([#3206](https://github.com/algolia/api-clients-automation/pull/3206)) by [@Fluf22](https://github.com/Fluf22/) +- [a58e88322](https://github.com/algolia/api-clients-automation/commit/a58e88322) feat(clients): add generateSecuredApiKey to java ([#3167](https://github.com/algolia/api-clients-automation/pull/3167)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-beta.4](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.3...5.0.0-beta.4) + +- [b2a464a2b](https://github.com/algolia/api-clients-automation/commit/b2a464a2b) feat(clients): add generate_secured_api_key to ruby ([#3166](https://github.com/algolia/api-clients-automation/pull/3166)) by [@millotp](https://github.com/millotp/) +- [de4090789](https://github.com/algolia/api-clients-automation/commit/de4090789) fix(clients): safer replaceAllObjects + metis compliant ([#3164](https://github.com/algolia/api-clients-automation/pull/3164)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-beta.3](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.2...5.0.0-beta.3) + +- [072c38b9a](https://github.com/algolia/api-clients-automation/commit/072c38b9a) fix(clients): remove unused models from lite clients ([#3159](https://github.com/algolia/api-clients-automation/pull/3159)) by [@shortcuts](https://github.com/shortcuts/) +- [c7f5de9d4](https://github.com/algolia/api-clients-automation/commit/c7f5de9d4) feat(clients): add waitForAppTask helper ([#3158](https://github.com/algolia/api-clients-automation/pull/3158)) by [@millotp](https://github.com/millotp/) +- [3a97fad1f](https://github.com/algolia/api-clients-automation/commit/3a97fad1f) fix(clients): chunked batch helper ([#3154](https://github.com/algolia/api-clients-automation/pull/3154)) by [@shortcuts](https://github.com/shortcuts/) +- [c251dc87e](https://github.com/algolia/api-clients-automation/commit/c251dc87e) fix(specs): rankingInfo required properties ([#3157](https://github.com/algolia/api-clients-automation/pull/3157)) by [@millotp](https://github.com/millotp/) +- [fd5a312fb](https://github.com/algolia/api-clients-automation/commit/fd5a312fb) feat(specs): add getAppTask endpoint to search ([#3156](https://github.com/algolia/api-clients-automation/pull/3156)) by [@millotp](https://github.com/millotp/) +- [cdc866549](https://github.com/algolia/api-clients-automation/commit/cdc866549) fix(specs): dont mention index api keys ([#3117](https://github.com/algolia/api-clients-automation/pull/3117)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-beta.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.1...5.0.0-beta.2) + +- [2b70d9ea5](https://github.com/algolia/api-clients-automation/commit/2b70d9ea5) fix(specs): exhaustiveFacetsCount is not deprecated for sffv ([#3089](https://github.com/algolia/api-clients-automation/pull/3089)) by [@kai687](https://github.com/kai687/) +- [1250c2b3c](https://github.com/algolia/api-clients-automation/commit/1250c2b3c) fix(specs): simplify filter types ([#3042](https://github.com/algolia/api-clients-automation/pull/3042)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-beta.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-beta.0...5.0.0-beta.1) + +- [b621988bc](https://github.com/algolia/api-clients-automation/commit/b621988bc) feat(specs): promote @kai687 to code owner ([#3014](https://github.com/algolia/api-clients-automation/pull/3014)) by [@Fluf22](https://github.com/Fluf22/) +- [f9877a8ae](https://github.com/algolia/api-clients-automation/commit/f9877a8ae) fix(specs): remove periods on summaries ([#3013](https://github.com/algolia/api-clients-automation/pull/3013)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-alpha.114](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.113...5.0.0-alpha.114) + +- [96e620626](https://github.com/algolia/api-clients-automation/commit/96e620626) feat(javascript): allow custom connect timeout ([#3010](https://github.com/algolia/api-clients-automation/pull/3010)) by [@shortcuts](https://github.com/shortcuts/) +- [41121e77e](https://github.com/algolia/api-clients-automation/commit/41121e77e) fix(specs): attribute and index names case sensitive ([#2990](https://github.com/algolia/api-clients-automation/pull/2990)) by [@kai687](https://github.com/kai687/) +- [67b0eab89](https://github.com/algolia/api-clients-automation/commit/67b0eab89) feat(specs): update shopify source and task inputs ([#2987](https://github.com/algolia/api-clients-automation/pull/2987)) by [@Fluf22](https://github.com/Fluf22/) +- [60e8e6d68](https://github.com/algolia/api-clients-automation/commit/60e8e6d68) fix(specs): Personalization API ([#2982](https://github.com/algolia/api-clients-automation/pull/2982)) by [@kai687](https://github.com/kai687/) +- [60322c0b5](https://github.com/algolia/api-clients-automation/commit/60322c0b5) fix(specs): a/b testing ([#2981](https://github.com/algolia/api-clients-automation/pull/2981)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-alpha.113](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.112...5.0.0-alpha.113) + +- [dabdd0291](https://github.com/algolia/api-clients-automation/commit/dabdd0291) fix(specs): recommend api ([#2958](https://github.com/algolia/api-clients-automation/pull/2958)) by [@kai687](https://github.com/kai687/) +- [34e345d48](https://github.com/algolia/api-clients-automation/commit/34e345d48) fix(specs): update documentation for consistency ([#2976](https://github.com/algolia/api-clients-automation/pull/2976)) by [@kai687](https://github.com/kai687/) +- [aee3fde96](https://github.com/algolia/api-clients-automation/commit/aee3fde96) feat(clients): add `usage` client ([#2960](https://github.com/algolia/api-clients-automation/pull/2960)) by [@shortcuts](https://github.com/shortcuts/) +- [0348669d0](https://github.com/algolia/api-clients-automation/commit/0348669d0) feat(specs): add algoliaInsights auth type ([#2959](https://github.com/algolia/api-clients-automation/pull/2959)) by [@jkaho](https://github.com/jkaho/) +- [60e23f87a](https://github.com/algolia/api-clients-automation/commit/60e23f87a) fix(specs): usage api ([#2954](https://github.com/algolia/api-clients-automation/pull/2954)) by [@kai687](https://github.com/kai687/) +- [3e0d0dcc2](https://github.com/algolia/api-clients-automation/commit/3e0d0dcc2) fix(specs): crawler api ([#2949](https://github.com/algolia/api-clients-automation/pull/2949)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-alpha.112](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.111...5.0.0-alpha.112) + +- [10e08c9e7](https://github.com/algolia/api-clients-automation/commit/10e08c9e7) fix(specs): query suggestions api ([#2924](https://github.com/algolia/api-clients-automation/pull/2924)) by [@kai687](https://github.com/kai687/) +- [b153b397e](https://github.com/algolia/api-clients-automation/commit/b153b397e) fix(specs): ingestion api reference ([#2918](https://github.com/algolia/api-clients-automation/pull/2918)) by [@kai687](https://github.com/kai687/) +- [6c4519136](https://github.com/algolia/api-clients-automation/commit/6c4519136) fix(javascript): extra parameter in jsdoc def ([#2933](https://github.com/algolia/api-clients-automation/pull/2933)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.111](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.110...5.0.0-alpha.111) + +- [fd9256018](https://github.com/algolia/api-clients-automation/commit/fd9256018) chore(javascript): assert `authMode` ([#2897](https://github.com/algolia/api-clients-automation/pull/2897)) by [@shortcuts](https://github.com/shortcuts/) +- [10c9339c8](https://github.com/algolia/api-clients-automation/commit/10c9339c8) fix(specs): more flexible custom methods ([#2889](https://github.com/algolia/api-clients-automation/pull/2889)) by [@damcou](https://github.com/damcou/) + +## [5.0.0-alpha.110](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.109...5.0.0-alpha.110) + +- [7dc719cbe](https://github.com/algolia/api-clients-automation/commit/7dc719cbe) fix(specs): make languages an enum ([#2865](https://github.com/algolia/api-clients-automation/pull/2865)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-alpha.109](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.108...5.0.0-alpha.109) + +- [0f8d4432b](https://github.com/algolia/api-clients-automation/commit/0f8d4432b) feat(specs): insights api reference ([#2859](https://github.com/algolia/api-clients-automation/pull/2859)) by [@kai687](https://github.com/kai687/) +- [c324c06bd](https://github.com/algolia/api-clients-automation/commit/c324c06bd) feat(specs): add ga4BigqueryExport, streaming and append options to task inputs ([#2858](https://github.com/algolia/api-clients-automation/pull/2858)) by [@JasonBerry](https://github.com/JasonBerry/) +- [156fd9e69](https://github.com/algolia/api-clients-automation/commit/156fd9e69) feat(specs): improve API reference documentation ([#2831](https://github.com/algolia/api-clients-automation/pull/2831)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-alpha.108](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.107...5.0.0-alpha.108) + +- [234427491](https://github.com/algolia/api-clients-automation/commit/234427491) feat(specs): Add MappingInput to Task Inputs ([#2787](https://github.com/algolia/api-clients-automation/pull/2787)) by [@jsok](https://github.com/jsok/) +- [903852983](https://github.com/algolia/api-clients-automation/commit/903852983) fix(javascript): use correct vendor values ([#2829](https://github.com/algolia/api-clients-automation/pull/2829)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.107](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.106...5.0.0-alpha.107) + +- [9847affc4](https://github.com/algolia/api-clients-automation/commit/9847affc4) fix(javascript): move node related helpers at node bundle level ([#2807](https://github.com/algolia/api-clients-automation/pull/2807)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.106](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.105...5.0.0-alpha.106) + +- [a138c2fef](https://github.com/algolia/api-clients-automation/commit/a138c2fef) fix(specs): add `queryID` to search response ([#2801](https://github.com/algolia/api-clients-automation/pull/2801)) by [@aallam](https://github.com/aallam/) +- [6f0b00ead](https://github.com/algolia/api-clients-automation/commit/6f0b00ead) chore(specs): remove JSON specs and new worlds logic ([#2794](https://github.com/algolia/api-clients-automation/pull/2794)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.105](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.104...5.0.0-alpha.105) + +- [d48e2f624](https://github.com/algolia/api-clients-automation/commit/d48e2f624) fix(specs): add missing attributes for CT Source update ([#2792](https://github.com/algolia/api-clients-automation/pull/2792)) by [@damcou](https://github.com/damcou/) +- [cc10e9f8b](https://github.com/algolia/api-clients-automation/commit/cc10e9f8b) chore(javascript): assert `replaceAllObjects` ([#2790](https://github.com/algolia/api-clients-automation/pull/2790)) by [@shortcuts](https://github.com/shortcuts/) +- [b13782469](https://github.com/algolia/api-clients-automation/commit/b13782469) fix(javascript): allow `batchSize` on `ReplaceAllObjectsOptions` ([#2788](https://github.com/algolia/api-clients-automation/pull/2788)) by [@shortcuts](https://github.com/shortcuts/) +- [19177f7d6](https://github.com/algolia/api-clients-automation/commit/19177f7d6) feat(javascript): add `replaceAllObjects` ([#2768](https://github.com/algolia/api-clients-automation/pull/2768)) by [@shortcuts](https://github.com/shortcuts/) +- [350e01c98](https://github.com/algolia/api-clients-automation/commit/350e01c98) chore(javascript): broken tests ([#2767](https://github.com/algolia/api-clients-automation/pull/2767)) by [@shortcuts](https://github.com/shortcuts/) +- [1ef587f05](https://github.com/algolia/api-clients-automation/commit/1ef587f05) feat(javascript): add `getSecuredApiKey` and validity check ([#2766](https://github.com/algolia/api-clients-automation/pull/2766)) by [@shortcuts](https://github.com/shortcuts/) +- [f3e894002](https://github.com/algolia/api-clients-automation/commit/f3e894002) fix(clients): replace all objects ([#2762](https://github.com/algolia/api-clients-automation/pull/2762)) by [@shortcuts](https://github.com/shortcuts/) +- [92cd1c793](https://github.com/algolia/api-clients-automation/commit/92cd1c793) fix(clients): browse synonyms page not in response ([#2757](https://github.com/algolia/api-clients-automation/pull/2757)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.104](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.103...5.0.0-alpha.104) + +- [4f6e2d0b3](https://github.com/algolia/api-clients-automation/commit/4f6e2d0b3) fix(specs): allow custom fields to be nullable ([#2746](https://github.com/algolia/api-clients-automation/pull/2746)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.103](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.102...5.0.0-alpha.103) + +- [6624759e1](https://github.com/algolia/api-clients-automation/commit/6624759e1) feat(specs): add CustomFields to CT Source Input ([#2742](https://github.com/algolia/api-clients-automation/pull/2742)) by [@damcou](https://github.com/damcou/) +- [ef37e65b7](https://github.com/algolia/api-clients-automation/commit/ef37e65b7) fix(clients): add e2e tests for analytics API ([#2737](https://github.com/algolia/api-clients-automation/pull/2737)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-alpha.102](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.101...5.0.0-alpha.102) + +- [b3d61128a](https://github.com/algolia/api-clients-automation/commit/b3d61128a) docs(clients): add ACL section to code doc ([#2576](https://github.com/algolia/api-clients-automation/pull/2576)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-alpha.101](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.100...5.0.0-alpha.101) + +- [872ab29bf](https://github.com/algolia/api-clients-automation/commit/872ab29bf) feat(specs): update query suggestions unauthorized response example ([#2606](https://github.com/algolia/api-clients-automation/pull/2606)) by [@alphonseb](https://github.com/alphonseb/) +- [e569a3e23](https://github.com/algolia/api-clients-automation/commit/e569a3e23) feat(specs): add acls to API endpoints ([#2604](https://github.com/algolia/api-clients-automation/pull/2604)) by [@alphonseb](https://github.com/alphonseb/) + +## [5.0.0-alpha.100](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.99...5.0.0-alpha.100) + +- [379fbc501](https://github.com/algolia/api-clients-automation/commit/379fbc501) fix(specs): correct `searchSynonyms` parameters ([#2595](https://github.com/algolia/api-clients-automation/pull/2595)) by [@morganleroi](https://github.com/morganleroi/) +- [982fd3ca4](https://github.com/algolia/api-clients-automation/commit/982fd3ca4) feat(specs): import `crawler` and `usage` specs from new world repo ([#2598](https://github.com/algolia/api-clients-automation/pull/2598)) by [@shortcuts](https://github.com/shortcuts/) +- [9532a0136](https://github.com/algolia/api-clients-automation/commit/9532a0136) feat(specs): AB testing tracked user count ([#2596](https://github.com/algolia/api-clients-automation/pull/2596)) by [@cdhawke](https://github.com/cdhawke/) +- [2481e3ac8](https://github.com/algolia/api-clients-automation/commit/2481e3ac8) fix(clients): support the rest of the languages ([#2571](https://github.com/algolia/api-clients-automation/pull/2571)) by [@millotp](https://github.com/millotp/) +- [99ce6dbae](https://github.com/algolia/api-clients-automation/commit/99ce6dbae) fix(clients): monitoring for JavaScript and Python ([#2568](https://github.com/algolia/api-clients-automation/pull/2568)) by [@shortcuts](https://github.com/shortcuts/) +- [99e4bdf2c](https://github.com/algolia/api-clients-automation/commit/99e4bdf2c) feat(specs): add acl permissions to operations ([#2555](https://github.com/algolia/api-clients-automation/pull/2555)) by [@kai687](https://github.com/kai687/) +- [8b0622380](https://github.com/algolia/api-clients-automation/commit/8b0622380) fix(specs): rename clearAllSynonyms to clearSynonyms ([#2553](https://github.com/algolia/api-clients-automation/pull/2553)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-alpha.99](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.98...5.0.0-alpha.99) + +- [3d7c5e617](https://github.com/algolia/api-clients-automation/commit/3d7c5e617) fix(javascript): lock ([#2548](https://github.com/algolia/api-clients-automation/pull/2548)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.98](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.97...5.0.0-alpha.98) + +- [7c5ba3288](https://github.com/algolia/api-clients-automation/commit/7c5ba3288) feat(specs): update Insights API spec ([#2376](https://github.com/algolia/api-clients-automation/pull/2376)) by [@kai687](https://github.com/kai687/) +- [297baa987](https://github.com/algolia/api-clients-automation/commit/297baa987) chore(clients): provide snippets for all languages ([#2518](https://github.com/algolia/api-clients-automation/pull/2518)) by [@shortcuts](https://github.com/shortcuts/) +- [857f3632e](https://github.com/algolia/api-clients-automation/commit/857f3632e) feat(clients): generate code snippets from cts ([#2511](https://github.com/algolia/api-clients-automation/pull/2511)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.97](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.96...5.0.0-alpha.97) + +- [ae20258c6](https://github.com/algolia/api-clients-automation/commit/ae20258c6) feat(clients): deserialize in e2e and SFFV response ([#2500](https://github.com/algolia/api-clients-automation/pull/2500)) by [@shortcuts](https://github.com/shortcuts/) +- [4dc28da98](https://github.com/algolia/api-clients-automation/commit/4dc28da98) chore(clients): add more e2e ([#2497](https://github.com/algolia/api-clients-automation/pull/2497)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.96](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.95...5.0.0-alpha.96) + +- [461796bb7](https://github.com/algolia/api-clients-automation/commit/461796bb7) feat(clients): add missing clients ([#2479](https://github.com/algolia/api-clients-automation/pull/2479)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.95](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.94...5.0.0-alpha.95) + +- [ae6adfbf7](https://github.com/algolia/api-clients-automation/commit/ae6adfbf7) fix(specs): port recommend changes ([#2476](https://github.com/algolia/api-clients-automation/pull/2476)) by [@shortcuts](https://github.com/shortcuts/) +- [4546090b2](https://github.com/algolia/api-clients-automation/commit/4546090b2) feat(javascript): add cache TTL and fix support message ([#2474](https://github.com/algolia/api-clients-automation/pull/2474)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.94](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.93...5.0.0-alpha.94) + +- [ae80c666c](https://github.com/algolia/api-clients-automation/commit/ae80c666c) chore(javascript): remove some non needed props from generators ([#2412](https://github.com/algolia/api-clients-automation/pull/2412)) by [@shortcuts](https://github.com/shortcuts/) +- [8d71c2b69](https://github.com/algolia/api-clients-automation/commit/8d71c2b69) fix(specs): provide non clashing names for custom methods ([#2369](https://github.com/algolia/api-clients-automation/pull/2369)) by [@shortcuts](https://github.com/shortcuts/) +- [205519c6f](https://github.com/algolia/api-clients-automation/commit/205519c6f) fix(specs): highlight result map definition ([#2312](https://github.com/algolia/api-clients-automation/pull/2312)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.93](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.92...5.0.0-alpha.93) + +- [5a7a8aeb4](https://github.com/algolia/api-clients-automation/commit/5a7a8aeb4) chore(specs): publish docs specs ([#2255](https://github.com/algolia/api-clients-automation/pull/2255)) by [@shortcuts](https://github.com/shortcuts/) +- [c2e9fb52c](https://github.com/algolia/api-clients-automation/commit/c2e9fb52c) feat(specs): add `startDate` and `endDate` query parameter to list events ([#2229](https://github.com/algolia/api-clients-automation/pull/2229)) by [@shortcuts](https://github.com/shortcuts/) +- [472dc87c4](https://github.com/algolia/api-clients-automation/commit/472dc87c4) fix(specs): require `window` in list runs ([#2226](https://github.com/algolia/api-clients-automation/pull/2226)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.92](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.91...5.0.0-alpha.92) + +- [15b81fe64](https://github.com/algolia/api-clients-automation/commit/15b81fe64) feat(specs): add `window` parameter to observability responses ([#2223](https://github.com/algolia/api-clients-automation/pull/2223)) by [@shortcuts](https://github.com/shortcuts/) +- [54fb30d53](https://github.com/algolia/api-clients-automation/commit/54fb30d53) chore(specs): lint --fix on pre-commit ([#2224](https://github.com/algolia/api-clients-automation/pull/2224)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-alpha.91](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.90...5.0.0-alpha.91) + +- [ebc2a0c4d](https://github.com/algolia/api-clients-automation/commit/ebc2a0c4d) chore(specs): remove unused spec file ([#2186](https://github.com/algolia/api-clients-automation/pull/2186)) by [@shortcuts](https://github.com/shortcuts/) +- [6fa5a402e](https://github.com/algolia/api-clients-automation/commit/6fa5a402e) fix(javascript): algoliaseach bundling ([#2185](https://github.com/algolia/api-clients-automation/pull/2185)) by [@millotp](https://github.com/millotp/) +- [517f9cb72](https://github.com/algolia/api-clients-automation/commit/517f9cb72) revert(specs): insights identify ([#2182](https://github.com/algolia/api-clients-automation/pull/2182)) by [@aallam](https://github.com/aallam/) +- [fa326a50e](https://github.com/algolia/api-clients-automation/commit/fa326a50e) feat(specs): add `authenticatedUserToken` and `Identify` to insights ([#2151](https://github.com/algolia/api-clients-automation/pull/2151)) by [@aallam](https://github.com/aallam/) + +## [5.0.0-alpha.90](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.89...5.0.0-alpha.90) + +- [d25921cb](https://github.com/algolia/api-clients-automation/commit/d25921cb) fix(specs): Change trigger input for task update ([#2147](https://github.com/algolia/api-clients-automation/pull/2147)) by [@damcou](https://github.com/damcou/) +- [4befd83a](https://github.com/algolia/api-clients-automation/commit/4befd83a) feat(javascript): add `searchForHits` and `searchForFacets` helpers ([#2138](https://github.com/algolia/api-clients-automation/pull/2138)) by [@shortcuts](https://github.com/shortcuts/) +- [dcd1201e](https://github.com/algolia/api-clients-automation/commit/dcd1201e) feat(specs): Add `failureThreshold` to `Task` and `TaskUpdate` types ([#2144](https://github.com/algolia/api-clients-automation/pull/2144)) by [@damcou](https://github.com/damcou/) +- [a5ff0a76](https://github.com/algolia/api-clients-automation/commit/a5ff0a76) fix(specs): remove duplicate objectID ([#2113](https://github.com/algolia/api-clients-automation/pull/2113)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-alpha.89](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.88...5.0.0-alpha.89) + +- [b5ec54151](https://github.com/algolia/api-clients-automation/commit/b5ec54151) feat(specs): revenue and filterEffects typing updates ([#2105](https://github.com/algolia/api-clients-automation/pull/2105)) by [@cdhawke](https://github.com/cdhawke/) + +## [5.0.0-alpha.88](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.87...5.0.0-alpha.88) + +- [2c58deae3](https://github.com/algolia/api-clients-automation/commit/2c58deae3) fix(javascript): release process ([#2106](https://github.com/algolia/api-clients-automation/pull/2106)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.87](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.86...5.0.0-alpha.87) + +- [e3b7e2ab6](https://github.com/algolia/api-clients-automation/commit/e3b7e2ab6) feat(specs): synchronize specs for all client ([#2103](https://github.com/algolia/api-clients-automation/pull/2103)) by [@Fluf22](https://github.com/Fluf22/) +- [b31ce2c9f](https://github.com/algolia/api-clients-automation/commit/b31ce2c9f) feat(javascript): add discover handlers to source model ([#2096](https://github.com/algolia/api-clients-automation/pull/2096)) by [@Fluf22](https://github.com/Fluf22/) +- [d039c7dc7](https://github.com/algolia/api-clients-automation/commit/d039c7dc7) feat(javascript): handle run discover type ([#2101](https://github.com/algolia/api-clients-automation/pull/2101)) by [@Fluf22](https://github.com/Fluf22/) +- [f8e79a1e2](https://github.com/algolia/api-clients-automation/commit/f8e79a1e2) fix(specs): search `insideBoundingBox` type ([#2098](https://github.com/algolia/api-clients-automation/pull/2098)) by [@aallam](https://github.com/aallam/) +- [d38619103](https://github.com/algolia/api-clients-automation/commit/d38619103) feat(specs): add new events type for insights ([#2080](https://github.com/algolia/api-clients-automation/pull/2080)) by [@millotp](https://github.com/millotp/) +- [756f19ab7](https://github.com/algolia/api-clients-automation/commit/756f19ab7) feat(specs): Remove attributeForDistinct from the indexSettingsAsSearc… ([#2078](https://github.com/algolia/api-clients-automation/pull/2078)) by [@clemfromspace](https://github.com/clemfromspace/) + +## [5.0.0-alpha.86](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.85...5.0.0-alpha.86) + +- [2260e903f](https://github.com/algolia/api-clients-automation/commit/2260e903f) feat(specs): add `attributesToExclude` for Ingestion ([#2053](https://github.com/algolia/api-clients-automation/pull/2053)) by [@shortcuts](https://github.com/shortcuts/) +- [b7b6565ab](https://github.com/algolia/api-clients-automation/commit/b7b6565ab) fix(specs): `userData` type as 'any' ([#2033](https://github.com/algolia/api-clients-automation/pull/2033)) by [@aallam](https://github.com/aallam/) + +## [5.0.0-alpha.85](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.84...5.0.0-alpha.85) + +- [bf8dee8fd](https://github.com/algolia/api-clients-automation/commit/bf8dee8fd) feat(javascript): add partial task action type ([#2034](https://github.com/algolia/api-clients-automation/pull/2034)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.84](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.83...5.0.0-alpha.84) + +- [28c1a2118](https://github.com/algolia/api-clients-automation/commit/28c1a2118) feat(javascript): add batchSize to the observability event object ([#2029](https://github.com/algolia/api-clients-automation/pull/2029)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.83](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.82...5.0.0-alpha.83) + +- [265518125](https://github.com/algolia/api-clients-automation/commit/265518125) fix(specs): `exhaustiveNbHits` as optional ([#2007](https://github.com/algolia/api-clients-automation/pull/2007)) by [@aallam](https://github.com/aallam/) +- [e73b9cf52](https://github.com/algolia/api-clients-automation/commit/e73b9cf52) fix(specs): introduced SourceUpdateDocker ([#2005](https://github.com/algolia/api-clients-automation/pull/2005)) by [@Fluf22](https://github.com/Fluf22/) +- [02ca9f694](https://github.com/algolia/api-clients-automation/commit/02ca9f694) fix(specs): add 'critical' event status to enum ([#2006](https://github.com/algolia/api-clients-automation/pull/2006)) by [@Fluf22](https://github.com/Fluf22/) +- [48b23af07](https://github.com/algolia/api-clients-automation/commit/48b23af07) fix(clients): userToken max length ([#2004](https://github.com/algolia/api-clients-automation/pull/2004)) by [@kai687](https://github.com/kai687/) +- [964962605](https://github.com/algolia/api-clients-automation/commit/964962605) fix(clients): user token character limit ([#2003](https://github.com/algolia/api-clients-automation/pull/2003)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-alpha.82](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.81...5.0.0-alpha.82) + +- [24affb264](https://github.com/algolia/api-clients-automation/commit/24affb264) feat(specs): add `recordType` and `fallbackIsInStockValue` in inputs ([#1988](https://github.com/algolia/api-clients-automation/pull/1988)) by [@damcou](https://github.com/damcou/) +- [fb5fdaaa2](https://github.com/algolia/api-clients-automation/commit/fb5fdaaa2) feat(javascript): remove unused property ([#1987](https://github.com/algolia/api-clients-automation/pull/1987)) by [@Fluf22](https://github.com/Fluf22/) +- [1381b70ff](https://github.com/algolia/api-clients-automation/commit/1381b70ff) feat(specs): add inference ACL to API key object ([#1985](https://github.com/algolia/api-clients-automation/pull/1985)) by [@helenamariano](https://github.com/helenamariano/) +- [028bf073b](https://github.com/algolia/api-clients-automation/commit/028bf073b) feat(specs): add `failureThreshold` to Ingestion API ([#1962](https://github.com/algolia/api-clients-automation/pull/1962)) by [@shortcuts](https://github.com/shortcuts/) +- [b19273392](https://github.com/algolia/api-clients-automation/commit/b19273392) feat(specs): update ingestion specs for BigCommerce ([#1961](https://github.com/algolia/api-clients-automation/pull/1961)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.81](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.80...5.0.0-alpha.81) + +- [f89612fe](https://github.com/algolia/api-clients-automation/commit/f89612fe) chore(clients): dependency upgrade ([#1940](https://github.com/algolia/api-clients-automation/pull/1940)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.80](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.79...5.0.0-alpha.80) + +- [693631cc7](https://github.com/algolia/api-clients-automation/commit/693631cc7) fix(specs): remove some parameters from trending requests ([#1915](https://github.com/algolia/api-clients-automation/pull/1915)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.79](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.78...5.0.0-alpha.79) + +- [d434431d1](https://github.com/algolia/api-clients-automation/commit/d434431d1) fix(javascript): move `cjs.js` to `cjs` ([#1894](https://github.com/algolia/api-clients-automation/pull/1894)) by [@shortcuts](https://github.com/shortcuts/) +- [5a9d949db](https://github.com/algolia/api-clients-automation/commit/5a9d949db) fix(specs): mixed `SearchParams` and `IndexSettings` ([#1889](https://github.com/algolia/api-clients-automation/pull/1889)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.77](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.76...5.0.0-alpha.77) + +- [82d7dcf5a](https://github.com/algolia/api-clients-automation/commit/82d7dcf5a) fix(specs): allow JSON array for `aroundPrecision` ([#1855](https://github.com/algolia/api-clients-automation/pull/1855)) by [@shortcuts](https://github.com/shortcuts/) +- [c6a7ab404](https://github.com/algolia/api-clients-automation/commit/c6a7ab404) fix(specs): optional/required `query` and `params` ([#1864](https://github.com/algolia/api-clients-automation/pull/1864)) by [@aallam](https://github.com/aallam/) +- [a5bf6232c](https://github.com/algolia/api-clients-automation/commit/a5bf6232c) feat(specs): delete Predict ([#1860](https://github.com/algolia/api-clients-automation/pull/1860)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.76](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.75...5.0.0-alpha.76) + +- [58ea5dbf](https://github.com/algolia/api-clients-automation/commit/58ea5dbf) fix(specs): allow partial input update for authentications ([#1856](https://github.com/algolia/api-clients-automation/pull/1856)) by [@Fluf22](https://github.com/Fluf22/) +- [2ac508ff](https://github.com/algolia/api-clients-automation/commit/2ac508ff) fix(specs): search w/ hits & facets responses ([#1774](https://github.com/algolia/api-clients-automation/pull/1774)) by [@aallam](https://github.com/aallam/) + +## [5.0.0-alpha.75](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.74...5.0.0-alpha.75) + +- [96ab1c384](https://github.com/algolia/api-clients-automation/commit/96ab1c384) fix(javascript): publish script esm ([#1787](https://github.com/algolia/api-clients-automation/pull/1787)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.74](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.73...5.0.0-alpha.74) + +- [333368a3b](https://github.com/algolia/api-clients-automation/commit/333368a3b) feat(specs): query suggestions ([#1740](https://github.com/algolia/api-clients-automation/pull/1740)) by [@kai687](https://github.com/kai687/) +- [f15457fd1](https://github.com/algolia/api-clients-automation/commit/f15457fd1) feat(specs): Review OpenAPI common specs ([#1692](https://github.com/algolia/api-clients-automation/pull/1692)) by [@gazconroy](https://github.com/gazconroy/) +- [550313a8b](https://github.com/algolia/api-clients-automation/commit/550313a8b) fix(javascript): allow package.json to be pushed ([#1781](https://github.com/algolia/api-clients-automation/pull/1781)) by [@shortcuts](https://github.com/shortcuts/) +- [d97511a66](https://github.com/algolia/api-clients-automation/commit/d97511a66) fix(javascript): release process ([#1779](https://github.com/algolia/api-clients-automation/pull/1779)) by [@shortcuts](https://github.com/shortcuts/) +- [8765f6d47](https://github.com/algolia/api-clients-automation/commit/8765f6d47) feat(specs): add OpenAPI spec for Monitoring API ([#1683](https://github.com/algolia/api-clients-automation/pull/1683)) by [@kai687](https://github.com/kai687/) +- [dc0ff048a](https://github.com/algolia/api-clients-automation/commit/dc0ff048a) fix(specs): facet stats properties as double ([#1694](https://github.com/algolia/api-clients-automation/pull/1694)) by [@aallam](https://github.com/aallam/) +- [7250930c7](https://github.com/algolia/api-clients-automation/commit/7250930c7) fix(specs): add input to authentication list ([#1688](https://github.com/algolia/api-clients-automation/pull/1688)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-alpha.73](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.72...5.0.0-alpha.73) + +- [15bc7618](https://github.com/algolia/api-clients-automation/commit/15bc7618) feat(specs): updated_at removed from Run response ([#1651](https://github.com/algolia/api-clients-automation/pull/1651)) by [@mehmetaligok](https://github.com/mehmetaligok/) +- [b7c71def](https://github.com/algolia/api-clients-automation/commit/b7c71def) feat(specs): add new outlier count properties to variant payload ([#1656](https://github.com/algolia/api-clients-automation/pull/1656)) by [@febeck](https://github.com/febeck/) +- [b703dea4](https://github.com/algolia/api-clients-automation/commit/b703dea4) docs(specs): review Insights API spec ([#1647](https://github.com/algolia/api-clients-automation/pull/1647)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-alpha.72](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.71...5.0.0-alpha.72) + +- [19e99bb9](https://github.com/algolia/api-clients-automation/commit/19e99bb9) fix(specs): change github container registry name ([#1641](https://github.com/algolia/api-clients-automation/pull/1641)) by [@morganleroi](https://github.com/morganleroi/) + +## [5.0.0-alpha.71](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.70...5.0.0-alpha.71) + +- [19e99bb9](https://github.com/algolia/api-clients-automation/commit/19e99bb9) fix(specs): change github container registry name ([#1641](https://github.com/algolia/api-clients-automation/pull/1641)) by [@morganleroi](https://github.com/morganleroi/) + +## [5.0.0-alpha.70](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.69...5.0.0-alpha.70) + +- [308c7ccb](https://github.com/algolia/api-clients-automation/commit/308c7ccb) fix(specs): add blocking to reasonCode instead of outcome ([#1622](https://github.com/algolia/api-clients-automation/pull/1622)) by [@damcou](https://github.com/damcou/) + +## [5.0.0-alpha.69](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.68...5.0.0-alpha.69) + +- [3cdb7495](https://github.com/algolia/api-clients-automation/commit/3cdb7495) fix(specs): add blocking run outcome ([#1619](https://github.com/algolia/api-clients-automation/pull/1619)) by [@damcou](https://github.com/damcou/) + +## [5.0.0-alpha.68](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.67...5.0.0-alpha.68) + +- [81401eed](https://github.com/algolia/api-clients-automation/commit/81401eed) feat(specs): add `startDate` and `endDate` parameters to Ingestion API ([#1614](https://github.com/algolia/api-clients-automation/pull/1614)) by [@shortcuts](https://github.com/shortcuts/) +- [138a35b5](https://github.com/algolia/api-clients-automation/commit/138a35b5) fix(specs): add processing run outcome ([#1613](https://github.com/algolia/api-clients-automation/pull/1613)) by [@millotp](https://github.com/millotp/) +- [31f1050a](https://github.com/algolia/api-clients-automation/commit/31f1050a) fix(javascript): waitForApiKey helper ([#1598](https://github.com/algolia/api-clients-automation/pull/1598)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.67](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.66...5.0.0-alpha.67) + +- [e1cb1c89](https://github.com/algolia/api-clients-automation/commit/e1cb1c89) fix(specs): add docker source input ([#1594](https://github.com/algolia/api-clients-automation/pull/1594)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-alpha.66](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.65...5.0.0-alpha.66) + +- [2a55abf5](https://github.com/algolia/api-clients-automation/commit/2a55abf5) feat(specs): add objectID to BQ source input ([#1575](https://github.com/algolia/api-clients-automation/pull/1575)) by [@damcou](https://github.com/damcou/) + +## [5.0.0-alpha.65](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.64...5.0.0-alpha.65) + +- [635806cb](https://github.com/algolia/api-clients-automation/commit/635806cb) feat(specs): ingestion partial update method changed to patch ([#1564](https://github.com/algolia/api-clients-automation/pull/1564)) by [@mehmetaligok](https://github.com/mehmetaligok/) + +## [5.0.0-alpha.64](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.63...5.0.0-alpha.64) + +- [6284a8bc](https://github.com/algolia/api-clients-automation/commit/6284a8bc) feat(specs): add task input for bigquery ([#1549](https://github.com/algolia/api-clients-automation/pull/1549)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.63](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.62...5.0.0-alpha.63) + +- [49b4c00c](https://github.com/algolia/api-clients-automation/commit/49b4c00c) feat(specs): add property to BigQuery source input ([#1547](https://github.com/algolia/api-clients-automation/pull/1547)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.62](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.61...5.0.0-alpha.62) + +- [49b4c00c](https://github.com/algolia/api-clients-automation/commit/49b4c00c) feat(specs): add property to BigQuery source input ([#1547](https://github.com/algolia/api-clients-automation/pull/1547)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.61](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.60...5.0.0-alpha.61) + +- [7c9cfb9b](https://github.com/algolia/api-clients-automation/commit/7c9cfb9b) feat(specs): add reason code to run outcome ([#1531](https://github.com/algolia/api-clients-automation/pull/1531)) by [@Fluf22](https://github.com/Fluf22/) +- [558b8fbb](https://github.com/algolia/api-clients-automation/commit/558b8fbb) feat(clients): add Kotlin API client ([#1400](https://github.com/algolia/api-clients-automation/pull/1400)) by [@aallam](https://github.com/aallam/) +- [102f3d4d](https://github.com/algolia/api-clients-automation/commit/102f3d4d) fix(specs): remove unsupported delete option for task action type ([#1511](https://github.com/algolia/api-clients-automation/pull/1511)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.60](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.59...5.0.0-alpha.60) + +- [3af3eb49](https://github.com/algolia/api-clients-automation/commit/3af3eb49) fix(specs): update required for kotlin tests to pass ([#1492](https://github.com/algolia/api-clients-automation/pull/1492)) by [@aallam](https://github.com/aallam/) +- [44962fa5](https://github.com/algolia/api-clients-automation/commit/44962fa5) feat(clients): add bigquery to sourceTypes enum ([#1490](https://github.com/algolia/api-clients-automation/pull/1490)) by [@damcou](https://github.com/damcou/) + +## [5.0.0-alpha.59](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.58...5.0.0-alpha.59) + +- [ad21cc75](https://github.com/algolia/api-clients-automation/commit/ad21cc75) feat(specs): add predict segment size to responses [PRED-1277] ([#1478](https://github.com/algolia/api-clients-automation/pull/1478)) by [@bengreenbank](https://github.com/bengreenbank/) +- [13e7d170](https://github.com/algolia/api-clients-automation/commit/13e7d170) feat(specs): add `neuralSearch` options ([#1474](https://github.com/algolia/api-clients-automation/pull/1474)) by [@shortcuts](https://github.com/shortcuts/) +- [fb9dc333](https://github.com/algolia/api-clients-automation/commit/fb9dc333) fix(javascript): remove `mode` from Fetch requester ([#1475](https://github.com/algolia/api-clients-automation/pull/1475)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.58](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.57...5.0.0-alpha.58) + +- [9a65a533](https://github.com/algolia/api-clients-automation/commit/9a65a533) feat(specs): add `size` to predict segment response ([#1434](https://github.com/algolia/api-clients-automation/pull/1434)) by [@bengreenbank](https://github.com/bengreenbank/) +- [0ed9eb22](https://github.com/algolia/api-clients-automation/commit/0ed9eb22) fix(specs): add `input` in GET tasks ([#1472](https://github.com/algolia/api-clients-automation/pull/1472)) by [@shortcuts](https://github.com/shortcuts/) +- [692aa2d8](https://github.com/algolia/api-clients-automation/commit/692aa2d8) fix(specs): add transform event type ([#1470](https://github.com/algolia/api-clients-automation/pull/1470)) by [@millotp](https://github.com/millotp/) +- [69aac53d](https://github.com/algolia/api-clients-automation/commit/69aac53d) fix(specs): task trigger guard import order ([#1459](https://github.com/algolia/api-clients-automation/pull/1459)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.57](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.56...5.0.0-alpha.57) + +- [a0d96721](https://github.com/algolia/api-clients-automation/commit/a0d96721) fix(specs): task trigger guard import ([#1458](https://github.com/algolia/api-clients-automation/pull/1458)) by [@Fluf22](https://github.com/Fluf22/) +- [d3f107d4](https://github.com/algolia/api-clients-automation/commit/d3f107d4) fix(specs): task trigger guard update ([#1457](https://github.com/algolia/api-clients-automation/pull/1457)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.56](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.55...5.0.0-alpha.56) + +- [619e2ad7](https://github.com/algolia/api-clients-automation/commit/619e2ad7) feat(specs): add delimiter option for csv source ([#1445](https://github.com/algolia/api-clients-automation/pull/1445)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-alpha.55](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.54...5.0.0-alpha.55) + +- [33ec7bc7](https://github.com/algolia/api-clients-automation/commit/33ec7bc7) feat(specs): add `lastUpdatedAt` field to predict segments ([#1431](https://github.com/algolia/api-clients-automation/pull/1431)) by [@bengreenbank](https://github.com/bengreenbank/) + +## [5.0.0-alpha.54](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.53...5.0.0-alpha.54) + +- [c49b6e6d](https://github.com/algolia/api-clients-automation/commit/c49b6e6d) fix(specs): add customRequest to ingestion and small fix ([#1418](https://github.com/algolia/api-clients-automation/pull/1418)) by [@millotp](https://github.com/millotp/) +- [524347e3](https://github.com/algolia/api-clients-automation/commit/524347e3) fix(specs): update BigCommerce source payload ([#1416](https://github.com/algolia/api-clients-automation/pull/1416)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.53](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.52...5.0.0-alpha.53) + +- [e3fa5eb0](https://github.com/algolia/api-clients-automation/commit/e3fa5eb0) feat(specs): add new BigCommerce source fields ([#1387](https://github.com/algolia/api-clients-automation/pull/1387)) by [@shortcuts](https://github.com/shortcuts/) +- [6f0ac998](https://github.com/algolia/api-clients-automation/commit/6f0ac998) feat(specs): make the `eu` region available for the ingestion client ([#1396](https://github.com/algolia/api-clients-automation/pull/1396)) by [@Fluf22](https://github.com/Fluf22/) +- [79ae980b](https://github.com/algolia/api-clients-automation/commit/79ae980b) feat(specs): update affinity value type to accomodate booleans and numbers ([#1388](https://github.com/algolia/api-clients-automation/pull/1388)) by [@writeens](https://github.com/writeens/) + +## [5.0.0-alpha.52](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.51...5.0.0-alpha.52) + +- [9f967a45](https://github.com/algolia/api-clients-automation/commit/9f967a45) fix(specs): authenticationID not required in source and destination ([#1379](https://github.com/algolia/api-clients-automation/pull/1379)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-alpha.51](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.50...5.0.0-alpha.51) + +- [5a93964e](https://github.com/algolia/api-clients-automation/commit/5a93964e) fix(specs): add skipped runs ([#1359](https://github.com/algolia/api-clients-automation/pull/1359)) by [@millotp](https://github.com/millotp/) +- [2a4fe7ea](https://github.com/algolia/api-clients-automation/commit/2a4fe7ea) feat(clients): upgrade to node 18 ([#1344](https://github.com/algolia/api-clients-automation/pull/1344)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-alpha.50](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.49...5.0.0-alpha.50) + +- [33700b8c](https://github.com/algolia/api-clients-automation/commit/33700b8c) feat(specs): add a reason string to the run object ([#1347](https://github.com/algolia/api-clients-automation/pull/1347)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.49](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.48...5.0.0-alpha.49) + +- [b4d183fe](https://github.com/algolia/api-clients-automation/commit/b4d183fe) fix(specs): add pagination to events ([#1337](https://github.com/algolia/api-clients-automation/pull/1337)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-alpha.48](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.47...5.0.0-alpha.48) + +- [e3aa6b2d](https://github.com/algolia/api-clients-automation/commit/e3aa6b2d) fix(specs): add `UniqueIDColumn` property to `SourceJSON` input ([#1333](https://github.com/algolia/api-clients-automation/pull/1333)) by [@mehmetaligok](https://github.com/mehmetaligok/) + +## [5.0.0-alpha.47](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.46...5.0.0-alpha.47) + +- [2eca9b7b](https://github.com/algolia/api-clients-automation/commit/2eca9b7b) fix(specs): update Predict Segment operators to textual format ([#1316](https://github.com/algolia/api-clients-automation/pull/1316)) by [@francoischalifour](https://github.com/francoischalifour/) + +## [5.0.0-alpha.46](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.45...5.0.0-alpha.46) + +- [f7f0fbe8](https://github.com/algolia/api-clients-automation/commit/f7f0fbe8) feat(specs): make DELETE endpoints return a 200 OK ([#1314](https://github.com/algolia/api-clients-automation/pull/1314)) by [@Fluf22](https://github.com/Fluf22/) +- [cb3001dd](https://github.com/algolia/api-clients-automation/commit/cb3001dd) fix(specs): remove segment version ([#1313](https://github.com/algolia/api-clients-automation/pull/1313)) by [@bengreenbank](https://github.com/bengreenbank/) + +## [5.0.0-alpha.45](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.44...5.0.0-alpha.45) + +- [d3aead8a](https://github.com/algolia/api-clients-automation/commit/d3aead8a) refactor(specs): new predict segment condition syntax ([#1202](https://github.com/algolia/api-clients-automation/pull/1202)) by [@bengreenbank](https://github.com/bengreenbank/) +- [bad11072](https://github.com/algolia/api-clients-automation/commit/bad11072) feat(specs): remove content attributes from models [PRED-982] ([#1226](https://github.com/algolia/api-clients-automation/pull/1226)) by [@bengreenbank](https://github.com/bengreenbank/) + +## [5.0.0-alpha.44](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.43...5.0.0-alpha.44) + +- [023d5572](https://github.com/algolia/api-clients-automation/commit/023d5572) feat(specs): add sort and order handling in query parameters ([#1304](https://github.com/algolia/api-clients-automation/pull/1304)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.43](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.42...5.0.0-alpha.43) + +- [b9b4ba35](https://github.com/algolia/api-clients-automation/commit/b9b4ba35) feat(specs): add CSV source ([#1301](https://github.com/algolia/api-clients-automation/pull/1301)) by [@morganleroi](https://github.com/morganleroi/) + +## [5.0.0-alpha.42](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.41...5.0.0-alpha.42) + +- [9d04dc22](https://github.com/algolia/api-clients-automation/commit/9d04dc22) fix(specs): rename task type to `onDemand` ([#1299](https://github.com/algolia/api-clients-automation/pull/1299)) by [@shortcuts](https://github.com/shortcuts/) +- [d39716c7](https://github.com/algolia/api-clients-automation/commit/d39716c7) feat(javascript): export task trigger guards from each build entrypoints ([#1289](https://github.com/algolia/api-clients-automation/pull/1289)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.41](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.40...5.0.0-alpha.41) + +- [dc5a22dd](https://github.com/algolia/api-clients-automation/commit/dc5a22dd) feat(javascript): improve on task trigger type guards ([#1286](https://github.com/algolia/api-clients-automation/pull/1286)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.40](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.39...5.0.0-alpha.40) + +- [91f21487](https://github.com/algolia/api-clients-automation/commit/91f21487) feat(javascript): add task trigger type guards ([#1280](https://github.com/algolia/api-clients-automation/pull/1280)) by [@Fluf22](https://github.com/Fluf22/) +- [a1c7c245](https://github.com/algolia/api-clients-automation/commit/a1c7c245) fix(specs): correct types for Tasks trigger ([#1279](https://github.com/algolia/api-clients-automation/pull/1279)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.39](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.38...5.0.0-alpha.39) + +- [aed20fe6](https://github.com/algolia/api-clients-automation/commit/aed20fe6) feat(specs): add more descriptions to the Ingestion API ([#1273](https://github.com/algolia/api-clients-automation/pull/1273)) by [@shortcuts](https://github.com/shortcuts/) +- [3739451a](https://github.com/algolia/api-clients-automation/commit/3739451a) fix(specs): add query params for observability ([#1277](https://github.com/algolia/api-clients-automation/pull/1277)) by [@millotp](https://github.com/millotp/) +- [859c0a97](https://github.com/algolia/api-clients-automation/commit/859c0a97) feat(specs): source update changes ([#1276](https://github.com/algolia/api-clients-automation/pull/1276)) by [@mehmetaligok](https://github.com/mehmetaligok/) + +## [5.0.0-alpha.38](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.37...5.0.0-alpha.38) + +- [46c1e2e9](https://github.com/algolia/api-clients-automation/commit/46c1e2e9) feat(specs): add search endpoint to every item type ([#1274](https://github.com/algolia/api-clients-automation/pull/1274)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.37](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.36...5.0.0-alpha.37) + +- [a60e6790](https://github.com/algolia/api-clients-automation/commit/a60e6790) feat(specs): add sourceID query param to task list endpoint ([#1250](https://github.com/algolia/api-clients-automation/pull/1250)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.36](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.35...5.0.0-alpha.36) + +- [83330afe](https://github.com/algolia/api-clients-automation/commit/83330afe) chore(specs): change PlatformType naming to Platform ([#1246](https://github.com/algolia/api-clients-automation/pull/1246)) by [@Fluf22](https://github.com/Fluf22/) +- [700dad66](https://github.com/algolia/api-clients-automation/commit/700dad66) feat(specs): add query param to filter list endpoint results ([#1245](https://github.com/algolia/api-clients-automation/pull/1245)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.35](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.34...5.0.0-alpha.35) + +- [699fff2b](https://github.com/algolia/api-clients-automation/commit/699fff2b) fix(specs): fix method for task enable/disable status ([#1242](https://github.com/algolia/api-clients-automation/pull/1242)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.34](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.33...5.0.0-alpha.34) + +- [010eed78](https://github.com/algolia/api-clients-automation/commit/010eed78) feat(javascript): add error to APIError if possible ([#1234](https://github.com/algolia/api-clients-automation/pull/1234)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-alpha.33](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.32...5.0.0-alpha.33) + +- [4b1f1fd3](https://github.com/algolia/api-clients-automation/commit/4b1f1fd3) feat(specs): add query params to task lists endpoint in Ingestion APIC ([#1233](https://github.com/algolia/api-clients-automation/pull/1233)) by [@Fluf22](https://github.com/Fluf22/) + +## [5.0.0-alpha.32](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.31...5.0.0-alpha.32) + +- [466cc0b3](https://github.com/algolia/api-clients-automation/commit/466cc0b3) fix(specs): remove input from auth list ([#1229](https://github.com/algolia/api-clients-automation/pull/1229)) by [@millotp](https://github.com/millotp/) +- [28d82603](https://github.com/algolia/api-clients-automation/commit/28d82603) fix(specs): authenticationID is not required in source and destination ([#1203](https://github.com/algolia/api-clients-automation/pull/1203)) by [@morganleroi](https://github.com/morganleroi/) +- [9acdc96b](https://github.com/algolia/api-clients-automation/commit/9acdc96b) fix(specs): move lastRun and nextRun to task.trigger ([#1228](https://github.com/algolia/api-clients-automation/pull/1228)) by [@millotp](https://github.com/millotp/) +- [8fc33195](https://github.com/algolia/api-clients-automation/commit/8fc33195) fix(specs): make enabled nullable ([#1212](https://github.com/algolia/api-clients-automation/pull/1212)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-alpha.31](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.30...5.0.0-alpha.31) + +- [75c9a862](https://github.com/algolia/api-clients-automation/commit/75c9a862) fix(specs): numberOfPendingTasks is plural ([#1211](https://github.com/algolia/api-clients-automation/pull/1211)) by [@kai687](https://github.com/kai687/) +- [e77a46b9](https://github.com/algolia/api-clients-automation/commit/e77a46b9) fix(specs): example should be integer ([#1210](https://github.com/algolia/api-clients-automation/pull/1210)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-alpha.30](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.29...5.0.0-alpha.30) + +- [dd4fdefd](https://github.com/algolia/api-clients-automation/commit/dd4fdefd) feat(specs): add source json to ingestion client ([#1200](https://github.com/algolia/api-clients-automation/pull/1200)) by [@morganleroi](https://github.com/morganleroi/) + +## [5.0.0-alpha.29](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.28...5.0.0-alpha.29) + +- [494c2b77](https://github.com/algolia/api-clients-automation/commit/494c2b77) fix(javascript): update ingestion specs ([#1192](https://github.com/algolia/api-clients-automation/pull/1192)) by [@shortcuts](https://github.com/shortcuts/) +- [5938b05f](https://github.com/algolia/api-clients-automation/commit/5938b05f) fix(javascript): pass with no tests ([#1191](https://github.com/algolia/api-clients-automation/pull/1191)) by [@shortcuts](https://github.com/shortcuts/) +- [ec370af5](https://github.com/algolia/api-clients-automation/commit/ec370af5) fix(specs): new CT source input ([#1190](https://github.com/algolia/api-clients-automation/pull/1190)) by [@shortcuts](https://github.com/shortcuts/) +- [377e091d](https://github.com/algolia/api-clients-automation/commit/377e091d) fix(specs): Algolia Search hostnames ([#1189](https://github.com/algolia/api-clients-automation/pull/1189)) by [@kai687](https://github.com/kai687/) + +## [5.0.0-alpha.28](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.27...5.0.0-alpha.28) + +- [19552886](https://github.com/algolia/api-clients-automation/commit/19552886) fix(clients): replace sources client with ingestion ([#1178](https://github.com/algolia/api-clients-automation/pull/1178)) by [@millotp](https://github.com/millotp/) +- [deac88b9](https://github.com/algolia/api-clients-automation/commit/deac88b9) feat(javascript): create ingestion client ([#1101](https://github.com/algolia/api-clients-automation/pull/1101)) by [@millotp](https://github.com/millotp/) +- [2f456a45](https://github.com/algolia/api-clients-automation/commit/2f456a45) fix(specs): mistakes in the ingestion spec ([#1176](https://github.com/algolia/api-clients-automation/pull/1176)) by [@millotp](https://github.com/millotp/) +- [1685ed08](https://github.com/algolia/api-clients-automation/commit/1685ed08) feat(specs): create ingestion specs ([#1100](https://github.com/algolia/api-clients-automation/pull/1100)) by [@millotp](https://github.com/millotp/) + +## [5.0.0-alpha.27](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.26...5.0.0-alpha.27) + +- [fc7f987d](https://github.com/algolia/api-clients-automation/commit/fc7f987d) feat(specs): add appropriate type to model instance type property ([#1077](https://github.com/algolia/api-clients-automation/pull/1077)) by [@writeens](https://github.com/writeens/) + +## [5.0.0-alpha.26](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.25...5.0.0-alpha.26) + +- [e84584dd](https://github.com/algolia/api-clients-automation/commit/e84584dd) feat(specs): add modelID as part of getModelMetrics response ([#1075](https://github.com/algolia/api-clients-automation/pull/1075)) by [@writeens](https://github.com/writeens/) + +## [5.0.0-alpha.25](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.24...5.0.0-alpha.25) + +- [8151e945](https://github.com/algolia/api-clients-automation/commit/8151e945) feat(specs): attributes no longer required in model instance response ([#1065](https://github.com/algolia/api-clients-automation/pull/1065)) by [@writeens](https://github.com/writeens/) + +## [5.0.0-alpha.24](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.23...5.0.0-alpha.24) + +- [0ef2eab9](https://github.com/algolia/api-clients-automation/commit/0ef2eab9) fix(specs): update predict model endpoint modelAttributes type ([#1063](https://github.com/algolia/api-clients-automation/pull/1063)) by [@writeens](https://github.com/writeens/) + +## [5.0.0-alpha.23](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.22...5.0.0-alpha.23) + +- [6ba25e25](https://github.com/algolia/api-clients-automation/commit/6ba25e25) chore(specs): setup revised predict model spec ([#1045](https://github.com/algolia/api-clients-automation/pull/1045)) by [@writeens](https://github.com/writeens/) + +## [5.0.0-alpha.22](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.21...5.0.0-alpha.22) + +- [09a235cd](https://github.com/algolia/api-clients-automation/commit/09a235cd) fix(specs): update model response ([#1034](https://github.com/algolia/api-clients-automation/pull/1034)) by [@writeens](https://github.com/writeens/) + +## [5.0.0-alpha.21](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.20...5.0.0-alpha.21) + +- [b56b2b49](https://github.com/algolia/api-clients-automation/commit/b56b2b49) fix(specs): prefix Predict predictions success types ([#1032](https://github.com/algolia/api-clients-automation/pull/1032)) by [@francoischalifour](https://github.com/francoischalifour/) + +## [5.0.0-alpha.20](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.19...5.0.0-alpha.20) + +- [07a2e936](https://github.com/algolia/api-clients-automation/commit/07a2e936) feat(specs): predict segments ([#1013](https://github.com/algolia/api-clients-automation/pull/1013)) by [@bengreenbank](https://github.com/bengreenbank/) +- [362cd6b1](https://github.com/algolia/api-clients-automation/commit/362cd6b1) feat(specs): deleteByParams ([#1016](https://github.com/algolia/api-clients-automation/pull/1016)) by [@clemfromspace](https://github.com/clemfromspace/) + +## [5.0.0-alpha.19](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.18...5.0.0-alpha.19) + +- [bf539a7e](https://github.com/algolia/api-clients-automation/commit/bf539a7e) feat(specs): predict model endpoints ([#1014](https://github.com/algolia/api-clients-automation/pull/1014)) by [@writeens](https://github.com/writeens/) + +## [5.0.0-alpha.18](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.17...5.0.0-alpha.18) + +- [d68089e0](https://github.com/algolia/api-clients-automation/commit/d68089e0) feat(specs): update predict client API URL ([#1010](https://github.com/algolia/api-clients-automation/pull/1010)) by [@bengreenbank](https://github.com/bengreenbank/) + +## [5.0.0-alpha.17](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.16...5.0.0-alpha.17) + +- [e227d8a6](https://github.com/algolia/api-clients-automation/commit/e227d8a6) fix(specs): remove unretrievableAttributes from searchParams ([#988](https://github.com/algolia/api-clients-automation/pull/988)) by [@loicsay](https://github.com/loicsay/) + +## [5.0.0-alpha.16](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.15...5.0.0-alpha.16) + +- [988040c4](https://github.com/algolia/api-clients-automation/commit/988040c4) fix(javascript): fix funnel stage type casing ([#982](https://github.com/algolia/api-clients-automation/pull/982)) by [@francoischalifour](https://github.com/francoischalifour/) + +## [5.0.0-alpha.15](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.14...5.0.0-alpha.15) + +- [14d22254](https://github.com/algolia/api-clients-automation/commit/14d22254) fix(javascript): update Predict models error spec ([#980](https://github.com/algolia/api-clients-automation/pull/980)) by [@francoischalifour](https://github.com/francoischalifour/) +- [80724c1f](https://github.com/algolia/api-clients-automation/commit/80724c1f) feat(specs): create new methods ([#974](https://github.com/algolia/api-clients-automation/pull/974)) by [@bengreenbank](https://github.com/bengreenbank/) + +## [5.0.0-alpha.14](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.13...5.0.0-alpha.14) + +- [0df4fb28](https://github.com/algolia/api-clients-automation/commit/0df4fb28) fix(javascript): encode query parameters ([#973](https://github.com/algolia/api-clients-automation/pull/973)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.13](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.12...5.0.0-alpha.13) + +- [a5ee875f](https://github.com/algolia/api-clients-automation/commit/a5ee875f) fix(javascript): update Predict type exports ([#953](https://github.com/algolia/api-clients-automation/pull/953)) by [@francoischalifour](https://github.com/francoischalifour/) + +## [5.0.0-alpha.12](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.11...5.0.0-alpha.12) + +- [ff02ba09](https://github.com/algolia/api-clients-automation/commit/ff02ba09) fix(javascript): revert: do not send user-agent for Predict (#957) ([#919](https://github.com/algolia/api-clients-automation/pull/919)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.11](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.10...5.0.0-alpha.11) + +- [3b85c763](https://github.com/algolia/api-clients-automation/commit/3b85c763) fix(javascript): use `exports` field to pick correct bundle ([#947](https://github.com/algolia/api-clients-automation/pull/947)) by [@francoischalifour](https://github.com/francoischalifour/) + +## [5.0.0-alpha.10](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.9...5.0.0-alpha.10) + +- [51002048](https://github.com/algolia/api-clients-automation/commit/51002048) fix(javascript): allow undefined object when all parameters are optional ([#922](https://github.com/algolia/api-clients-automation/pull/922)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.9](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.8...5.0.0-alpha.9) + +- [dc43c2ad](https://github.com/algolia/api-clients-automation/commit/dc43c2ad) fix(javascript): do not send user-agent for Predict ([#919](https://github.com/algolia/api-clients-automation/pull/919)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.8](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.7...5.0.0-alpha.8) + +- [4c1596df](https://github.com/algolia/api-clients-automation/commit/4c1596df) fix(clients): list available regions when region is missing ([#916](https://github.com/algolia/api-clients-automation/pull/916)) by [@shortcuts](https://github.com/shortcuts/) +- [be45fc4e](https://github.com/algolia/api-clients-automation/commit/be45fc4e) fix(specs): make `batch` body parameters required ([#917](https://github.com/algolia/api-clients-automation/pull/917)) by [@shortcuts](https://github.com/shortcuts/) +- [27b78d93](https://github.com/algolia/api-clients-automation/commit/27b78d93) fix(javascript): build ([#867](https://github.com/algolia/api-clients-automation/pull/867)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.7](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.6...5.0.0-alpha.7) + +- [c2a054fa](https://github.com/algolia/api-clients-automation/commit/c2a054fa) fix(specs): allow `searchParams` in `browse` method ([#911](https://github.com/algolia/api-clients-automation/pull/911)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.6](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.5...5.0.0-alpha.6) + +- [07c169f5](https://github.com/algolia/api-clients-automation/commit/07c169f5) fix(specs): browseResponse, IndexSettings and searchResponse ([#900](https://github.com/algolia/api-clients-automation/pull/900)) by [@shortcuts](https://github.com/shortcuts/) +- [f829d142](https://github.com/algolia/api-clients-automation/commit/f829d142) fix(javascript): utils tests run time ([#908](https://github.com/algolia/api-clients-automation/pull/908)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.5](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.4...5.0.0-alpha.5) + +- [005f9ed3](https://github.com/algolia/api-clients-automation/commit/005f9ed3) fix(specs): wrong body parameter name ([#896](https://github.com/algolia/api-clients-automation/pull/896)) by [@shortcuts](https://github.com/shortcuts/) +- [9753e2db](https://github.com/algolia/api-clients-automation/commit/9753e2db) fix(javascript): helpers type options ([#895](https://github.com/algolia/api-clients-automation/pull/895)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.4](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.3...5.0.0-alpha.4) + +- [193fb73d](https://github.com/algolia/api-clients-automation/commit/193fb73d) fix(specs): `getApiKeyResponse`, `multipleBatch`, `partialUpdateObject` ([#889](https://github.com/algolia/api-clients-automation/pull/889)) by [@shortcuts](https://github.com/shortcuts/) +- [2c7cd9c5](https://github.com/algolia/api-clients-automation/commit/2c7cd9c5) fix(javascript): make type filename consistent ([#890](https://github.com/algolia/api-clients-automation/pull/890)) by [@shortcuts](https://github.com/shortcuts/) +- [fd3e2261](https://github.com/algolia/api-clients-automation/commit/fd3e2261) fix(javascript): expose `clearCache` and `appId` at the root of the client ([#892](https://github.com/algolia/api-clients-automation/pull/892)) by [@shortcuts](https://github.com/shortcuts/) +- [46c1526f](https://github.com/algolia/api-clients-automation/commit/46c1526f) feat(javascript): provide `browseObjects`, `browseRules` and `browseSynonyms` helper methods ([#887](https://github.com/algolia/api-clients-automation/pull/887)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.3](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.2...5.0.0-alpha.3) + +- [eb108de7](https://github.com/algolia/api-clients-automation/commit/eb108de7) fix(javascript): provide more options to `algoliasearch` ([#877](https://github.com/algolia/api-clients-automation/pull/877)) by [@shortcuts](https://github.com/shortcuts/) +- [95ba0016](https://github.com/algolia/api-clients-automation/commit/95ba0016) fix(specs): `rules` and `objects` parameters/responses ([#876](https://github.com/algolia/api-clients-automation/pull/876)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.2](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.1...5.0.0-alpha.2) + +- [b7e3c642](https://github.com/algolia/api-clients-automation/commit/b7e3c642) fix(javascript): expose sub `algoliasearch` client's type ([#873](https://github.com/algolia/api-clients-automation/pull/873)) by [@shortcuts](https://github.com/shortcuts/) +- [0d988f9f](https://github.com/algolia/api-clients-automation/commit/0d988f9f) feat(javascript): allow providing options for node requester ([#872](https://github.com/algolia/api-clients-automation/pull/872)) by [@shortcuts](https://github.com/shortcuts/) +- [6bdc94f5](https://github.com/algolia/api-clients-automation/commit/6bdc94f5) fix(specs): make `hits` required, `facets` count as an integer, `searchParams` as optional ([#868](https://github.com/algolia/api-clients-automation/pull/868)) by [@shortcuts](https://github.com/shortcuts/) + +## [5.0.0-alpha.1](https://github.com/algolia/algoliasearch-client-javascript/compare/5.0.0-alpha.0...5.0.0-alpha.1) + +- [d18cbc4a](https://github.com/algolia/api-clients-automation/commit/d18cbc4a) feat(javascript): support generic for hits ([#854](https://github.com/algolia/api-clients-automation/pull/854)) by [@millotp](https://github.com/millotp/) +- [d93227c7](https://github.com/algolia/api-clients-automation/commit/d93227c7) feat(javascript): add `requester-fetch` ([#855](https://github.com/algolia/api-clients-automation/pull/855)) by [@shortcuts](https://github.com/shortcuts/) +- [da6474fb](https://github.com/algolia/api-clients-automation/commit/da6474fb) fix(javascript): ensure requesters work as in v4 ([#823](https://github.com/algolia/api-clients-automation/pull/823)) by [@shortcuts](https://github.com/shortcuts/) +- [a4346a72](https://github.com/algolia/api-clients-automation/commit/a4346a72) fix(clients): make POST body related to the endpoint, assert body in tests ([#849](https://github.com/algolia/api-clients-automation/pull/849)) by [@shortcuts](https://github.com/shortcuts/) +- [22bf1c39](https://github.com/algolia/api-clients-automation/commit/22bf1c39) fix(specs): wrong parameters for `searchSynonyms` ([#852](https://github.com/algolia/api-clients-automation/pull/852)) by [@shortcuts](https://github.com/shortcuts/) +- [4b557380](https://github.com/algolia/api-clients-automation/commit/4b557380) fix(clients): add generation banner to generated files ([#816](https://github.com/algolia/api-clients-automation/pull/816)) by [@shortcuts](https://github.com/shortcuts/) +- [7bb39283](https://github.com/algolia/api-clients-automation/commit/7bb39283) feat(javascript): expose transporter, remove nullish coalescing and optional chaining ([#799](https://github.com/algolia/api-clients-automation/pull/799)) by [@shortcuts](https://github.com/shortcuts/) +- [750721d0](https://github.com/algolia/api-clients-automation/commit/750721d0) fix(javascript): provide `requestOptions` to helper methods ([#797](https://github.com/algolia/api-clients-automation/pull/797)) by [@shortcuts](https://github.com/shortcuts/) +- [0076edcc](https://github.com/algolia/api-clients-automation/commit/0076edcc) fix(javascript): rename `predict` package ([#796](https://github.com/algolia/api-clients-automation/pull/796)) by [@shortcuts](https://github.com/shortcuts/) +- [df222d7c](https://github.com/algolia/api-clients-automation/commit/df222d7c) feat(javascript): use `@algolia` NPM namespace ([#785](https://github.com/algolia/api-clients-automation/pull/785)) by [@shortcuts](https://github.com/shortcuts/) +- [5a499849](https://github.com/algolia/api-clients-automation/commit/5a499849) fix(specs): add renderingContent to search response ([#787](https://github.com/algolia/api-clients-automation/pull/787)) by [@millotp](https://github.com/millotp/) +- [6b50ef0b](https://github.com/algolia/api-clients-automation/commit/6b50ef0b) feat(javascript): add `abtesting` client, better `init` usage ([#784](https://github.com/algolia/api-clients-automation/pull/784)) by [@shortcuts](https://github.com/shortcuts/) +- [23a72c39](https://github.com/algolia/api-clients-automation/commit/23a72c39) fix(specs): correct type for highlightResult and snippetResult ([#783](https://github.com/algolia/api-clients-automation/pull/783)) by [@millotp](https://github.com/millotp/) +- [a11e84da](https://github.com/algolia/api-clients-automation/commit/a11e84da) fix(specs): fix missing params and types ([#772](https://github.com/algolia/api-clients-automation/pull/772)) by [@shortcuts](https://github.com/shortcuts/) +- [bc14a8c5](https://github.com/algolia/api-clients-automation/commit/bc14a8c5) feat(specs): Add tags to the settings and search params ([#768](https://github.com/algolia/api-clients-automation/pull/768)) by [@clemfromspace](https://github.com/clemfromspace/) +- [77c80e20](https://github.com/algolia/api-clients-automation/commit/77c80e20) fix(javascript): add class-proposal plugin for `client-common` ([#765](https://github.com/algolia/api-clients-automation/pull/765)) by [@shortcuts](https://github.com/shortcuts/) +- [23a72c39](https://github.com/algolia/api-clients-automation/commit/23a72c39) fix(specs): correct type for highlightResult and snippetResult ([#783](https://github.com/algolia/api-clients-automation/pull/783)) by [@millotp](https://github.com/millotp/) +- [a11e84da](https://github.com/algolia/api-clients-automation/commit/a11e84da) fix(specs): fix missing params and types ([#772](https://github.com/algolia/api-clients-automation/pull/772)) by [@shortcuts](https://github.com/shortcuts/) +- [bc14a8c5](https://github.com/algolia/api-clients-automation/commit/bc14a8c5) feat(specs): Add tags to the settings and search params ([#768](https://github.com/algolia/api-clients-automation/pull/768)) by [@clemfromspace](https://github.com/clemfromspace/) +- [77c80e20](https://github.com/algolia/api-clients-automation/commit/77c80e20) fix(javascript): add class-proposal plugin for `client-common` ([#765](https://github.com/algolia/api-clients-automation/pull/765)) by [@shortcuts](https://github.com/shortcuts/) +- [b9c4145d](https://github.com/algolia/api-clients-automation/commit/b9c4145d) fix(javascript): improve bundlesize, add check to CI ([#762](https://github.com/algolia/api-clients-automation/pull/762)) by [@shortcuts](https://github.com/shortcuts/) +- [7a858225](https://github.com/algolia/api-clients-automation/commit/7a858225) fix(specs): correct type for `renderingContent` and `consequenceParams` ([#759](https://github.com/algolia/api-clients-automation/pull/759)) by [@shortcuts](https://github.com/shortcuts/) +- [2288d170](https://github.com/algolia/api-clients-automation/commit/2288d170) feat(javascript): add `waitForApiKey` helper method ([#738](https://github.com/algolia/api-clients-automation/pull/738)) by [@shortcuts](https://github.com/shortcuts/) +- [d7fcc6d3](https://github.com/algolia/api-clients-automation/commit/d7fcc6d3) fix(javascript): import lite resolution ([#737](https://github.com/algolia/api-clients-automation/pull/737)) by [@shortcuts](https://github.com/shortcuts/) +- [5b70ec1a](https://github.com/algolia/api-clients-automation/commit/5b70ec1a) fix(javascript): publish `algoliasearch` dist ([#735](https://github.com/algolia/api-clients-automation/pull/735)) by [@shortcuts](https://github.com/shortcuts/) +- [7ff32bfe](https://github.com/algolia/api-clients-automation/commit/7ff32bfe) feat(javascript): nest `lite` package in `algoliasearch` ([#729](https://github.com/algolia/api-clients-automation/pull/729)) by [@shortcuts](https://github.com/shortcuts/) +- [61343d52](https://github.com/algolia/api-clients-automation/commit/61343d52) fix(specs): correct type for `typoTolerance` ([#722](https://github.com/algolia/api-clients-automation/pull/722)) by [@shortcuts](https://github.com/shortcuts/) +- [c917710b](https://github.com/algolia/api-clients-automation/commit/c917710b) fix(specs): types and parameters ([#708](https://github.com/algolia/api-clients-automation/pull/708)) by [@shortcuts](https://github.com/shortcuts/) +- [33cffcbb](https://github.com/algolia/api-clients-automation/commit/33cffcbb) fix(javascript): export types for `algoliasearch` ([#706](https://github.com/algolia/api-clients-automation/pull/706)) by [@shortcuts](https://github.com/shortcuts/) +- [e93a31cd](https://github.com/algolia/api-clients-automation/commit/e93a31cd) fix(javascript): clean rollup config ([#700](https://github.com/algolia/api-clients-automation/pull/700)) by [@shortcuts](https://github.com/shortcuts/) +- [98b40e87](https://github.com/algolia/api-clients-automation/commit/98b40e87) feat(javascript): allow legacy signature for `search` method ([#665](https://github.com/algolia/api-clients-automation/pull/665)) by [@shortcuts](https://github.com/shortcuts/) +- [ad27abc1](https://github.com/algolia/api-clients-automation/commit/ad27abc1) test(clients): test more region param and timeouts ([#663](https://github.com/algolia/api-clients-automation/pull/663)) by [@millotp](https://github.com/millotp/) +- [baaf7674](https://github.com/algolia/api-clients-automation/commit/baaf7674) fix(clients): rename `maxTrial` to `maxRetries` ([#659](https://github.com/algolia/api-clients-automation/pull/659)) by [@shortcuts](https://github.com/shortcuts/) +- [faba7214](https://github.com/algolia/api-clients-automation/commit/faba7214) fix(javascript): remove duplicate `echoRequester` logic ([#650](https://github.com/algolia/api-clients-automation/pull/650)) by [@shortcuts](https://github.com/shortcuts/) +- [19dc9185](https://github.com/algolia/api-clients-automation/commit/19dc9185) fix(javascript): remove duplicate types, add some type descriptions ([#644](https://github.com/algolia/api-clients-automation/pull/644)) by [@shortcuts](https://github.com/shortcuts/) +- [509ca0b9](https://github.com/algolia/api-clients-automation/commit/509ca0b9) fix(javascript): convert timeouts to ms APIC-512 ([#643](https://github.com/algolia/api-clients-automation/pull/643)) by [@millotp](https://github.com/millotp/) +- [ea03526e](https://github.com/algolia/api-clients-automation/commit/ea03526e) fix(specs): rename rules and synonyms methods ([#642](https://github.com/algolia/api-clients-automation/pull/642)) by [@shortcuts](https://github.com/shortcuts/) +- [2a1f30c9](https://github.com/algolia/api-clients-automation/commit/2a1f30c9) fix(javascript): remove factory from build ([#639](https://github.com/algolia/api-clients-automation/pull/639)) by [@shortcuts](https://github.com/shortcuts/) +- [6e77aa5b](https://github.com/algolia/api-clients-automation/commit/6e77aa5b) fix(javascript): check that appId, apiKey and region are valid parameters ([#622](https://github.com/algolia/api-clients-automation/pull/622)) by [@millotp](https://github.com/millotp/) +- [9f99f02b](https://github.com/algolia/api-clients-automation/commit/9f99f02b) feat(javascript): allow overriding all transporter options ([#615](https://github.com/algolia/api-clients-automation/pull/615)) by [@Haroenv](https://github.com/Haroenv/) +- [af6c83d5](https://github.com/algolia/api-clients-automation/commit/af6c83d5) refactor(javascript): simplify transporter.request ([#617](https://github.com/algolia/api-clients-automation/pull/617)) by [@Haroenv](https://github.com/Haroenv/) +- [2e17ec6d](https://github.com/algolia/api-clients-automation/commit/2e17ec6d) fix(javascript): rename timedout and timeouted to timed out ([#616](https://github.com/algolia/api-clients-automation/pull/616)) by [@Haroenv](https://github.com/Haroenv/) +- [8995c360](https://github.com/algolia/api-clients-automation/commit/8995c360) feat(javascript): use the text/plain content-type ([#614](https://github.com/algolia/api-clients-automation/pull/614)) by [@Haroenv](https://github.com/Haroenv/) +- [b62b861a](https://github.com/algolia/api-clients-automation/commit/b62b861a) fix(javascript): enable cache ([#612](https://github.com/algolia/api-clients-automation/pull/612)) by [@Haroenv](https://github.com/Haroenv/) +- [d62318bc](https://github.com/algolia/api-clients-automation/commit/d62318bc) fix(javascript): cache on POST read request ([#611](https://github.com/algolia/api-clients-automation/pull/611)) by [@Haroenv](https://github.com/Haroenv/) +- [b8e6be72](https://github.com/algolia/api-clients-automation/commit/b8e6be72) fix(specs): correctly pass `searchParams` to the request ([#531](https://github.com/algolia/api-clients-automation/pull/531)) by [@shortcuts](https://github.com/shortcuts/) +- [000f62d9](https://github.com/algolia/api-clients-automation/commit/000f62d9) refactor(javascript): type setTimeout in a way compatible with node & browser ([#527](https://github.com/algolia/api-clients-automation/pull/527)) by [@Haroenv](https://github.com/Haroenv/) +- [bf427124](https://github.com/algolia/api-clients-automation/commit/bf427124) fix(specs): allow `POST` methods to send `read` requests ([#525](https://github.com/algolia/api-clients-automation/pull/525)) by [@shortcuts](https://github.com/shortcuts/) +- [588539c4](https://github.com/algolia/api-clients-automation/commit/588539c4) fix(javascript): remove unused methods of algoliasearch-lite ([#524](https://github.com/algolia/api-clients-automation/pull/524)) by [@shortcuts](https://github.com/shortcuts/) +- [4f8d3558](https://github.com/algolia/api-clients-automation/commit/4f8d3558) feat(javascript): add waitForTask in search client ([#510](https://github.com/algolia/api-clients-automation/pull/510)) by [@eunjae-lee](https://github.com/eunjae-lee/) +- [0d23c52c](https://github.com/algolia/api-clients-automation/commit/0d23c52c) fix(specs): rename `search` method ([#514](https://github.com/algolia/api-clients-automation/pull/514)) by [@shortcuts](https://github.com/shortcuts/) +- [3b3d7067](https://github.com/algolia/api-clients-automation/commit/3b3d7067) fix(specs): correct mistakes ([#509](https://github.com/algolia/api-clients-automation/pull/509)) by [@Haroenv](https://github.com/Haroenv/) +- [6361b602](https://github.com/algolia/api-clients-automation/commit/6361b602) style(specs): add out-of-line-one-of rule (and allOf and anyOf) APIC-418 ([#512](https://github.com/algolia/api-clients-automation/pull/512)) by [@millotp](https://github.com/millotp/) +- [340b7bd5](https://github.com/algolia/api-clients-automation/commit/340b7bd5) fix(specs): correct type for taskID APIC-478 ([#504](https://github.com/algolia/api-clients-automation/pull/504)) by [@millotp](https://github.com/millotp/) +- [f516c247](https://github.com/algolia/api-clients-automation/commit/f516c247) fix(javascript): move logic to custom gens ([#486](https://github.com/algolia/api-clients-automation/pull/486)) by [@shortcuts](https://github.com/shortcuts/) +- [be7400be](https://github.com/algolia/api-clients-automation/commit/be7400be) fix(javascript): update version ([#448](https://github.com/algolia/api-clients-automation/pull/448)) by [@shortcuts](https://github.com/shortcuts/) +- [b9677335](https://github.com/algolia/api-clients-automation/commit/b9677335) fix(javascript): add missing descriptions ([#416](https://github.com/algolia/api-clients-automation/pull/416)) by [@shortcuts](https://github.com/shortcuts/) +- [cd565ca3](https://github.com/algolia/api-clients-automation/commit/cd565ca3) chore(javascript): fix npm publish issue ([#409](https://github.com/algolia/api-clients-automation/pull/409)) by [@eunjae-lee](https://github.com/eunjae-lee/) +- [584e2ba8](https://github.com/algolia/api-clients-automation/commit/584e2ba8) chore(javascript): run lerna exec with double-dash to pass dashed flags to the spanwed command ([#391](https://github.com/algolia/api-clients-automation/pull/391)) by [@eunjae-lee](https://github.com/eunjae-lee/) +- [27b171d5](https://github.com/algolia/api-clients-automation/commit/27b171d5) chore(javascript): split build task to avoid memory issue ([#383](https://github.com/algolia/api-clients-automation/pull/383)) by [@eunjae-lee](https://github.com/eunjae-lee/) +- [fab6c18f](https://github.com/algolia/api-clients-automation/commit/fab6c18f) chore(javascript): build util packages first when building all ([#371](https://github.com/algolia/api-clients-automation/pull/371)) by [@eunjae-lee](https://github.com/eunjae-lee/) +- [fbc6674e](https://github.com/algolia/api-clients-automation/commit/fbc6674e) feat(javascript): provide lite package ([#354](https://github.com/algolia/api-clients-automation/pull/354)) by [@eunjae-lee](https://github.com/eunjae-lee/) +- [1607d96f](https://github.com/algolia/api-clients-automation/commit/1607d96f) chore(javascript): fix ts-node issue ([#368](https://github.com/algolia/api-clients-automation/pull/368)) by [@eunjae-lee](https://github.com/eunjae-lee/) +- [b07f5f99](https://github.com/algolia/api-clients-automation/commit/b07f5f99) fix(javascript): handle parent in models ([#339](https://github.com/algolia/api-clients-automation/pull/339)) by [@shortcuts](https://github.com/shortcuts/) +- [ebafcf32](https://github.com/algolia/api-clients-automation/commit/ebafcf32) fix(javascript): update template to include correct dependency version ([#328](https://github.com/algolia/api-clients-automation/pull/328)) by [@eunjae-lee](https://github.com/eunjae-lee/) +- [0f9a6ba9](https://github.com/algolia/api-clients-automation/commit/0f9a6ba9) chore(javascript): remove dependency to openapitools.json at rollup ([#323](https://github.com/algolia/api-clients-automation/pull/323)) by [@eunjae-lee](https://github.com/eunjae-lee/) +- [0011fcce](https://github.com/algolia/api-clients-automation/commit/0011fcce) chore(javascript): add yarn.lock on release process ([#314](https://github.com/algolia/api-clients-automation/pull/314)) by [@eunjae-lee](https://github.com/eunjae-lee/) +- [7cd51e2c](https://github.com/algolia/api-clients-automation/commit/7cd51e2c) fix(javascript): keep comments and jsdoc in build ([#307](https://github.com/algolia/api-clients-automation/pull/307)) by [@shortcuts](https://github.com/shortcuts/) +- [09259f7f](https://github.com/algolia/api-clients-automation/commit/09259f7f) feat(javascript): expose `requestOptions` and cache options ([#283](https://github.com/algolia/api-clients-automation/pull/283)) by [@shortcuts](https://github.com/shortcuts/) +- [272ebd3b](https://github.com/algolia/api-clients-automation/commit/272ebd3b) feat(javascript): use responses and requests cache ([#281](https://github.com/algolia/api-clients-automation/pull/281)) by [@shortcuts](https://github.com/shortcuts/) +- [2e7f208c](https://github.com/algolia/api-clients-automation/commit/2e7f208c) feat(javascript): add cache layer ([#274](https://github.com/algolia/api-clients-automation/pull/274)) by [@shortcuts](https://github.com/shortcuts/) +- [32c95708](https://github.com/algolia/api-clients-automation/commit/32c95708) fix(javascript): engine support node > 14 ([#260](https://github.com/algolia/api-clients-automation/pull/260)) by [@shortcuts](https://github.com/shortcuts/) +- [1c71efdf](https://github.com/algolia/api-clients-automation/commit/1c71efdf) feat(javascript): expose `models` ([#252](https://github.com/algolia/api-clients-automation/pull/252)) by [@shortcuts](https://github.com/shortcuts/) +- [6d60798c](https://github.com/algolia/api-clients-automation/commit/6d60798c) feat(javascript): upgrade to bundlesize 2 ([#243](https://github.com/algolia/api-clients-automation/pull/243)) by [@shortcuts](https://github.com/shortcuts/) +- [f18d24be](https://github.com/algolia/api-clients-automation/commit/f18d24be) fix(javascript): use package version in rollup ([#232](https://github.com/algolia/api-clients-automation/pull/232)) by [@shortcuts](https://github.com/shortcuts/) +- [e2c5927f](https://github.com/algolia/api-clients-automation/commit/e2c5927f) feat(javascript): use beta npm org ([#226](https://github.com/algolia/api-clients-automation/pull/226)) by [@shortcuts](https://github.com/shortcuts/) +- [fe2120b8](https://github.com/algolia/api-clients-automation/commit/fe2120b8) fix(javascript): use babel plugin for classProperties ([#222](https://github.com/algolia/api-clients-automation/pull/222)) by [@shortcuts](https://github.com/shortcuts/) +- [c06f890d](https://github.com/algolia/api-clients-automation/commit/c06f890d) feat(javascript): provide `algoliasearch` package ([#158](https://github.com/algolia/api-clients-automation/pull/158)) by [@shortcuts](https://github.com/shortcuts/) +- [48571bb2](https://github.com/algolia/api-clients-automation/commit/48571bb2) feat(javascript): remove classes usage ([#156](https://github.com/algolia/api-clients-automation/pull/156)) by [@shortcuts](https://github.com/shortcuts/) +- [acdd4831](https://github.com/algolia/api-clients-automation/commit/acdd4831) feat(javascript): add `addUserAgent` method ([#154](https://github.com/algolia/api-clients-automation/pull/154)) by [@shortcuts](https://github.com/shortcuts/) +- [4e638914](https://github.com/algolia/api-clients-automation/commit/4e638914) fix(javascript): utils build and cache ([#147](https://github.com/algolia/api-clients-automation/pull/147)) by [@shortcuts](https://github.com/shortcuts/) +- [c7e7577f](https://github.com/algolia/api-clients-automation/commit/c7e7577f) feat(javascript): bundle CJS, ESM and UMD ([#135](https://github.com/algolia/api-clients-automation/pull/135)) by [@shortcuts](https://github.com/shortcuts/) +- [bd13ce79](https://github.com/algolia/api-clients-automation/commit/bd13ce79) fix(javascript): prevent conflict with `version` variable ([#141](https://github.com/algolia/api-clients-automation/pull/141)) by [@shortcuts](https://github.com/shortcuts/) +- [fb8c063f](https://github.com/algolia/api-clients-automation/commit/fb8c063f) feat(javascript): monorepo ([#131](https://github.com/algolia/api-clients-automation/pull/131)) by [@shortcuts](https://github.com/shortcuts/) +- [3c1feb68](https://github.com/algolia/api-clients-automation/commit/3c1feb68) fix(javascript): auth via query parameters ([#124](https://github.com/algolia/api-clients-automation/pull/124)) by [@shortcuts](https://github.com/shortcuts/) +- [32fa4ccf](https://github.com/algolia/api-clients-automation/commit/32fa4ccf) fix(javascript): node timeouts ([#123](https://github.com/algolia/api-clients-automation/pull/123)) by [@shortcuts](https://github.com/shortcuts/) +- [e408e4e5](https://github.com/algolia/api-clients-automation/commit/e408e4e5) feat(javascript): add browser xhr requester ([#115](https://github.com/algolia/api-clients-automation/pull/115)) by [@shortcuts](https://github.com/shortcuts/) +- [bf5203ef](https://github.com/algolia/api-clients-automation/commit/bf5203ef) feat(clients): retrieve hosts from spec file ([#111](https://github.com/algolia/api-clients-automation/pull/111)) by [@shortcuts](https://github.com/shortcuts/) +- [5a6aa3be](https://github.com/algolia/api-clients-automation/commit/5a6aa3be) feat(specs): improve consistency and naming ([#96](https://github.com/algolia/api-clients-automation/pull/96)) by [@shortcuts](https://github.com/shortcuts/) +- [48ea9e1c](https://github.com/algolia/api-clients-automation/commit/48ea9e1c) feat(specs): add `servers` ([#98](https://github.com/algolia/api-clients-automation/pull/98)) by [@shortcuts](https://github.com/shortcuts/) +- [622bce16](https://github.com/algolia/api-clients-automation/commit/622bce16) feat(specs): bundle specs ([#91](https://github.com/algolia/api-clients-automation/pull/91)) by [@shortcuts](https://github.com/shortcuts/) +- [5ba87a0b](https://github.com/algolia/api-clients-automation/commit/5ba87a0b) feat(specs): add `abtesting` specs and client ([#76](https://github.com/algolia/api-clients-automation/pull/76)) by [@shortcuts](https://github.com/shortcuts/) +- [a12d2041](https://github.com/algolia/api-clients-automation/commit/a12d2041) feat(specs): add objects endpoints ([#54](https://github.com/algolia/api-clients-automation/pull/54)) by [@damcou](https://github.com/damcou/) +- [70f041f9](https://github.com/algolia/api-clients-automation/commit/70f041f9) feat(specs): improve specs consistency ([#51](https://github.com/algolia/api-clients-automation/pull/51)) by [@shortcuts](https://github.com/shortcuts/) +- [81d59150](https://github.com/algolia/api-clients-automation/commit/81d59150) feat(specs): add `search` endpoints ([#50](https://github.com/algolia/api-clients-automation/pull/50)) by [@shortcuts](https://github.com/shortcuts/) +- [6587e945](https://github.com/algolia/api-clients-automation/commit/6587e945) feat(specs): add `dictionary` specs ([#49](https://github.com/algolia/api-clients-automation/pull/49)) by [@shortcuts](https://github.com/shortcuts/) +- [1bb1322b](https://github.com/algolia/api-clients-automation/commit/1bb1322b) feat(specs): search advanced endpoints APIC-197 ([#40](https://github.com/algolia/api-clients-automation/pull/40)) by [@sbellone](https://github.com/sbellone/) +- [18fa5fab](https://github.com/algolia/api-clients-automation/commit/18fa5fab) feat(specs): add `analytics` specs and client. ([#36](https://github.com/algolia/api-clients-automation/pull/36)) by [@shortcuts](https://github.com/shortcuts/) +- [c1ac7bea](https://github.com/algolia/api-clients-automation/commit/c1ac7bea) feat(specs): add `personalizaton` spec and client ([#27](https://github.com/algolia/api-clients-automation/pull/27)) by [@shortcuts](https://github.com/shortcuts/) +- [ef603fbf](https://github.com/algolia/api-clients-automation/commit/ef603fbf) feat(specs): add `recommend` spec and client ([#19](https://github.com/algolia/api-clients-automation/pull/19)) by [@shortcuts](https://github.com/shortcuts/) +- [47f71b96](https://github.com/algolia/api-clients-automation/commit/47f71b96) feat(specs): add `settings` spec ([#17](https://github.com/algolia/api-clients-automation/pull/17)) by [@shortcuts](https://github.com/shortcuts/) +- [b8e6be72](https://github.com/algolia/api-clients-automation/commit/b8e6be72) fix(specs): correctly pass `searchParams` to the request ([#531](https://github.com/algolia/api-clients-automation/pull/531)) by [@shortcuts](https://github.com/shortcuts/) +- [000f62d9](https://github.com/algolia/api-clients-automation/commit/000f62d9) refactor(javascript): type setTimeout in a way compatible with node & browser ([#527](https://github.com/algolia/api-clients-automation/pull/527)) by [@Haroenv](https://github.com/Haroenv/) +- [bf427124](https://github.com/algolia/api-clients-automation/commit/bf427124) fix(specs): allow `POST` methods to send `read` requests ([#525](https://github.com/algolia/api-clients-automation/pull/525)) by [@shortcuts](https://github.com/shortcuts/) +- [588539c4](https://github.com/algolia/api-clients-automation/commit/588539c4) fix(javascript): remove unused methods of algoliasearch-lite ([#524](https://github.com/algolia/api-clients-automation/pull/524)) by [@shortcuts](https://github.com/shortcuts/) +- [4f8d3558](https://github.com/algolia/api-clients-automation/commit/4f8d3558) feat(javascript): add waitForTask in search client ([#510](https://github.com/algolia/api-clients-automation/pull/510)) by [@eunjae-lee](https://github.com/eunjae-lee/) +- [0d23c52c](https://github.com/algolia/api-clients-automation/commit/0d23c52c) fix(specs): rename `search` method ([#514](https://github.com/algolia/api-clients-automation/pull/514)) by [@shortcuts](https://github.com/shortcuts/) +- [3b3d7067](https://github.com/algolia/api-clients-automation/commit/3b3d7067) fix(specs): correct mistakes ([#509](https://github.com/algolia/api-clients-automation/pull/509)) by [@Haroenv](https://github.com/Haroenv/) +- [6361b602](https://github.com/algolia/api-clients-automation/commit/6361b602) style(specs): add out-of-line-one-of rule (and allOf and anyOf) APIC-418 ([#512](https://github.com/algolia/api-clients-automation/pull/512)) by [@millotp](https://github.com/millotp/) +- [340b7bd5](https://github.com/algolia/api-clients-automation/commit/340b7bd5) fix(specs): correct type for taskID APIC-478 ([#504](https://github.com/algolia/api-clients-automation/pull/504)) by [@millotp](https://github.com/millotp/) +- [f516c247](https://github.com/algolia/api-clients-automation/commit/f516c247) fix(javascript): move logic to custom gens ([#486](https://github.com/algolia/api-clients-automation/pull/486)) by [@shortcuts](https://github.com/shortcuts/) +- [c80d0647](https://github.com/algolia/api-clients-automation/commit/c80d0647) fix(spec): predict server ([#441](https://github.com/algolia/api-clients-automation/pull/441)) by [@shortcuts](https://github.com/shortcuts/) +- [12f246e7](https://github.com/algolia/api-clients-automation/commit/12f246e7) chore: use `Client` suffix ([#386](https://github.com/algolia/api-clients-automation/pull/386)) by [@shortcuts](https://github.com/shortcuts/) +- [be7400be](https://github.com/algolia/api-clients-automation/commit/be7400be) fix(javascript): update version ([#448](https://github.com/algolia/api-clients-automation/pull/448)) by [@shortcuts](https://github.com/shortcuts/) +- [b9677335](https://github.com/algolia/api-clients-automation/commit/b9677335) fix(javascript): add missing descriptions ([#416](https://github.com/algolia/api-clients-automation/pull/416)) by [@shortcuts](https://github.com/shortcuts/) +- [cd565ca3](https://github.com/algolia/api-clients-automation/commit/cd565ca3) chore(javascript): fix npm publish issue ([#409](https://github.com/algolia/api-clients-automation/pull/409)) by [@eunjae-lee](https://github.com/eunjae-lee/) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 3682b3e9d..000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,108 +0,0 @@ -# algoliasearch contributing guide - -Hello and welcome to the contributing guide for algoliasearch. Thanks for considering participating in our project 🙇 - -If this guide does not contain what you are looking for and thus prevents you from contributing, don't hesitate to leave a message on the [community forum](https://discourse.algolia.com/) or to [open an issue](https://github.com/algolia/algoliasearch-client-javascript/issues). - -## Reporting an issue - -Opening an issue is very effective way to contribute because many users might also be impacted. We'll make sure to fix it quickly if it's technically feasible and doesn't have important side effects for other users. - -Before reporting an issue, first check that there is not an already open issue for the same topic using the [issues page](https://github.com/algolia/algoliasearch-client-javascript/issues). Don't hesitate to thumb up an issue that corresponds to the problem you have. - -Another element that will help us go faster at solving the issue is to provide a reproducible test case. - -## The code contribution process - -algoliasearch is developed in TypeScript. For any code contribution, you need to: - -- Fork and clone the project -- Create a new branch for what you want to solve (fix/_issue-number_, feat/_name-of-the-feature_) -- Make your changes -- Open a pull request - -Depending on what you're working on, you might consider different [base branches](#branch-organization). - -Then: - -- Peer review of the pull request (by at least one of the core contributors) -- Automatic checks (tests, [commits](#commit-conventions), [linters](#linting)) -- When everything is green, your contribution is merged 🚀 - -## Commit conventions - -This project follows the [conventional changelog](https://conventionalcommits.org/) approach. This means that all commit messages should be formatted using the following scheme: - -``` -type(scope): description -``` - -In most cases, we use the following types: - -- `fix`: for any resolution of an issue (identified or not) -- `feat`: for any new feature -- `refactor`: for any code change that neither adds a feature nor fixes an issue -- `docs`: for any documentation change or addition -- `chore`: for anything that is not related to the library itself (doc, tooling) - -Even though the scope is optional, we try to fill it in as it helps us better understand the impact of a change. We either use the name of the widget/connector/component impacted or we use impact topic (e.g. `docs`, `tooling`, `deps`, `ci`). - -Finally, if your work is based on an issue on GitHub, please add in the body of the commit message "fix #1234" if it solves the issue #1234 (read "[Closing issues using keywords](https://help.github.com/en/articles/closing-issues-using-keywords)"). - -Some examples of valid commit messages (used as first lines): - -> - fix(searchbox): increase magnifying glass size -> - chore(deps): update dependency rollup-plugin-babel to v3.0.7 -> - fix(connectRefinementList): set default value for limit -> - chore: reword contributions guides - -## Branch organization - -The project is based on the classic GitHub flow: - -- `master` for the current version being worked on – Pull requests for bugs and feature related to the current major version should be created against this branch -- `vX` for each major version (`X` being a number) – Pull requests for critical bug fixes should be created against this branch - -Most of the time, your pull requests should target the `master` branch. - -_Note that no new features will be developed or backported for the `vX` branches._ - -## Requirements - -### Docker - -If you don't want to install dependencies on your host machine, you can follow this [guide](https://github.com/algolia/algoliasearch-client-javascript/blob/master/DOCKER_README.MD) to run code inside a docker container but keep the source files on your favorite IDE. - -### Host machine - -To run this project, you will need: - -- Node.js ≥ 12 (current stable version) – [nvm](https://github.com/creationix/nvm#install-script) is recommended -- [Yarn](https://yarnpkg.com) - -## Linting - -Linters are static checkers for code. They help us maintain a consistent code base. They are used for JavaScript and TypeScript files. - -If your editor support them, then you will see the errors directly there. You can also run them using your command line: - -```sh -yarn lint -``` - -TypeScript files are validated using a combination of [Prettier](https://github.com/prettier/prettier) (strict syntax form) and [ESLint](https://github.com/eslint/eslint) rules (for common mistakes and patterns). We also use [API extractor](https://api-extractor.com) to validate the correct exported types. - -## Release - -### Main version - -To release a stable version, [generate a personal Github token](https://github.com/settings/tokens/new) with the `repo` scope from your logged-in Github account, go on the `master` branch (`git checkout master`) and use: - -```sh -export GITHUB_TOKEN=XXX # You can add this to your .env or .bashrc/.zshrc configuration file. -yarn release -``` - -This will create a new Github PR proposing a PR to be made. Once merged, the CI will take care of publishing the new version on NPM registry. - -If you're part of the Algolia team, you can read more details [here](https://algolia.atlassian.net/wiki/spaces/DX/pages/2034925622/JavaScript+v4+release+process). diff --git a/DOCKER_README.MD b/DOCKER_README.MD deleted file mode 100644 index 0991735ca..000000000 --- a/DOCKER_README.MD +++ /dev/null @@ -1,51 +0,0 @@ -In this page you will find our recommended way of installing Docker on your machine. -This guide is made for macOS users. - -## Install docker - -Install [Docker Desktop](https://docs.docker.com/get-docker/). - -## Build the image - -```bash -docker build -t algolia-js --build-arg NODE_IMAGE=node:$(cat .nvmrc)-alpine . -``` - -## Run the image - -You need to provide few environment variables at runtime to be able to run the [Common Test Suite](https://github.com/algolia/algoliasearch-client-specs/tree/master/common-test-suite). -You can set them up directly in the command: - -```bash -docker run -it --rm --env ALGOLIA_APP_ID=XXXXXX [...] -v $PWD:/app -v /app/node_modules -w /app algolia-js bash -``` - -However, we advise you to export them in your `.bashrc` or `.zshrc`. That way, you can use [Docker's shorten syntax](https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file) to set your variables. - -```bash -### This is needed only to run the full test suite -docker run -it --rm --env ALGOLIA_APPLICATION_ID_1 \ - --env ALGOLIA_ADMIN_KEY_1 \ - --env ALGOLIA_SEARCH_KEY_1 \ - --env ALGOLIA_APPLICATION_ID_2 \ - --env ALGOLIA_ADMIN_KEY_2 \ - --env ALGOLIA_APPLICATION_ID_MCM \ - --env ALGOLIA_ADMIN_KEY_MCM \ --v $PWD:/app -v /app/node_modules -w /app algolia-js bash -``` - -Once your container is running, any changes you make in your IDE are directly reflected in the container, except for the `node_modules` folder. -If you want to add or remove packages, you will have to rebuild the image, this is because the `node_modules` folder is installed in a different folder to improve performance. - -To launch the tests, you can use one of the following commands -```shell script -# run only the unit tests -yarn test:unit - -# run a single test -yarn test:unit nameOfYourTest -``` - -You can find more commands in the `package.json` file. - -Feel free to contact us if you have any questions. diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 0d14a024c..000000000 --- a/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -# Dockerfile -ARG NODE_IMAGE=node:12.16.0-alpine - -FROM $NODE_IMAGE - -# Install the dependencies in the parent folder so they don't get overriden by the bind mount -WORKDIR / - -# We need to install some dependencies for bundlesize (https://github.com/siddharthkp/bundlesize/pull/370) -RUN apk add --no-cache bash python3 make g++ - -COPY package.json yarn.lock ./ - -RUN yarn install - -ENV NODE_PATH=/node_modules -ENV PATH=/node_modules/.bin:$PATH - -WORKDIR /app -COPY . ./ diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..fddf416f9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-Present Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index a67ad2e5a..000000000 --- a/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Algolia - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/README.md b/README.md index 8d23dc4d5..ab149853f 100644 --- a/README.md +++ b/README.md @@ -9,83 +9,75 @@ NPM version NPM downloads jsDelivr Downloads - License + License

- Documentation • + DocumentationInstantSearchCommunity ForumStack OverflowReport a bug • - FAQ • - Support + FAQ • + Support

-**Migration note from v3.x to v4.x** - -> In February 2020, we released v4 of our JavaScript client. If you are using version 3.x of the client, read the [migration guide to version 4.x](https://www.algolia.com/doc/api-client/getting-started/upgrade-guides/javascript/). Version 3.x will **no longer** be under active development. - ## ✨ Features - Thin & **minimal low-level HTTP client** to interact with Algolia's API - Works both on the **browser** and **node.js** -- **UMD compatible**, you can use it with any module loader +- **UMD and ESM compatible**, you can use it with any module loader - Built with TypeScript ## 💡 Getting Started -First, install Algolia JavaScript API Client via the [npm](https://www.npmjs.com/get-npm) package manager: +To get started, you first need to install algoliasearch (or any other available API client package). +All of our clients comes with type definition, and are available for both browser and node environments. + +### With a package manager ```bash -npm install algoliasearch +yarn add algoliasearch@5.23.3 +# or +npm install algoliasearch@5.23.3 +# or +pnpm add algoliasearch@5.23.3 ``` -Then, create objects on your index: +### Without a package manager -```js -const algoliasearch = require("algoliasearch"); - -const client = algoliasearch("YourApplicationID", "YourAdminAPIKey"); -const index = client.initIndex("your_index_name"); - -const objects = [ - { - objectID: 1, - name: "Foo" - } -]; - -index - .saveObjects(objects) - .then(({ objectIDs }) => { - console.log(objectIDs); - }) - .catch(err => { - console.log(err); - }); +Add the following JavaScript snippet to the of your website: + +```html +// for the full client + + +// for the lite client + ``` -Finally, let's actually search using the `search` method: +### Usage + +You can now import the Algolia API client in your project and play with it. ```js -index - .search("Fo") - .then(({ hits }) => { - console.log(hits); - }) - .catch(err => { - console.log(err); - }); +import { algoliasearch } from 'algoliasearch'; + +const client = algoliasearch('YOUR_APP_ID', 'YOUR_API_KEY'); + +// or with the lite client +import { liteClient } from 'algoliasearch/lite'; + +const client = liteClient('YOUR_APP_ID', 'YOUR_API_KEY'); ``` -For full documentation, visit the **[online documentation](https://www.algolia.com/doc/api-client/getting-started/install/javascript/)**. +For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/javascript/v5/methods/search/)**. ## ❓ Troubleshooting -Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/api-client/troubleshooting/faq/javascript/) where you will find answers for the most common issues and gotchas with the client. +Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/libraries/javascript/v5/) where you will find answers for the most common issues and gotchas with the client. You can also open [a GitHub issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=&projects=&template=Bug_report.md) ## 📄 License -Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE.md). +The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 8a77066fc..000000000 --- a/SECURITY.md +++ /dev/null @@ -1,3 +0,0 @@ -## Reporting a Vulnerability - -To report a security vulnerability, please use the [Algolia security email](security@algolia.com). Algolia will coordinate the fix and disclosure. diff --git a/api-extractor.json b/api-extractor.json deleted file mode 100644 index c16de62d3..000000000 --- a/api-extractor.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", - - "apiReport": { - "enabled": false - }, - - "docModel": { - "enabled": false - }, - - "dtsRollup": { - "enabled": true - }, - - "tsdocMetadata": { - "enabled": false - }, - - "messages": { - "compilerMessageReporting": { - "default": { - "logLevel": "warning" - } - }, - - "extractorMessageReporting": { - "default": { - "logLevel": "warning", - "addToApiReportFile": true - }, - - "ae-missing-release-tag": { - "logLevel": "none" - } - }, - - "tsdocMessageReporting": { - "default": { - "logLevel": "warning" - } - } - } -} diff --git a/base.tsup.config.ts b/base.tsup.config.ts new file mode 100644 index 000000000..8fde39295 --- /dev/null +++ b/base.tsup.config.ts @@ -0,0 +1,64 @@ +import path from 'path'; +import type { Options } from 'tsup'; + +type PKG = { + dependencies?: Record; + name: string; +}; + +const requesters = { + fetch: '@algolia/requester-fetch', + worker: '@algolia/requester-fetch', + http: '@algolia/requester-node-http', + xhr: '@algolia/requester-browser-xhr', +}; + +type Requester = keyof typeof requesters; + +export function getBaseConfig(cwd: string): Options { + return { + clean: true, + sourcemap: true, + splitting: false, + tsconfig: path.resolve(cwd, 'tsconfig.json'), + }; +} + +export function getDependencies(pkg: PKG, requester: Requester): string[] { + const deps = Object.keys(pkg.dependencies || {}) || []; + + if (pkg.name !== 'algoliasearch') { + return deps; + } + + switch (requester) { + case 'http': + return deps.filter((dep) => dep !== requesters.fetch && dep !== requesters.xhr); + case 'xhr': + return deps.filter((dep) => dep !== requesters.fetch && dep !== requesters.http); + case 'fetch': + case 'worker': + return deps.filter((dep) => dep !== requesters.xhr && dep !== requesters.http); + default: + throw new Error('unknown requester', requester); + } +} + +export function getBaseNodeOptions(pkg: PKG, cwd: string, requester: Requester = 'http'): Options { + return { + ...getBaseConfig(cwd), + platform: 'node', + target: 'node14', + external: [...getDependencies(pkg, requester), 'node:crypto'], + }; +} + +export function getBaseBrowserOptions(pkg: PKG, cwd: string, requester: Requester = 'xhr'): Options { + return { + ...getBaseConfig(cwd), + platform: 'browser', + format: ['esm'], + target: ['chrome109', 'safari15.6', 'firefox115', 'edge126'], + external: [...getDependencies(pkg, requester), 'dom'], + }; +} diff --git a/config/jest.js b/config/jest.js deleted file mode 100644 index e4c600722..000000000 --- a/config/jest.js +++ /dev/null @@ -1,10 +0,0 @@ -/* eslint functional/no-let: 0 */ // --> OFF -/* eslint functional/immutable-data: 0 */ // --> OFF -/* eslint no-undef: 0 */ // --> OFF -jest.setTimeout(180000); - -global.testing = { - environment: () => environment, - isBrowser: () => isBrowser, - isBrowserLite: () => isBrowser && environment === 'browser-lite', -}; diff --git a/conventional-changelog.config.js b/conventional-changelog.config.js deleted file mode 100644 index 28dc71770..000000000 --- a/conventional-changelog.config.js +++ /dev/null @@ -1,10 +0,0 @@ -/* eslint-disable functional/immutable-data */ -/* eslint-disable import/no-commonjs */ -/* eslint-disable max-len */ - -module.exports = { - writerOpts: { - headerPartial: - '## [v{{version}}](https://github.com/algolia/algoliasearch-client-javascript/compare/{{previousTag}}...{{version}})\n', - }, -}; diff --git a/global.d.ts b/global.d.ts deleted file mode 100644 index 65b56b01a..000000000 --- a/global.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -export {}; - -declare global { - // eslint-disable-next-line no-redeclare - const testing: { - readonly environment: () => string; - readonly isBrowser: () => boolean; - readonly isBrowserLite: () => boolean; - }; -} - -// eslint-disable-next-line import/no-unresolved -import { MethodStubSetter } from 'ts-mockito/lib/MethodStubSetter'; - -declare module 'ts-mockito' { - export function when( - method: Readonly> - ): MethodStubSetter>, TResponse, Error>; -} diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index f0135e341..000000000 --- a/jest.config.js +++ /dev/null @@ -1,99 +0,0 @@ -/* eslint-disable import/no-commonjs, functional/immutable-data */ -const { pathsToModuleNameMapper } = require('ts-jest/utils'); - -const { compilerOptions } = require('./tsconfig'); - -const config = { - testMatch: ['**/__tests__/**/*.test.ts'], - preset: 'ts-jest', - setupFilesAfterEnv: ['config/jest.js', 'jest-mock-console/dist/setupTestFramework.js'], - transform: { - '^.+\\.ts?$': 'ts-jest', - }, - moduleFileExtensions: ['js', 'ts'], - moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { prefix: '/' }), - transformIgnorePatterns: [], - coverageReporters: ['text'], - collectCoverage: true, - collectCoverageFrom: ['**/src*/*.ts', '!**/src/__tests__/*.ts'], - coverageThreshold: { - global: { - branches: 100, - functions: 100, - lines: 100, - statements: 100, - }, - }, -}; - -module.exports = { - projects: [ - Object.assign( - { - displayName: 'browser-lite', - testEnvironment: 'jsdom', - roots: ['packages/client-search/src/__tests__/integration'], - testPathIgnorePatterns: [ - 'packages/client-search/src/__tests__/integration/api-keys.test.ts', - 'packages/client-search/src/__tests__/integration/batching.test.ts', - 'packages/client-search/src/__tests__/integration/browsing.test.ts', - 'packages/client-search/src/__tests__/integration/chunked-batch.test.ts', - 'packages/client-search/src/__tests__/integration/copy-and-move-index.test.ts', - 'packages/client-search/src/__tests__/integration/exists.test.ts', - 'packages/client-search/src/__tests__/integration/get-logs.test.ts', - 'packages/client-search/src/__tests__/integration/indexing.test.ts', - 'packages/client-search/src/__tests__/integration/mcm.test.ts', - 'packages/client-search/src/__tests__/integration/replacing.test.ts', - 'packages/client-search/src/__tests__/integration/rules.test.ts', - 'packages/client-search/src/__tests__/integration/secured-api-keys.test.ts', - 'packages/client-search/src/__tests__/integration/settings.test.ts', - 'packages/client-search/src/__tests__/integration/synonyms.test.ts', - 'packages/client-search/src/__tests__/integration/dictionary.test.ts', - ], - globals: { - environment: 'browser-lite', - isBrowser: true, - 'ts-jest': { isolatedModules: true }, - window: {}, - }, - }, - config - ), - Object.assign( - { - displayName: 'browser', - testEnvironment: 'jsdom', - testPathIgnorePatterns: [ - 'packages/requester-node-http/*', - 'packages/client-search/src/__tests__/integration/secured-api-keys.test.ts', - 'packages/client-search/src/__tests__/integration/dictionary.test.ts', - ], - globals: { - environment: 'browser', - isBrowser: true, - 'ts-jest': { isolatedModules: true }, - window: {}, - }, - }, - config - ), - Object.assign( - { - displayName: 'node', - testEnvironment: 'node', - testPathIgnorePatterns: [ - 'packages/requester-browser-xhr/*', - 'packages/cache-browser-local-storage/*', - 'packages/algoliasearch/src/__tests__/lite.test.ts', - ], - globals: { - environment: 'node', - isBrowser: false, - 'ts-jest': { isolatedModules: true }, - window: {}, - }, - }, - config - ), - ], -}; diff --git a/lerna.json b/lerna.json index 3599923c6..1726e6726 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "npmClient": "yarn", - "useWorkspaces": true, - "version": "4.13.1" + "packages": ["packages/*"], + "version": "independent", + "useNx": true } diff --git a/nx.json b/nx.json new file mode 100644 index 000000000..4023e827c --- /dev/null +++ b/nx.json @@ -0,0 +1,10 @@ +{ + "tasksRunnerOptions": { + "default": { + "runner": "nx/tasks-runners/default", + "options": { + "cacheableOperations": ["build:many", "build:all", "build"] + } + } + } +} diff --git a/package.json b/package.json index 4ed87189d..3fc778af2 100644 --- a/package.json +++ b/package.json @@ -1,111 +1,81 @@ { - "version": "4.13.1", + "name": "algoliasearch-client-javascript", "private": true, - "license": "MIT", + "homepage": "https://github.com/algolia/algoliasearch-client-javascript#readme", + "type": "module", "workspaces": [ "packages/*" ], "scripts": { - "build": "node --max-old-space-size=4096 scripts/build.js", - "generate:exports": "node scripts/generate-exports", - "lint": "eslint . --ext .js,.ts --fix && node ./scripts/sort-package-json.js", - "playground": "./scripts/prepare-playground.sh && yarn serve", - "pre-commit": "yarn test:lint && yarn test:types", - "release": "shipjs prepare", - "setup:browser": "yarn node scripts/setup-test-browser.js", - "test:browser-ci": "yarn setup:browser && ./scripts/prepare-test-browser.sh && wdio ./wdio.saucelabs.conf.js", - "test:browser-locally": "yarn setup:browser && ./scripts/prepare-test-browser.sh && wdio ./wdio.local.conf.js", - "test:build-declarations": "node --max-old-space-size=4096 scripts/test-build-declarations.js", - "test:build-size": "bundlesize", - "test:lint": "eslint . --ext .js,.ts", - "test:locally": "lerna clean --yes && yarn lint && yarn test:types && yarn test:unit", - "test:types": "yarn tsc", - "test:unit": "./scripts/prepare-test-unit.sh && lerna clean --yes && jest --verbose", - "update": "rm -rf node_modules && rm -f yarn.lock && lerna clean --yes && yarn install" - }, - "husky": { - "hooks": { - "pre-commit": "yarn pre-commit" - } + "build": "lerna run build --skip-nx-cache --scope '@algolia/requester-testing' --scope '@algolia/logger-console' --scope 'algoliasearch' --scope '@algolia/client-composition' --scope '@algolia/composition' --include-dependencies", + "clean": "lerna run clean", + "release:publish": "tsc --project scripts/tsconfig.json && node scripts/dist/publish.js", + "test": "lerna run test $*", + "test:size": "bundlewatch", + "test:bundle": "lerna run test:bundle --verbose --include-dependencies" }, "devDependencies": { - "@babel/cli": "7.8.4", - "@babel/core": "7.8.7", - "@babel/preset-env": "7.8.7", - "@babel/preset-typescript": "7.8.3", - "@microsoft/api-extractor": "7.7.8", - "@rollup/plugin-alias": "3.0.1", - "@rollup/plugin-json": "4.0.2", - "@rollup/plugin-node-resolve": "7.1.1", - "@types/jest": "25.1.4", - "@types/node": "13.9.0", - "@typescript-eslint/eslint-plugin": "2.22.0", - "@typescript-eslint/parser": "2.22.0", - "@wdio/cli": "5.18.7", - "@wdio/jasmine-framework": "5.18.6", - "@wdio/local-runner": "5.18.7", - "@wdio/sauce-service": "5.16.10", - "@wdio/selenium-standalone-service": "5.16.10", - "@wdio/spec-reporter": "5.18.7", - "@wdio/static-server-service": "5.16.10", - "barrelsby": "2.2.0", - "bundlesize": "0.18.0", - "dotenv": "8.2.0", - "eslint": "6.8.0", - "eslint-config-algolia": "15.0.0", - "eslint-config-prettier": "6.10.0", - "eslint-import-resolver-alias": "1.1.2", - "eslint-plugin-eslint-comments": "3.1.2", - "eslint-plugin-functional": "3.0.1", - "eslint-plugin-import": "2.20.1", - "eslint-plugin-jest": "23.8.2", - "eslint-plugin-prettier": "3.1.2", - "eslint-plugin-promise": "4.2.1", - "eslint-plugin-simple-import-sort": "5.0.1", - "eslint-plugin-sonarjs": "0.5.0", - "eslint-plugin-wdio": "5.13.2", - "fs-extra": "8.1.0", - "glob": "7.1.6", - "husky": "4.2.3", - "jest": "25.1.0", - "jest-mock-console": "1.0.0", - "lerna": "3.20.2", - "nock": "12.0.2", - "prettier": "1.19.1", - "readable-stream": "3.6.0", - "rollup": "1.32.1", - "rollup-plugin-babel": "4.4.0", - "rollup-plugin-filesize": "6.2.1", - "rollup-plugin-ignore": "1.0.5", - "rollup-plugin-node-globals": "1.4.0", - "rollup-plugin-terser": "5.2.0", - "rollup-plugin-typescript2": "0.26.0", - "serve": "11.3.0", - "shipjs": "0.23.3", - "sort-package-json": "1.40.0", - "ts-jest": "25.2.1", - "ts-mockito": "2.5.0", - "ts-node": "8.6.2", - "typescript": "3.8.3", - "webdriverio": "5.18.7", - "xhr-mock": "2.5.1" + "@types/node": "22.14.0", + "bundlewatch": "0.4.0", + "execa": "9.5.2", + "lerna": "8.2.1", + "rollup": "4.39.0", + "typescript": "5.8.3" }, - "engines": { - "node": ">= 8.0.0", - "yarn": ">= 1.6.0" + "bundlewatch": { + "files": [ + { + "path": "packages/algoliasearch/dist/algoliasearch.umd.js", + "maxSize": "18.15KB" + }, + { + "path": "packages/algoliasearch/dist/lite/builds/browser.umd.js", + "maxSize": "3.95KB" + }, + { + "path": "packages/client-abtesting/dist/builds/browser.umd.js", + "maxSize": "4.20KB" + }, + { + "path": "packages/client-analytics/dist/builds/browser.umd.js", + "maxSize": "4.85KB" + }, + { + "path": "packages/client-composition/dist/builds/browser.umd.js", + "maxSize": "4.55KB" + }, + { + "path": "packages/client-insights/dist/builds/browser.umd.js", + "maxSize": "3.90KB" + }, + { + "path": "packages/client-personalization/dist/builds/browser.umd.js", + "maxSize": "4.05KB" + }, + { + "path": "packages/client-query-suggestions/dist/builds/browser.umd.js", + "maxSize": "4.05KB" + }, + { + "path": "packages/client-search/dist/builds/browser.umd.js", + "maxSize": "7.35KB" + }, + { + "path": "packages/ingestion/dist/builds/browser.umd.js", + "maxSize": "6.05KB" + }, + { + "path": "packages/monitoring/dist/builds/browser.umd.js", + "maxSize": "3.95KB" + }, + { + "path": "packages/recommend/dist/builds/browser.umd.js", + "maxSize": "4.15KB" + } + ] }, - "bundlesize": [ - { - "path": "packages/algoliasearch/dist/algoliasearch.umd.js", - "maxSize": "7.95KB" - }, - { - "path": "packages/algoliasearch/dist/algoliasearch-lite.umd.js", - "maxSize": "4.4KB" - }, - { - "path": "packages/recommend/dist/recommend.umd.js", - "maxSize": "4.2KB" - } - ] + "engines": { + "node": ">= 14.0.0", + "yarn": "^4.0.0" + } } diff --git a/packages/algoliasearch/LICENSE b/packages/algoliasearch/LICENSE new file mode 100644 index 000000000..fddf416f9 --- /dev/null +++ b/packages/algoliasearch/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-Present Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/algoliasearch/README.md b/packages/algoliasearch/README.md index 9e227e857..ab149853f 100644 --- a/packages/algoliasearch/README.md +++ b/packages/algoliasearch/README.md @@ -9,74 +9,75 @@ NPM version NPM downloads jsDelivr Downloads - License + License

- Documentation • + DocumentationInstantSearchCommunity ForumStack OverflowReport a bug • - Support + FAQ • + Support

## ✨ Features - Thin & **minimal low-level HTTP client** to interact with Algolia's API - Works both on the **browser** and **node.js** -- **UMD compatible**, you can use it with any module loader +- **UMD and ESM compatible**, you can use it with any module loader - Built with TypeScript ## 💡 Getting Started -First, install Algolia JavaScript API Client via the [npm](https://www.npmjs.com/get-npm) package manager: +To get started, you first need to install algoliasearch (or any other available API client package). +All of our clients comes with type definition, and are available for both browser and node environments. + +### With a package manager ```bash -npm install algoliasearch +yarn add algoliasearch@5.23.3 +# or +npm install algoliasearch@5.23.3 +# or +pnpm add algoliasearch@5.23.3 ``` -Then, create objects on your index: +### Without a package manager -```js -const algoliasearch = require("algoliasearch"); - -const client = algoliasearch("YourApplicationID", "YourAdminAPIKey"); -const index = client.initIndex("your_index_name"); - -const objects = [ - { - objectID: 1, - name: "Foo" - } -]; - -index - .saveObjects(objects) - .then(({ objectIDs }) => { - console.log(objectIDs); - }) - .catch(err => { - console.log(err); - }); +Add the following JavaScript snippet to the of your website: + +```html +// for the full client + + +// for the lite client + ``` -Finally, let's actually search using the `search` method: +### Usage + +You can now import the Algolia API client in your project and play with it. ```js -index - .search("Fo") - .then(({ hits }) => { - console.log(hits); - }) - .catch(err => { - console.log(err); - }); +import { algoliasearch } from 'algoliasearch'; + +const client = algoliasearch('YOUR_APP_ID', 'YOUR_API_KEY'); + +// or with the lite client +import { liteClient } from 'algoliasearch/lite'; + +const client = liteClient('YOUR_APP_ID', 'YOUR_API_KEY'); ``` -For full documentation, visit the **[online documentation](https://www.algolia.com/doc/api-client/getting-started/install/javascript/)**. +For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/javascript/v5/methods/search/)**. + +## ❓ Troubleshooting + +Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/libraries/javascript/v5/) where you will find answers for the most common issues and gotchas with the client. You can also open [a GitHub issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=&projects=&template=Bug_report.md) ## 📄 License -Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE.md). +The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). diff --git a/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts b/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts new file mode 100644 index 000000000..b6687a597 --- /dev/null +++ b/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts @@ -0,0 +1,33 @@ +import { expect, test, vi } from 'vitest'; + +import { LogLevelEnum } from '../../client-common/src/types'; +import { createConsoleLogger } from '../../logger-console/src/logger'; +import { algoliasearch, apiClientVersion } from '../builds/browser'; + +test('sets the ua', () => { + const client = algoliasearch('APP_ID', 'API_KEY'); + + expect(client.transporter.algoliaAgent).toEqual({ + add: expect.any(Function), + value: expect.stringContaining( + `Algolia for JavaScript (${apiClientVersion}); Search (${apiClientVersion}); Browser`, + ), + }); +}); + +test('with logger', () => { + vi.spyOn(console, 'debug'); + vi.spyOn(console, 'info'); + vi.spyOn(console, 'error'); + + const client = algoliasearch('APP_ID', 'API_KEY', { + logger: createConsoleLogger(LogLevelEnum.Debug), + }); + + expect(async () => { + await client.setSettings({ indexName: 'foo', indexSettings: {} }); + expect(console.debug).toHaveBeenCalledTimes(1); + expect(console.info).toHaveBeenCalledTimes(1); + expect(console.error).toHaveBeenCalledTimes(1); + }).not.toThrow(); +}); diff --git a/packages/algoliasearch/__tests__/algoliasearch.common.test.ts b/packages/algoliasearch/__tests__/algoliasearch.common.test.ts new file mode 100644 index 000000000..ffdcf3b9a --- /dev/null +++ b/packages/algoliasearch/__tests__/algoliasearch.common.test.ts @@ -0,0 +1,384 @@ +import { describe, expect, test } from 'vitest'; + +import { + DEFAULT_CONNECT_TIMEOUT_BROWSER, + DEFAULT_READ_TIMEOUT_BROWSER, + DEFAULT_WRITE_TIMEOUT_BROWSER, +} from '@algolia/client-common'; +import type { EchoResponse } from '@algolia/requester-testing'; + +import { browserEchoRequester } from '../../requester-testing/src/browserEchoRequester'; +import { algoliasearch, apiClientVersion } from '../builds/browser'; +import { liteClient } from '../lite/builds/browser'; + +const client = algoliasearch('APP_ID', 'API_KEY', { + requester: browserEchoRequester(), +}); + +describe('api', () => { + test('exposes the `appId` currently in use at the root of the API', () => { + expect(client.appId).toEqual('APP_ID'); + }); + + test('exposes the `apiKey` currently in use at the root of the API', () => { + expect(client.apiKey).toEqual('API_KEY'); + }); + + test('provides a `clearCache` method', () => { + expect(client.clearCache).not.toBeUndefined(); + expect(() => client.clearCache()).not.toThrow(); + }); + + test('provides a `setClientApiKey` method', () => { + const _client = algoliasearch('foo', 'bar'); + expect(_client.transporter.baseQueryParameters['x-algolia-api-key']).toEqual('bar'); + expect(_client.setClientApiKey).not.toBeUndefined(); + _client.setClientApiKey({ apiKey: 'tabac' }); + expect(_client.transporter.baseQueryParameters['x-algolia-api-key']).toEqual('tabac'); + }); + + test('throws with undefined API key', () => { + expect(() => algoliasearch('APP_ID', '')).toThrow('`apiKey` is missing'); + }); + + test('throws with undefined app ID', () => { + expect(() => algoliasearch('', 'API_KEY')).toThrow('`appId` is missing'); + }); + + test('provides the search client at the root of the API', () => { + expect(client.search).not.toBeUndefined(); + }); + + describe('_ua', () => { + test('provides a backward compatible `_ua` variable at the root of the client', () => { + expect(client._ua).toEqual( + expect.stringContaining(`Algolia for JavaScript (${apiClientVersion}); Search (${apiClientVersion});`), + ); + }); + + test('keeps `_ua` updated with the transporter algolia agent', () => { + expect(client._ua).toEqual(expect.stringMatching(/.*; Browser$/g)); + + client.addAlgoliaAgent('Vitest', '0.0.1'); + + expect(client._ua).toEqual(expect.stringMatching(/.*; Vitest \(0\.0\.1\)$/g)); + }); + }); + + test('exposes the search client transporter for the algoliasearch client', () => { + expect(client.transporter).not.toBeUndefined(); + expect(client.transporter).toEqual({ + algoliaAgent: { + add: expect.any(Function), + value: expect.stringContaining( + `Algolia for JavaScript (${apiClientVersion}); Search (${apiClientVersion}); Browser`, + ), + }, + baseQueryParameters: { + 'x-algolia-api-key': 'API_KEY', + 'x-algolia-application-id': 'APP_ID', + }, + baseHeaders: { + 'content-type': 'text/plain', + }, + hosts: expect.arrayContaining([ + { + accept: 'read', + protocol: 'https', + url: 'APP_ID-dsn.algolia.net', + }, + { + accept: 'write', + protocol: 'https', + url: 'APP_ID.algolia.net', + }, + { + accept: 'readWrite', + protocol: 'https', + url: 'APP_ID-3.algolianet.com', + }, + { + accept: 'readWrite', + protocol: 'https', + url: 'APP_ID-1.algolianet.com', + }, + { + accept: 'readWrite', + protocol: 'https', + url: 'APP_ID-2.algolianet.com', + }, + ]), + logger: { + debug: expect.any(Function), + error: expect.any(Function), + info: expect.any(Function), + }, + hostsCache: { + clear: expect.any(Function), + delete: expect.any(Function), + get: expect.any(Function), + set: expect.any(Function), + }, + request: expect.any(Function), + requester: { + send: expect.any(Function), + }, + requestsCache: { + clear: expect.any(Function), + delete: expect.any(Function), + get: expect.any(Function), + set: expect.any(Function), + }, + responsesCache: { + clear: expect.any(Function), + delete: expect.any(Function), + get: expect.any(Function), + set: expect.any(Function), + }, + timeouts: { + connect: DEFAULT_CONNECT_TIMEOUT_BROWSER, + read: DEFAULT_READ_TIMEOUT_BROWSER, + write: DEFAULT_WRITE_TIMEOUT_BROWSER, + }, + }); + }); + + describe('init clients', () => { + test('provides an init method for the analytics client', () => { + expect(client.initAnalytics).not.toBeUndefined(); + }); + + test('provides an init method for the abtesting client', () => { + expect(client.initAbtesting).not.toBeUndefined(); + }); + + test('provides an init method for the personalization client', () => { + expect(client.initPersonalization).not.toBeUndefined(); + }); + + test('provides an init method for the recommend client', () => { + expect(client.initRecommend).not.toBeUndefined(); + }); + + test('default `init` clients to the root `algoliasearch` credentials', async () => { + const abtestingClient = client.initAbtesting({ options: { requester: browserEchoRequester() } }); + const analyticsClient = client.initAnalytics({ options: { requester: browserEchoRequester() } }); + const recommendClient = client.initRecommend({ options: { requester: browserEchoRequester() } }); + const personalizationClient = client.initPersonalization({ + region: 'eu', + options: { requester: browserEchoRequester() }, + }); + + const res1 = (await abtestingClient.customGet({ + path: 'abtestingClient', + })) as unknown as EchoResponse; + const res2 = (await analyticsClient.customGet({ + path: 'analyticsClient', + })) as unknown as EchoResponse; + const res3 = (await personalizationClient.customGet({ + path: 'personalizationClient', + })) as unknown as EchoResponse; + const res4 = (await recommendClient.customGet({ + path: 'recommendClient', + })) as unknown as EchoResponse; + + expect(res1.headers).toEqual( + expect.objectContaining({ + 'x-algolia-application-id': 'APP_ID', + 'x-algolia-api-key': 'API_KEY', + }), + ); + expect(res2.headers).toEqual( + expect.objectContaining({ + 'x-algolia-application-id': 'APP_ID', + 'x-algolia-api-key': 'API_KEY', + }), + ); + expect(res3.headers).toEqual( + expect.objectContaining({ + 'x-algolia-application-id': 'APP_ID', + 'x-algolia-api-key': 'API_KEY', + }), + ); + expect(res4.headers).toEqual( + expect.objectContaining({ + 'x-algolia-application-id': 'APP_ID', + 'x-algolia-api-key': 'API_KEY', + }), + ); + }); + + test('`init` clients accept different credentials', async () => { + const abtestingClient = client.initAbtesting({ + appId: 'appId1', + apiKey: 'apiKey1', + options: { requester: browserEchoRequester() }, + }); + const analyticsClient = client.initAnalytics({ + appId: 'appId2', + apiKey: 'apiKey2', + options: { requester: browserEchoRequester() }, + }); + const personalizationClient = client.initPersonalization({ + appId: 'appId3', + apiKey: 'apiKey3', + region: 'eu', + options: { requester: browserEchoRequester() }, + }); + const recommendClient = client.initRecommend({ + appId: 'appId4', + apiKey: 'apiKey4', + options: { requester: browserEchoRequester() }, + }); + + const res1 = (await abtestingClient.customGet({ + path: 'abtestingClient', + })) as unknown as EchoResponse; + const res2 = (await analyticsClient.customGet({ + path: 'analyticsClient', + })) as unknown as EchoResponse; + const res3 = (await personalizationClient.customGet({ + path: 'personalizationClient', + })) as unknown as EchoResponse; + const res4 = (await recommendClient.customGet({ + path: 'recommendClient', + })) as unknown as EchoResponse; + + expect(res1.headers).toEqual( + expect.objectContaining({ + 'x-algolia-application-id': 'appId1', + 'x-algolia-api-key': 'apiKey1', + }), + ); + expect(res2.headers).toEqual( + expect.objectContaining({ + 'x-algolia-application-id': 'appId2', + 'x-algolia-api-key': 'apiKey2', + }), + ); + expect(res3.headers).toEqual( + expect.objectContaining({ + 'x-algolia-application-id': 'appId3', + 'x-algolia-api-key': 'apiKey3', + }), + ); + expect(res4.headers).toEqual( + expect.objectContaining({ + 'x-algolia-application-id': 'appId4', + 'x-algolia-api-key': 'apiKey4', + }), + ); + }); + }); +}); + +describe('bundle', () => { + test('expose both a full bundled package and a lite one', () => { + expect(liteClient).not.toBeUndefined(); + expect(algoliasearch).not.toBeUndefined(); + }); +}); + +/** + * We only test the legacy signature, as `algoliasearch` inherits methods from the `client-search`. + * The new signatures are already tested in the CTS. + */ +describe('search with legacy signature', () => { + test('allows searching for query', async () => { + const req = (await client.search([ + { + indexName: 'theIndexName', + }, + ])) as unknown as EchoResponse; + + expect(req.path).toEqual('/1/indexes/*/queries'); + expect(req.method).toEqual('POST'); + expect(req.data).toEqual({ requests: [{ indexName: 'theIndexName' }] }); + expect(req.searchParams).toStrictEqual({ + 'x-algolia-api-key': 'API_KEY', + 'x-algolia-application-id': 'APP_ID', + }); + }); + + test('allows searching for facet', async () => { + const req = (await client.search([ + { + indexName: 'theIndexName', + type: 'facet', + facet: 'theFacet', + }, + ])) as unknown as EchoResponse; + + expect(req.path).toEqual('/1/indexes/*/queries'); + expect(req.method).toEqual('POST'); + expect(req.data).toEqual({ + requests: [{ indexName: 'theIndexName', type: 'facet', facet: 'theFacet' }], + }); + expect(req.searchParams).toStrictEqual({ + 'x-algolia-api-key': 'API_KEY', + 'x-algolia-application-id': 'APP_ID', + }); + }); + + test('accepts a `params` parameter for `searchParams`', async () => { + const req = (await client.search([ + { + indexName: 'theIndexName', + params: { + hitsPerPage: 42, + }, + }, + ])) as unknown as EchoResponse; + + expect(req.path).toEqual('/1/indexes/*/queries'); + expect(req.method).toEqual('POST'); + expect(req.data).toEqual({ + requests: [{ indexName: 'theIndexName', hitsPerPage: 42 }], + }); + expect(req.searchParams).toStrictEqual({ + 'x-algolia-api-key': 'API_KEY', + 'x-algolia-application-id': 'APP_ID', + }); + }); +}); + +describe('init', () => { + test('sets authMode', async () => { + const qpClient = algoliasearch('foo', 'bar', { + authMode: 'WithinQueryParameters', + requester: browserEchoRequester(), + }); + const headerClient = algoliasearch('foo', 'bar', { + authMode: 'WithinHeaders', + requester: browserEchoRequester(), + }); + + const qpResult = (await qpClient.customGet({ + path: '1/foo', + })) as unknown as EchoResponse; + expect(qpResult.searchParams).toEqual({ + 'x-algolia-api-key': 'bar', + 'x-algolia-application-id': 'foo', + }); + + const headerResult = (await headerClient.customGet({ + path: '1/bar', + })) as unknown as EchoResponse; + expect(headerResult.headers).toEqual({ + accept: 'application/json', + 'content-type': 'text/plain', + 'x-algolia-api-key': 'bar', + 'x-algolia-application-id': 'foo', + }); + }); + + test('defaults to qp', async () => { + const res = (await client.customGet({ + path: '1/foo', + })) as unknown as EchoResponse; + expect(res.searchParams).toEqual({ + 'x-algolia-api-key': 'API_KEY', + 'x-algolia-application-id': 'APP_ID', + }); + }); +}); diff --git a/packages/algoliasearch/__tests__/algoliasearch.fetch.test.ts b/packages/algoliasearch/__tests__/algoliasearch.fetch.test.ts new file mode 100644 index 000000000..5dd1d92f5 --- /dev/null +++ b/packages/algoliasearch/__tests__/algoliasearch.fetch.test.ts @@ -0,0 +1,40 @@ +import { expect, test, vi } from 'vitest'; + +import { LogLevelEnum } from '../../client-common/src/types'; +import { createConsoleLogger } from '../../logger-console/src/logger'; +import { algoliasearch, apiClientVersion } from '../builds/fetch'; + +test('sets the ua', () => { + const client = algoliasearch('APP_ID', 'API_KEY'); + expect(client.transporter.algoliaAgent).toEqual({ + add: expect.any(Function), + value: expect.stringContaining(`Algolia for JavaScript (${apiClientVersion}); Search (${apiClientVersion}); Fetch`), + }); +}); + +test('forwards node search helpers', () => { + const client = algoliasearch('APP_ID', 'API_KEY'); + expect(client.generateSecuredApiKey).not.toBeUndefined(); + expect(client.getSecuredApiKeyRemainingValidity).not.toBeUndefined(); + expect(() => { + const resp = client.generateSecuredApiKey({ parentApiKey: 'foo', restrictions: { validUntil: 200 } }); + client.getSecuredApiKeyRemainingValidity({ securedApiKey: resp }); + }).not.toThrow(); +}); + +test('with logger', () => { + vi.spyOn(console, 'debug'); + vi.spyOn(console, 'info'); + vi.spyOn(console, 'error'); + + const client = algoliasearch('APP_ID', 'API_KEY', { + logger: createConsoleLogger(LogLevelEnum.Debug), + }); + + expect(async () => { + await client.setSettings({ indexName: 'foo', indexSettings: {} }); + expect(console.debug).toHaveBeenCalledTimes(1); + expect(console.info).toHaveBeenCalledTimes(1); + expect(console.error).toHaveBeenCalledTimes(1); + }).not.toThrow(); +}); diff --git a/packages/algoliasearch/__tests__/algoliasearch.node.test.ts b/packages/algoliasearch/__tests__/algoliasearch.node.test.ts new file mode 100644 index 000000000..8c4d3bc27 --- /dev/null +++ b/packages/algoliasearch/__tests__/algoliasearch.node.test.ts @@ -0,0 +1,42 @@ +import { expect, test, vi } from 'vitest'; + +import { LogLevelEnum } from '../../client-common/src/types'; +import { createConsoleLogger } from '../../logger-console/src/logger'; +import { algoliasearch, apiClientVersion } from '../builds/node'; + +test('sets the ua', () => { + const client = algoliasearch('APP_ID', 'API_KEY'); + expect(client.transporter.algoliaAgent).toEqual({ + add: expect.any(Function), + value: expect.stringContaining( + `Algolia for JavaScript (${apiClientVersion}); Search (${apiClientVersion}); Node.js`, + ), + }); +}); + +test('forwards node search helpers', () => { + const client = algoliasearch('APP_ID', 'API_KEY'); + expect(client.generateSecuredApiKey).not.toBeUndefined(); + expect(client.getSecuredApiKeyRemainingValidity).not.toBeUndefined(); + expect(() => { + const resp = client.generateSecuredApiKey({ parentApiKey: 'foo', restrictions: { validUntil: 200 } }); + client.getSecuredApiKeyRemainingValidity({ securedApiKey: resp }); + }).not.toThrow(); +}); + +test('with logger', () => { + vi.spyOn(console, 'debug'); + vi.spyOn(console, 'info'); + vi.spyOn(console, 'error'); + + const client = algoliasearch('APP_ID', 'API_KEY', { + logger: createConsoleLogger(LogLevelEnum.Debug), + }); + + expect(async () => { + await client.setSettings({ indexName: 'foo', indexSettings: {} }); + expect(console.debug).toHaveBeenCalledTimes(1); + expect(console.info).toHaveBeenCalledTimes(1); + expect(console.error).toHaveBeenCalledTimes(1); + }).not.toThrow(); +}); diff --git a/packages/algoliasearch/__tests__/algoliasearch.worker.test.ts b/packages/algoliasearch/__tests__/algoliasearch.worker.test.ts new file mode 100644 index 000000000..5b7495d69 --- /dev/null +++ b/packages/algoliasearch/__tests__/algoliasearch.worker.test.ts @@ -0,0 +1,55 @@ +import { expect, test, vi } from 'vitest'; + +import { LogLevelEnum } from '../../client-common/src/types'; +import { createConsoleLogger } from '../../logger-console/src/logger'; +import { algoliasearch as node_algoliasearch } from '../builds/node'; +import { algoliasearch, apiClientVersion } from '../builds/worker'; + +test('sets the ua', () => { + const client = algoliasearch('APP_ID', 'API_KEY'); + expect(client.transporter.algoliaAgent).toEqual({ + add: expect.any(Function), + value: expect.stringContaining( + `Algolia for JavaScript (${apiClientVersion}); Search (${apiClientVersion}); Worker`, + ), + }); +}); + +test('forwards node search helpers', () => { + const client = algoliasearch('APP_ID', 'API_KEY'); + expect(client.generateSecuredApiKey).not.toBeUndefined(); + expect(client.getSecuredApiKeyRemainingValidity).not.toBeUndefined(); + expect(async () => { + const resp = await client.generateSecuredApiKey({ parentApiKey: 'foo', restrictions: { validUntil: 200 } }); + client.getSecuredApiKeyRemainingValidity({ securedApiKey: resp }); + }).not.toThrow(); +}); + +test('web crypto implementation gives the same result as node crypto', async () => { + const client = algoliasearch('APP_ID', 'API_KEY'); + const nodeClient = node_algoliasearch('APP_ID', 'API_KEY'); + const resp = await client.generateSecuredApiKey({ parentApiKey: 'foo-bar', restrictions: { validUntil: 200 } }); + const nodeResp = await nodeClient.generateSecuredApiKey({ + parentApiKey: 'foo-bar', + restrictions: { validUntil: 200 }, + }); + + expect(resp).toEqual(nodeResp); +}); + +test('with logger', () => { + vi.spyOn(console, 'debug'); + vi.spyOn(console, 'info'); + vi.spyOn(console, 'error'); + + const client = algoliasearch('APP_ID', 'API_KEY', { + logger: createConsoleLogger(LogLevelEnum.Debug), + }); + + expect(async () => { + await client.setSettings({ indexName: 'foo', indexSettings: {} }); + expect(console.debug).toHaveBeenCalledTimes(1); + expect(console.info).toHaveBeenCalledTimes(1); + expect(console.error).toHaveBeenCalledTimes(1); + }).not.toThrow(); +}); diff --git a/packages/algoliasearch/__tests__/tsconfig.json b/packages/algoliasearch/__tests__/tsconfig.json new file mode 100644 index 000000000..b719fa625 --- /dev/null +++ b/packages/algoliasearch/__tests__/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "noEmit": true, + "skipLibCheck": true + }, + "include": ["*.ts"] +} diff --git a/packages/algoliasearch/api-extractor-lite.json b/packages/algoliasearch/api-extractor-lite.json deleted file mode 100644 index 9488148a2..000000000 --- a/packages/algoliasearch/api-extractor-lite.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages/algoliasearch/src/builds/browserLite.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/algoliasearch-lite.d.ts" - } -} diff --git a/packages/algoliasearch/api-extractor.json b/packages/algoliasearch/api-extractor.json deleted file mode 100644 index 6f029708c..000000000 --- a/packages/algoliasearch/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages/algoliasearch/src/builds/node.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/algoliasearch.d.ts" - } -} diff --git a/packages/algoliasearch/builds/browser.ts b/packages/algoliasearch/builds/browser.ts new file mode 100644 index 000000000..004e88e2a --- /dev/null +++ b/packages/algoliasearch/builds/browser.ts @@ -0,0 +1,130 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ClientOptions } from '@algolia/client-common'; + +import type { AbtestingClient } from '@algolia/client-abtesting'; +import { abtestingClient } from '@algolia/client-abtesting'; +import type { AnalyticsClient } from '@algolia/client-analytics'; +import { analyticsClient } from '@algolia/client-analytics'; +import type { InsightsClient } from '@algolia/client-insights'; +import { insightsClient } from '@algolia/client-insights'; +import type { PersonalizationClient } from '@algolia/client-personalization'; +import { personalizationClient } from '@algolia/client-personalization'; +import type { QuerySuggestionsClient } from '@algolia/client-query-suggestions'; +import { querySuggestionsClient } from '@algolia/client-query-suggestions'; +import type { SearchClient } from '@algolia/client-search'; +import { searchClient } from '@algolia/client-search'; +import type { IngestionClient } from '@algolia/ingestion'; +import { ingestionClient } from '@algolia/ingestion'; +import type { MonitoringClient } from '@algolia/monitoring'; +import { monitoringClient } from '@algolia/monitoring'; +import type { RecommendClient } from '@algolia/recommend'; +import { recommendClient } from '@algolia/recommend'; + +import type { + AbtestingRegionOptions, + AnalyticsRegionOptions, + IngestionRegionOptions, + InitClientOptions, + InsightsRegionOptions, + PersonalizationRegionOptions, + QuerySuggestionsRegionOptions, +} from './models'; + +export * from './models'; + +export type Algoliasearch = SearchClient & { + initAbtesting: (initOptions: InitClientOptions & AbtestingRegionOptions) => AbtestingClient; + initAnalytics: (initOptions: InitClientOptions & AnalyticsRegionOptions) => AnalyticsClient; + initIngestion: (initOptions: InitClientOptions & IngestionRegionOptions) => IngestionClient; + initInsights: (initOptions: InitClientOptions & InsightsRegionOptions) => InsightsClient; + initMonitoring: (initOptions?: InitClientOptions) => MonitoringClient; + initPersonalization: (initOptions: InitClientOptions & PersonalizationRegionOptions) => PersonalizationClient; + initQuerySuggestions: (initOptions: InitClientOptions & QuerySuggestionsRegionOptions) => QuerySuggestionsClient; + initRecommend: (initOptions?: InitClientOptions) => RecommendClient; +}; + +export function algoliasearch(appId: string, apiKey: string, options?: ClientOptions): Algoliasearch { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + const client = searchClient(appId, apiKey, options); + + return { + ...client, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return client.transporter.algoliaAgent.value; + }, + + initAbtesting: (initOptions: InitClientOptions & AbtestingRegionOptions): AbtestingClient => { + return abtestingClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initAnalytics: (initOptions: InitClientOptions & AnalyticsRegionOptions): AnalyticsClient => { + return analyticsClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initIngestion: (initOptions: InitClientOptions & IngestionRegionOptions): IngestionClient => { + return ingestionClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initInsights: (initOptions: InitClientOptions & InsightsRegionOptions): InsightsClient => { + return insightsClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initMonitoring: (initOptions: InitClientOptions = {}): MonitoringClient => { + return monitoringClient(initOptions.appId || appId, initOptions.apiKey || apiKey, initOptions.options); + }, + + initPersonalization: (initOptions: InitClientOptions & PersonalizationRegionOptions): PersonalizationClient => { + return personalizationClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initQuerySuggestions: (initOptions: InitClientOptions & QuerySuggestionsRegionOptions): QuerySuggestionsClient => { + return querySuggestionsClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initRecommend: (initOptions: InitClientOptions = {}): RecommendClient => { + return recommendClient(initOptions.appId || appId, initOptions.apiKey || apiKey, initOptions.options); + }, + }; +} diff --git a/packages/algoliasearch/builds/fetch.ts b/packages/algoliasearch/builds/fetch.ts new file mode 100644 index 000000000..004e88e2a --- /dev/null +++ b/packages/algoliasearch/builds/fetch.ts @@ -0,0 +1,130 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ClientOptions } from '@algolia/client-common'; + +import type { AbtestingClient } from '@algolia/client-abtesting'; +import { abtestingClient } from '@algolia/client-abtesting'; +import type { AnalyticsClient } from '@algolia/client-analytics'; +import { analyticsClient } from '@algolia/client-analytics'; +import type { InsightsClient } from '@algolia/client-insights'; +import { insightsClient } from '@algolia/client-insights'; +import type { PersonalizationClient } from '@algolia/client-personalization'; +import { personalizationClient } from '@algolia/client-personalization'; +import type { QuerySuggestionsClient } from '@algolia/client-query-suggestions'; +import { querySuggestionsClient } from '@algolia/client-query-suggestions'; +import type { SearchClient } from '@algolia/client-search'; +import { searchClient } from '@algolia/client-search'; +import type { IngestionClient } from '@algolia/ingestion'; +import { ingestionClient } from '@algolia/ingestion'; +import type { MonitoringClient } from '@algolia/monitoring'; +import { monitoringClient } from '@algolia/monitoring'; +import type { RecommendClient } from '@algolia/recommend'; +import { recommendClient } from '@algolia/recommend'; + +import type { + AbtestingRegionOptions, + AnalyticsRegionOptions, + IngestionRegionOptions, + InitClientOptions, + InsightsRegionOptions, + PersonalizationRegionOptions, + QuerySuggestionsRegionOptions, +} from './models'; + +export * from './models'; + +export type Algoliasearch = SearchClient & { + initAbtesting: (initOptions: InitClientOptions & AbtestingRegionOptions) => AbtestingClient; + initAnalytics: (initOptions: InitClientOptions & AnalyticsRegionOptions) => AnalyticsClient; + initIngestion: (initOptions: InitClientOptions & IngestionRegionOptions) => IngestionClient; + initInsights: (initOptions: InitClientOptions & InsightsRegionOptions) => InsightsClient; + initMonitoring: (initOptions?: InitClientOptions) => MonitoringClient; + initPersonalization: (initOptions: InitClientOptions & PersonalizationRegionOptions) => PersonalizationClient; + initQuerySuggestions: (initOptions: InitClientOptions & QuerySuggestionsRegionOptions) => QuerySuggestionsClient; + initRecommend: (initOptions?: InitClientOptions) => RecommendClient; +}; + +export function algoliasearch(appId: string, apiKey: string, options?: ClientOptions): Algoliasearch { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + const client = searchClient(appId, apiKey, options); + + return { + ...client, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return client.transporter.algoliaAgent.value; + }, + + initAbtesting: (initOptions: InitClientOptions & AbtestingRegionOptions): AbtestingClient => { + return abtestingClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initAnalytics: (initOptions: InitClientOptions & AnalyticsRegionOptions): AnalyticsClient => { + return analyticsClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initIngestion: (initOptions: InitClientOptions & IngestionRegionOptions): IngestionClient => { + return ingestionClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initInsights: (initOptions: InitClientOptions & InsightsRegionOptions): InsightsClient => { + return insightsClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initMonitoring: (initOptions: InitClientOptions = {}): MonitoringClient => { + return monitoringClient(initOptions.appId || appId, initOptions.apiKey || apiKey, initOptions.options); + }, + + initPersonalization: (initOptions: InitClientOptions & PersonalizationRegionOptions): PersonalizationClient => { + return personalizationClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initQuerySuggestions: (initOptions: InitClientOptions & QuerySuggestionsRegionOptions): QuerySuggestionsClient => { + return querySuggestionsClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initRecommend: (initOptions: InitClientOptions = {}): RecommendClient => { + return recommendClient(initOptions.appId || appId, initOptions.apiKey || apiKey, initOptions.options); + }, + }; +} diff --git a/packages/algoliasearch/builds/models.ts b/packages/algoliasearch/builds/models.ts new file mode 100644 index 000000000..ced1d4772 --- /dev/null +++ b/packages/algoliasearch/builds/models.ts @@ -0,0 +1,270 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Region as AbtestingRegion, RegionOptions as AbtestingRegionOptions } from '@algolia/client-abtesting'; +import type { Region as AnalyticsRegion, RegionOptions as AnalyticsRegionOptions } from '@algolia/client-analytics'; +import type { Region as InsightsRegion, RegionOptions as InsightsRegionOptions } from '@algolia/client-insights'; +import type { Region as IngestionRegion, RegionOptions as IngestionRegionOptions } from '@algolia/ingestion'; + +import type { + Region as PersonalizationRegion, + RegionOptions as PersonalizationRegionOptions, +} from '@algolia/client-personalization'; +import type { + Region as QuerySuggestionsRegion, + RegionOptions as QuerySuggestionsRegionOptions, +} from '@algolia/client-query-suggestions'; + +import type { Status } from '@algolia/client-abtesting'; +import type { ClientOptions } from '@algolia/client-common'; +import type { EventType } from '@algolia/client-personalization'; +import type { + Action, + AdvancedSyntaxFeatures, + AlternativesAsExact, + Anchoring, + AroundPrecision, + AroundRadius, + AroundRadiusAll, + AutomaticFacetFilter, + AutomaticFacetFilters, + Banner, + BannerImage, + BannerImageUrl, + BannerLink, + BaseIndexSettings, + BaseSearchParams, + BaseSearchParamsWithoutQuery, + BaseSearchResponse, + BooleanString, + Condition, + Consequence, + ConsequenceHide, + ConsequenceParams, + ConsequenceQuery, + ConsequenceQueryObject, + CustomDeleteProps, + CustomGetProps, + CustomPostProps, + CustomPutProps, + DeleteSourceProps, + DeletedAtResponse, + Distinct, + Edit, + EditType, + ErrorBase, + ExactOnSingleWordQuery, + Exhaustive, + FacetFilters, + FacetHits, + FacetOrdering, + FacetStats, + Facets, + GetTaskProps, + HighlightResult, + HighlightResultOption, + Hit, + IgnorePlurals, + IndexSettingsAsSearchParams, + InsideBoundingBox, + Languages, + MatchLevel, + MatchedGeoLocation, + Mode, + NumericFilters, + OptionalFilters, + OptionalWords, + Params, + Personalization, + Promote, + PromoteObjectID, + PromoteObjectIDs, + QueryType, + Range, + RankingInfo, + ReRankingApplyFilter, + Redirect, + RedirectRuleIndexData, + RedirectRuleIndexMetadata, + RedirectURL, + RemoveStopWords, + RemoveWordsIfNoResults, + RenderingContent, + SearchForFacetValuesProps, + SearchForFacetValuesRequest, + SearchForFacetValuesResponse, + SearchHits, + SearchPagination, + SearchParams, + SearchParamsObject, + SearchParamsQuery, + SearchResponse, + SemanticSearch, + SnippetResult, + SnippetResultOption, + SortRemainingBy, + Source, + SupportedLanguage, + TagFilters, + TaskStatus, + TimeRange, + TypoTolerance, + TypoToleranceEnum, + Value, + Widgets, +} from '@algolia/client-search'; +import { apiClientVersion } from '@algolia/client-search'; + +export * from '@algolia/client-abtesting'; +export * from '@algolia/client-analytics'; +export * from '@algolia/client-insights'; +export * from '@algolia/client-personalization'; +export * from '@algolia/client-query-suggestions'; +export * from '@algolia/client-search'; +export * from '@algolia/ingestion'; +export * from '@algolia/monitoring'; +export * from '@algolia/recommend'; + +export type Region = + | AbtestingRegion + | AnalyticsRegion + | IngestionRegion + | InsightsRegion + | PersonalizationRegion + | QuerySuggestionsRegion; +export type RegionOptions = + | AbtestingRegionOptions + | AnalyticsRegionOptions + | IngestionRegionOptions + | InsightsRegionOptions + | PersonalizationRegionOptions + | QuerySuggestionsRegionOptions; + +export type { + AbtestingRegion, + AbtestingRegionOptions, + AnalyticsRegion, + AnalyticsRegionOptions, + EventType, + IngestionRegion, + IngestionRegionOptions, + InsightsRegion, + InsightsRegionOptions, + PersonalizationRegion, + PersonalizationRegionOptions, + QuerySuggestionsRegion, + QuerySuggestionsRegionOptions, + Status, +}; + +export type { + Action, + AdvancedSyntaxFeatures, + AlternativesAsExact, + Anchoring, + AroundPrecision, + AroundRadius, + AroundRadiusAll, + AutomaticFacetFilter, + AutomaticFacetFilters, + Banner, + BannerImage, + BannerImageUrl, + BannerLink, + BaseIndexSettings, + BaseSearchParams, + BaseSearchParamsWithoutQuery, + BaseSearchResponse, + BooleanString, + Condition, + Consequence, + ConsequenceHide, + ConsequenceParams, + ConsequenceQuery, + ConsequenceQueryObject, + CustomDeleteProps, + CustomGetProps, + CustomPostProps, + CustomPutProps, + DeleteSourceProps, + DeletedAtResponse, + Distinct, + Edit, + EditType, + ErrorBase, + ExactOnSingleWordQuery, + Exhaustive, + FacetFilters, + FacetHits, + FacetOrdering, + FacetStats, + Facets, + GetTaskProps, + HighlightResult, + HighlightResultOption, + Hit, + IgnorePlurals, + IndexSettingsAsSearchParams, + InsideBoundingBox, + Languages, + MatchLevel, + MatchedGeoLocation, + Mode, + NumericFilters, + OptionalFilters, + OptionalWords, + Params, + Personalization, + Promote, + PromoteObjectID, + PromoteObjectIDs, + QueryType, + Range, + RankingInfo, + ReRankingApplyFilter, + Redirect, + RedirectRuleIndexData, + RedirectRuleIndexMetadata, + RedirectURL, + RemoveStopWords, + RemoveWordsIfNoResults, + RenderingContent, + SearchForFacetValuesProps, + SearchForFacetValuesRequest, + SearchForFacetValuesResponse, + SearchHits, + SearchPagination, + SearchParams, + SearchParamsObject, + SearchParamsQuery, + SearchResponse, + SemanticSearch, + SnippetResult, + SnippetResultOption, + SortRemainingBy, + Source, + SupportedLanguage, + TagFilters, + TaskStatus, + TimeRange, + TypoTolerance, + TypoToleranceEnum, + Value, + Widgets, +}; + +export { apiClientVersion }; + +/** + * Options forwarded to the client initialized via the `init` method. + */ +export type InitClientOptions = Partial<{ + /** + * App to target with the initialized client, defaults to the `algoliasearch` appId. + */ + appId: string; + /** + * API key of the targeted app ID, defaults to the `algoliasearch` apiKey. + */ + apiKey: string; + options: ClientOptions; +}>; diff --git a/packages/algoliasearch/builds/node.ts b/packages/algoliasearch/builds/node.ts new file mode 100644 index 000000000..004e88e2a --- /dev/null +++ b/packages/algoliasearch/builds/node.ts @@ -0,0 +1,130 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ClientOptions } from '@algolia/client-common'; + +import type { AbtestingClient } from '@algolia/client-abtesting'; +import { abtestingClient } from '@algolia/client-abtesting'; +import type { AnalyticsClient } from '@algolia/client-analytics'; +import { analyticsClient } from '@algolia/client-analytics'; +import type { InsightsClient } from '@algolia/client-insights'; +import { insightsClient } from '@algolia/client-insights'; +import type { PersonalizationClient } from '@algolia/client-personalization'; +import { personalizationClient } from '@algolia/client-personalization'; +import type { QuerySuggestionsClient } from '@algolia/client-query-suggestions'; +import { querySuggestionsClient } from '@algolia/client-query-suggestions'; +import type { SearchClient } from '@algolia/client-search'; +import { searchClient } from '@algolia/client-search'; +import type { IngestionClient } from '@algolia/ingestion'; +import { ingestionClient } from '@algolia/ingestion'; +import type { MonitoringClient } from '@algolia/monitoring'; +import { monitoringClient } from '@algolia/monitoring'; +import type { RecommendClient } from '@algolia/recommend'; +import { recommendClient } from '@algolia/recommend'; + +import type { + AbtestingRegionOptions, + AnalyticsRegionOptions, + IngestionRegionOptions, + InitClientOptions, + InsightsRegionOptions, + PersonalizationRegionOptions, + QuerySuggestionsRegionOptions, +} from './models'; + +export * from './models'; + +export type Algoliasearch = SearchClient & { + initAbtesting: (initOptions: InitClientOptions & AbtestingRegionOptions) => AbtestingClient; + initAnalytics: (initOptions: InitClientOptions & AnalyticsRegionOptions) => AnalyticsClient; + initIngestion: (initOptions: InitClientOptions & IngestionRegionOptions) => IngestionClient; + initInsights: (initOptions: InitClientOptions & InsightsRegionOptions) => InsightsClient; + initMonitoring: (initOptions?: InitClientOptions) => MonitoringClient; + initPersonalization: (initOptions: InitClientOptions & PersonalizationRegionOptions) => PersonalizationClient; + initQuerySuggestions: (initOptions: InitClientOptions & QuerySuggestionsRegionOptions) => QuerySuggestionsClient; + initRecommend: (initOptions?: InitClientOptions) => RecommendClient; +}; + +export function algoliasearch(appId: string, apiKey: string, options?: ClientOptions): Algoliasearch { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + const client = searchClient(appId, apiKey, options); + + return { + ...client, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return client.transporter.algoliaAgent.value; + }, + + initAbtesting: (initOptions: InitClientOptions & AbtestingRegionOptions): AbtestingClient => { + return abtestingClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initAnalytics: (initOptions: InitClientOptions & AnalyticsRegionOptions): AnalyticsClient => { + return analyticsClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initIngestion: (initOptions: InitClientOptions & IngestionRegionOptions): IngestionClient => { + return ingestionClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initInsights: (initOptions: InitClientOptions & InsightsRegionOptions): InsightsClient => { + return insightsClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initMonitoring: (initOptions: InitClientOptions = {}): MonitoringClient => { + return monitoringClient(initOptions.appId || appId, initOptions.apiKey || apiKey, initOptions.options); + }, + + initPersonalization: (initOptions: InitClientOptions & PersonalizationRegionOptions): PersonalizationClient => { + return personalizationClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initQuerySuggestions: (initOptions: InitClientOptions & QuerySuggestionsRegionOptions): QuerySuggestionsClient => { + return querySuggestionsClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initRecommend: (initOptions: InitClientOptions = {}): RecommendClient => { + return recommendClient(initOptions.appId || appId, initOptions.apiKey || apiKey, initOptions.options); + }, + }; +} diff --git a/packages/algoliasearch/builds/worker.ts b/packages/algoliasearch/builds/worker.ts new file mode 100644 index 000000000..004e88e2a --- /dev/null +++ b/packages/algoliasearch/builds/worker.ts @@ -0,0 +1,130 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ClientOptions } from '@algolia/client-common'; + +import type { AbtestingClient } from '@algolia/client-abtesting'; +import { abtestingClient } from '@algolia/client-abtesting'; +import type { AnalyticsClient } from '@algolia/client-analytics'; +import { analyticsClient } from '@algolia/client-analytics'; +import type { InsightsClient } from '@algolia/client-insights'; +import { insightsClient } from '@algolia/client-insights'; +import type { PersonalizationClient } from '@algolia/client-personalization'; +import { personalizationClient } from '@algolia/client-personalization'; +import type { QuerySuggestionsClient } from '@algolia/client-query-suggestions'; +import { querySuggestionsClient } from '@algolia/client-query-suggestions'; +import type { SearchClient } from '@algolia/client-search'; +import { searchClient } from '@algolia/client-search'; +import type { IngestionClient } from '@algolia/ingestion'; +import { ingestionClient } from '@algolia/ingestion'; +import type { MonitoringClient } from '@algolia/monitoring'; +import { monitoringClient } from '@algolia/monitoring'; +import type { RecommendClient } from '@algolia/recommend'; +import { recommendClient } from '@algolia/recommend'; + +import type { + AbtestingRegionOptions, + AnalyticsRegionOptions, + IngestionRegionOptions, + InitClientOptions, + InsightsRegionOptions, + PersonalizationRegionOptions, + QuerySuggestionsRegionOptions, +} from './models'; + +export * from './models'; + +export type Algoliasearch = SearchClient & { + initAbtesting: (initOptions: InitClientOptions & AbtestingRegionOptions) => AbtestingClient; + initAnalytics: (initOptions: InitClientOptions & AnalyticsRegionOptions) => AnalyticsClient; + initIngestion: (initOptions: InitClientOptions & IngestionRegionOptions) => IngestionClient; + initInsights: (initOptions: InitClientOptions & InsightsRegionOptions) => InsightsClient; + initMonitoring: (initOptions?: InitClientOptions) => MonitoringClient; + initPersonalization: (initOptions: InitClientOptions & PersonalizationRegionOptions) => PersonalizationClient; + initQuerySuggestions: (initOptions: InitClientOptions & QuerySuggestionsRegionOptions) => QuerySuggestionsClient; + initRecommend: (initOptions?: InitClientOptions) => RecommendClient; +}; + +export function algoliasearch(appId: string, apiKey: string, options?: ClientOptions): Algoliasearch { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + const client = searchClient(appId, apiKey, options); + + return { + ...client, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return client.transporter.algoliaAgent.value; + }, + + initAbtesting: (initOptions: InitClientOptions & AbtestingRegionOptions): AbtestingClient => { + return abtestingClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initAnalytics: (initOptions: InitClientOptions & AnalyticsRegionOptions): AnalyticsClient => { + return analyticsClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initIngestion: (initOptions: InitClientOptions & IngestionRegionOptions): IngestionClient => { + return ingestionClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initInsights: (initOptions: InitClientOptions & InsightsRegionOptions): InsightsClient => { + return insightsClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initMonitoring: (initOptions: InitClientOptions = {}): MonitoringClient => { + return monitoringClient(initOptions.appId || appId, initOptions.apiKey || apiKey, initOptions.options); + }, + + initPersonalization: (initOptions: InitClientOptions & PersonalizationRegionOptions): PersonalizationClient => { + return personalizationClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initQuerySuggestions: (initOptions: InitClientOptions & QuerySuggestionsRegionOptions): QuerySuggestionsClient => { + return querySuggestionsClient( + initOptions.appId || appId, + initOptions.apiKey || apiKey, + initOptions.region, + initOptions.options, + ); + }, + + initRecommend: (initOptions: InitClientOptions = {}): RecommendClient => { + return recommendClient(initOptions.appId || appId, initOptions.apiKey || apiKey, initOptions.options); + }, + }; +} diff --git a/packages/algoliasearch/index.d.ts b/packages/algoliasearch/index.d.ts index f3e17624b..e81a1cd3e 100644 --- a/packages/algoliasearch/index.d.ts +++ b/packages/algoliasearch/index.d.ts @@ -1,3 +1 @@ -/* eslint-disable import/no-unresolved*/ -export * from './dist/algoliasearch'; -export { default } from './dist/algoliasearch'; +export * from './dist/node'; diff --git a/packages/algoliasearch/index.js b/packages/algoliasearch/index.js index 14ca1ec18..4a9cdb9ef 100644 --- a/packages/algoliasearch/index.js +++ b/packages/algoliasearch/index.js @@ -1,15 +1 @@ -/* eslint-disable functional/immutable-data, import/no-commonjs */ -const algoliasearch = require('./dist/algoliasearch.cjs.js'); - -/** - * The Common JS build is the default entry point for the Node environment. Keep in - * in mind, that for the browser environment, we hint the bundler to use the UMD - * build instead as specified on the key `browser` of our `package.json` file. - */ -module.exports = algoliasearch; - -/** - * In addition, we also set explicitly the default export below making - * this Common JS module in compliance with es6 modules specification. - */ -module.exports.default = algoliasearch; +module.exports = require('./dist/node.cjs'); diff --git a/packages/algoliasearch/lite.d.ts b/packages/algoliasearch/lite.d.ts index 41a19612f..ea765f3bc 100644 --- a/packages/algoliasearch/lite.d.ts +++ b/packages/algoliasearch/lite.d.ts @@ -1,3 +1 @@ -/* eslint-disable import/no-unresolved*/ -export * from './dist/algoliasearch-lite'; -export { default } from './dist/algoliasearch-lite'; +export * from './dist/lite/node'; diff --git a/packages/algoliasearch/lite.js b/packages/algoliasearch/lite.js index cdbfa358a..ef1f99093 100644 --- a/packages/algoliasearch/lite.js +++ b/packages/algoliasearch/lite.js @@ -1,2 +1 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./index'); +module.exports = require('./dist/lite/builds/node.cjs'); diff --git a/packages/algoliasearch/lite/builds/browser.ts b/packages/algoliasearch/lite/builds/browser.ts new file mode 100644 index 000000000..e0e34ecd2 --- /dev/null +++ b/packages/algoliasearch/lite/builds/browser.ts @@ -0,0 +1,50 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import { createXhrRequester } from '@algolia/requester-browser-xhr'; + +import { + createBrowserLocalStorageCache, + createFallbackableCache, + createMemoryCache, + createNullLogger, +} from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { apiClientVersion, createLiteClient } from '../src/liteClient'; + +export { apiClientVersion } from '../src/liteClient'; + +export * from '../model'; + +export function liteClient(appId: string, apiKey: string, options?: ClientOptions): LiteClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return createLiteClient({ + appId, + apiKey, + timeouts: { + connect: 1000, + read: 2000, + write: 30000, + }, + logger: createNullLogger(), + requester: createXhrRequester(), + algoliaAgents: [{ segment: 'Browser' }], + authMode: 'WithinQueryParameters', + responsesCache: createMemoryCache(), + requestsCache: createMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], + }), + ...options, + }); +} + +export type LiteClient = ReturnType; diff --git a/packages/algoliasearch/lite/builds/node.ts b/packages/algoliasearch/lite/builds/node.ts new file mode 100644 index 000000000..67e97b26f --- /dev/null +++ b/packages/algoliasearch/lite/builds/node.ts @@ -0,0 +1,42 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type LiteClient = ReturnType; + +import { createHttpRequester } from '@algolia/requester-node-http'; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createLiteClient } from '../src/liteClient'; + +export { apiClientVersion } from '../src/liteClient'; + +export * from '../model'; + +export function liteClient(appId: string, apiKey: string, options?: ClientOptions): LiteClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return createLiteClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createHttpRequester(), + algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }); +} diff --git a/packages/algoliasearch/lite/model/acl.ts b/packages/algoliasearch/lite/model/acl.ts new file mode 100644 index 000000000..e21dfb1da --- /dev/null +++ b/packages/algoliasearch/lite/model/acl.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Access control list permissions. + */ +export type Acl = + | 'addObject' + | 'analytics' + | 'browse' + | 'deleteObject' + | 'deleteIndex' + | 'editSettings' + | 'inference' + | 'listIndexes' + | 'logs' + | 'personalization' + | 'recommendation' + | 'search' + | 'seeUnretrievableAttributes' + | 'settings' + | 'usage'; diff --git a/packages/algoliasearch/lite/model/advancedSyntaxFeatures.ts b/packages/algoliasearch/lite/model/advancedSyntaxFeatures.ts new file mode 100644 index 000000000..61e577d48 --- /dev/null +++ b/packages/algoliasearch/lite/model/advancedSyntaxFeatures.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AdvancedSyntaxFeatures = 'exactPhrase' | 'excludeWords'; diff --git a/packages/algoliasearch/lite/model/alternativesAsExact.ts b/packages/algoliasearch/lite/model/alternativesAsExact.ts new file mode 100644 index 000000000..b4d50c7a5 --- /dev/null +++ b/packages/algoliasearch/lite/model/alternativesAsExact.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AlternativesAsExact = 'ignorePlurals' | 'singleWordSynonym' | 'multiWordsSynonym' | 'ignoreConjugations'; diff --git a/packages/algoliasearch/lite/model/apiKey.ts b/packages/algoliasearch/lite/model/apiKey.ts new file mode 100644 index 000000000..4a43039c9 --- /dev/null +++ b/packages/algoliasearch/lite/model/apiKey.ts @@ -0,0 +1,48 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Acl } from './acl'; + +/** + * API key object. + */ +export type ApiKey = { + /** + * Permissions that determine the type of API requests this key can make. The required ACL is listed in each endpoint\'s reference. For more information, see [access control list](https://www.algolia.com/doc/guides/security/api-keys/#access-control-list-acl). + */ + acl: Array; + + /** + * Description of an API key to help you identify this API key. + */ + description?: string; + + /** + * Index names or patterns that this API key can access. By default, an API key can access all indices in the same application. You can use leading and trailing wildcard characters (`*`): - `dev_*` matches all indices starting with \"dev_\". - `*_dev` matches all indices ending with \"_dev\". - `*_products_*` matches all indices containing \"_products_\". + */ + indexes?: Array; + + /** + * Maximum number of results this API key can retrieve in one query. By default, there\'s no limit. + */ + maxHitsPerQuery?: number; + + /** + * Maximum number of API requests allowed per IP address or [user token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/) per hour. If this limit is reached, the API returns an error with status code `429`. By default, there\'s no limit. + */ + maxQueriesPerIPPerHour?: number; + + /** + * Query parameters to add when making API requests with this API key. To restrict this API key to specific IP addresses, add the `restrictSources` parameter. You can only add a single source, but you can provide a range of IP addresses. Creating an API key fails if the request is made from an IP address outside the restricted range. + */ + queryParameters?: string; + + /** + * Allowed HTTP referrers for this API key. By default, all referrers are allowed. You can use leading and trailing wildcard characters (`*`): - `https://algolia.com/_*` allows all referrers starting with \"https://algolia.com/\" - `*.algolia.com` allows all referrers ending with \".algolia.com\" - `*algolia.com*` allows all referrers in the domain \"algolia.com\". Like all HTTP headers, referrers can be spoofed. Don\'t rely on them to secure your data. For more information, see [HTTP referrer restrictions](https://www.algolia.com/doc/guides/security/security-best-practices/#http-referrers-restrictions). + */ + referers?: Array; + + /** + * Duration (in seconds) after which the API key expires. By default, API keys don\'t expire. + */ + validity?: number; +}; diff --git a/packages/algoliasearch/lite/model/aroundPrecision.ts b/packages/algoliasearch/lite/model/aroundPrecision.ts new file mode 100644 index 000000000..79ff0cd59 --- /dev/null +++ b/packages/algoliasearch/lite/model/aroundPrecision.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Range } from './range'; + +/** + * Precision of a coordinate-based search in meters to group results with similar distances. The Geo ranking criterion considers all matches within the same range of distances to be equal. + */ +export type AroundPrecision = number | Array; diff --git a/packages/algoliasearch/lite/model/aroundRadius.ts b/packages/algoliasearch/lite/model/aroundRadius.ts new file mode 100644 index 000000000..8198f1e75 --- /dev/null +++ b/packages/algoliasearch/lite/model/aroundRadius.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AroundRadiusAll } from './aroundRadiusAll'; + +/** + * Maximum radius for a search around a central location. This parameter works in combination with the `aroundLatLng` and `aroundLatLngViaIP` parameters. By default, the search radius is determined automatically from the density of hits around the central location. The search radius is small if there are many hits close to the central coordinates. + */ +export type AroundRadius = number | AroundRadiusAll; diff --git a/packages/algoliasearch/lite/model/aroundRadiusAll.ts b/packages/algoliasearch/lite/model/aroundRadiusAll.ts new file mode 100644 index 000000000..e5f107060 --- /dev/null +++ b/packages/algoliasearch/lite/model/aroundRadiusAll.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Return all records with a valid `_geoloc` attribute. Don\'t filter by distance. + */ +export type AroundRadiusAll = 'all'; diff --git a/packages/algoliasearch/lite/model/automaticFacetFilter.ts b/packages/algoliasearch/lite/model/automaticFacetFilter.ts new file mode 100644 index 000000000..ca83695bf --- /dev/null +++ b/packages/algoliasearch/lite/model/automaticFacetFilter.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter or optional filter to be applied to the search. + */ +export type AutomaticFacetFilter = { + /** + * Facet name to be applied as filter. The name must match placeholders in the `pattern` parameter. For example, with `pattern: {facet:genre}`, `automaticFacetFilters` must be `genre`. + */ + facet: string; + + /** + * Filter scores to give different weights to individual filters. + */ + score?: number; + + /** + * Whether the filter is disjunctive or conjunctive. If true the filter has multiple matches, multiple occurences are combined with the logical `OR` operation. If false, multiple occurences are combined with the logical `AND` operation. + */ + disjunctive?: boolean; +}; diff --git a/packages/algoliasearch/lite/model/automaticFacetFilters.ts b/packages/algoliasearch/lite/model/automaticFacetFilters.ts new file mode 100644 index 000000000..6fdc07bc7 --- /dev/null +++ b/packages/algoliasearch/lite/model/automaticFacetFilters.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AutomaticFacetFilter } from './automaticFacetFilter'; + +/** + * Filter to be applied to the search. You can use this to respond to search queries that match a facet value. For example, if users search for \"comedy\", which matches a facet value of the \"genre\" facet, you can filter the results to show the top-ranked comedy movies. + */ +export type AutomaticFacetFilters = Array | Array; diff --git a/packages/algoliasearch/lite/model/banner.ts b/packages/algoliasearch/lite/model/banner.ts new file mode 100644 index 000000000..793feec15 --- /dev/null +++ b/packages/algoliasearch/lite/model/banner.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BannerImage } from './bannerImage'; +import type { BannerLink } from './bannerLink'; + +/** + * Banner with image and link to redirect users. + */ +export type Banner = { + image?: BannerImage; + + link?: BannerLink; +}; diff --git a/packages/algoliasearch/lite/model/bannerImage.ts b/packages/algoliasearch/lite/model/bannerImage.ts new file mode 100644 index 000000000..a0988168e --- /dev/null +++ b/packages/algoliasearch/lite/model/bannerImage.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BannerImageUrl } from './bannerImageUrl'; + +/** + * Image to show inside a banner. + */ +export type BannerImage = { + urls?: Array; + + title?: string; +}; diff --git a/packages/algoliasearch/lite/model/bannerImageUrl.ts b/packages/algoliasearch/lite/model/bannerImageUrl.ts new file mode 100644 index 000000000..6be2b3efd --- /dev/null +++ b/packages/algoliasearch/lite/model/bannerImageUrl.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * URL for an image to show inside a banner. + */ +export type BannerImageUrl = { + url?: string; +}; diff --git a/packages/algoliasearch/lite/model/bannerLink.ts b/packages/algoliasearch/lite/model/bannerLink.ts new file mode 100644 index 000000000..52800a208 --- /dev/null +++ b/packages/algoliasearch/lite/model/bannerLink.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Link for a banner defined in the Merchandising Studio. + */ +export type BannerLink = { + url?: string; +}; diff --git a/packages/algoliasearch/lite/model/baseGetApiKeyResponse.ts b/packages/algoliasearch/lite/model/baseGetApiKeyResponse.ts new file mode 100644 index 000000000..55547ef1e --- /dev/null +++ b/packages/algoliasearch/lite/model/baseGetApiKeyResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BaseGetApiKeyResponse = { + /** + * API key. + */ + value: string; + + /** + * Timestamp when the object was created, in milliseconds since the Unix epoch. + */ + createdAt: number; +}; diff --git a/packages/algoliasearch/lite/model/baseIndexSettings.ts b/packages/algoliasearch/lite/model/baseIndexSettings.ts new file mode 100644 index 000000000..3357a401f --- /dev/null +++ b/packages/algoliasearch/lite/model/baseIndexSettings.ts @@ -0,0 +1,105 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SupportedLanguage } from './supportedLanguage'; + +export type BaseIndexSettings = { + /** + * Attributes used for [faceting](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/). Facets are attributes that let you categorize search results. They can be used for filtering search results. By default, no attribute is used for faceting. Attribute names are case-sensitive. **Modifiers** - `filterOnly(\"ATTRIBUTE\")`. Allows the attribute to be used as a filter but doesn\'t evaluate the facet values. - `searchable(\"ATTRIBUTE\")`. Allows searching for facet values. - `afterDistinct(\"ATTRIBUTE\")`. Evaluates the facet count _after_ deduplication with `distinct`. This ensures accurate facet counts. You can apply this modifier to searchable facets: `afterDistinct(searchable(ATTRIBUTE))`. + */ + attributesForFaceting?: Array; + + /** + * Creates [replica indices](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/replicas/). Replicas are copies of a primary index with the same records but different settings, synonyms, or rules. If you want to offer a different ranking or sorting of your search results, you\'ll use replica indices. All index operations on a primary index are automatically forwarded to its replicas. To add a replica index, you must provide the complete set of replicas to this parameter. If you omit a replica from this list, the replica turns into a regular, standalone index that will no longer be synced with the primary index. **Modifier** - `virtual(\"REPLICA\")`. Create a virtual replica, Virtual replicas don\'t increase the number of records and are optimized for [Relevant sorting](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/relevant-sort/). + */ + replicas?: Array; + + /** + * Maximum number of search results that can be obtained through pagination. Higher pagination limits might slow down your search. For pagination limits above 1,000, the sorting of results beyond the 1,000th hit can\'t be guaranteed. + */ + paginationLimitedTo?: number; + + /** + * Attributes that can\'t be retrieved at query time. This can be useful if you want to use an attribute for ranking or to [restrict access](https://www.algolia.com/doc/guides/security/api-keys/how-to/user-restricted-access-to-data/), but don\'t want to include it in the search results. Attribute names are case-sensitive. + */ + unretrievableAttributes?: Array; + + /** + * Creates a list of [words which require exact matches](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#turn-off-typo-tolerance-for-certain-words). This also turns off [word splitting and concatenation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/splitting-and-concatenation/) for the specified words. + */ + disableTypoToleranceOnWords?: Array; + + /** + * Attributes, for which you want to support [Japanese transliteration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/#japanese-transliteration-and-type-ahead). Transliteration supports searching in any of the Japanese writing systems. To support transliteration, you must set the indexing language to Japanese. Attribute names are case-sensitive. + */ + attributesToTransliterate?: Array; + + /** + * Attributes for which to split [camel case](https://wikipedia.org/wiki/Camel_case) words. Attribute names are case-sensitive. + */ + camelCaseAttributes?: Array; + + /** + * Searchable attributes to which Algolia should apply [word segmentation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/how-to/customize-segmentation/) (decompounding). Attribute names are case-sensitive. Compound words are formed by combining two or more individual words, and are particularly prevalent in Germanic languages—for example, \"firefighter\". With decompounding, the individual components are indexed separately. You can specify different lists for different languages. Decompounding is supported for these languages: Dutch (`nl`), German (`de`), Finnish (`fi`), Danish (`da`), Swedish (`sv`), and Norwegian (`no`). Decompounding doesn\'t work for words with [non-spacing mark Unicode characters](https://www.charactercodes.net/category/non-spacing_mark). For example, `Gartenstühle` won\'t be decompounded if the `ü` consists of `u` (U+0075) and `◌̈` (U+0308). + */ + decompoundedAttributes?: Record; + + /** + * Languages for language-specific processing steps, such as word detection and dictionary settings. **You should always specify an indexing language.** If you don\'t specify an indexing language, the search engine uses all [supported languages](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/supported-languages/), or the languages you specified with the `ignorePlurals` or `removeStopWords` parameters. This can lead to unexpected search results. For more information, see [Language-specific configuration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/). + */ + indexLanguages?: Array; + + /** + * Searchable attributes for which you want to turn off [prefix matching](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/#adjusting-prefix-search). Attribute names are case-sensitive. + */ + disablePrefixOnAttributes?: Array; + + /** + * Whether arrays with exclusively non-negative integers should be compressed for better performance. If true, the compressed arrays may be reordered. + */ + allowCompressionOfIntegerArray?: boolean; + + /** + * Numeric attributes that can be used as [numerical filters](https://www.algolia.com/doc/guides/managing-results/rules/detecting-intent/how-to/applying-a-custom-filter-for-a-specific-query/#numerical-filters). Attribute names are case-sensitive. By default, all numeric attributes are available as numerical filters. For faster indexing, reduce the number of numeric attributes. To turn off filtering for all numeric attributes, specify an attribute that doesn\'t exist in your index, such as `NO_NUMERIC_FILTERING`. **Modifier** - `equalOnly(\"ATTRIBUTE\")`. Support only filtering based on equality comparisons `=` and `!=`. + */ + numericAttributesForFiltering?: Array; + + /** + * Control which non-alphanumeric characters are indexed. By default, Algolia ignores [non-alphanumeric characters](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/how-to/how-to-search-in-hyphenated-attributes/#handling-non-alphanumeric-characters) like hyphen (`-`), plus (`+`), and parentheses (`(`,`)`). To include such characters, define them with `separatorsToIndex`. Separators are all non-letter characters except spaces and currency characters, such as $€£¥. With `separatorsToIndex`, Algolia treats separator characters as separate words. For example, in a search for \"Disney+\", Algolia considers \"Disney\" and \"+\" as two separate words. + */ + separatorsToIndex?: string; + + /** + * Attributes used for searching. Attribute names are case-sensitive. By default, all attributes are searchable and the [Attribute](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#attribute) ranking criterion is turned off. With a non-empty list, Algolia only returns results with matches in the selected attributes. In addition, the Attribute ranking criterion is turned on: matches in attributes that are higher in the list of `searchableAttributes` rank first. To make matches in two attributes rank equally, include them in a comma-separated string, such as `\"title,alternate_title\"`. Attributes with the same priority are always unordered. For more information, see [Searchable attributes](https://www.algolia.com/doc/guides/sending-and-managing-data/prepare-your-data/how-to/setting-searchable-attributes/). **Modifier** - `unordered(\"ATTRIBUTE\")`. Ignore the position of a match within the attribute. Without a modifier, matches at the beginning of an attribute rank higher than matches at the end. + */ + searchableAttributes?: Array; + + /** + * An object with custom data. You can store up to 32kB as custom data. + */ + userData?: any | null; + + /** + * Characters and their normalized replacements. This overrides Algolia\'s default [normalization](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/normalization/). + */ + customNormalization?: { [key: string]: { [key: string]: string } }; + + /** + * Attribute that should be used to establish groups of results. Attribute names are case-sensitive. All records with the same value for this attribute are considered a group. You can combine `attributeForDistinct` with the `distinct` search parameter to control how many items per group are included in the search results. If you want to use the same attribute also for faceting, use the `afterDistinct` modifier of the `attributesForFaceting` setting. This applies faceting _after_ deduplication, which will result in accurate facet counts. + */ + attributeForDistinct?: string; + + /** + * Maximum number of facet values to return when [searching for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ + maxFacetHits?: number; + + /** + * Characters for which diacritics should be preserved. By default, Algolia removes diacritics from letters. For example, `é` becomes `e`. If this causes issues in your search, you can specify characters that should keep their diacritics. + */ + keepDiacriticsOnCharacters?: string; + + /** + * Attributes to use as [custom ranking](https://www.algolia.com/doc/guides/managing-results/must-do/custom-ranking/). Attribute names are case-sensitive. The custom ranking attributes decide which items are shown first if the other ranking criteria are equal. Records with missing values for your selected custom ranking attributes are always sorted last. Boolean attributes are sorted based on their alphabetical order. **Modifiers** - `asc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in ascending order. - `desc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in descending order. If you use two or more custom ranking attributes, [reduce the precision](https://www.algolia.com/doc/guides/managing-results/must-do/custom-ranking/how-to/controlling-custom-ranking-metrics-precision/) of your first attributes, or the other attributes will never be applied. + */ + customRanking?: Array; +}; diff --git a/packages/algoliasearch/lite/model/baseRecommendIndexSettings.ts b/packages/algoliasearch/lite/model/baseRecommendIndexSettings.ts new file mode 100644 index 000000000..c66832538 --- /dev/null +++ b/packages/algoliasearch/lite/model/baseRecommendIndexSettings.ts @@ -0,0 +1,177 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AdvancedSyntaxFeatures } from './advancedSyntaxFeatures'; +import type { AlternativesAsExact } from './alternativesAsExact'; +import type { Distinct } from './distinct'; +import type { ExactOnSingleWordQuery } from './exactOnSingleWordQuery'; +import type { IgnorePlurals } from './ignorePlurals'; +import type { OptionalWords } from './optionalWords'; +import type { QueryType } from './queryType'; +import type { ReRankingApplyFilter } from './reRankingApplyFilter'; +import type { RemoveStopWords } from './removeStopWords'; +import type { RemoveWordsIfNoResults } from './removeWordsIfNoResults'; +import type { RenderingContent } from './renderingContent'; +import type { SupportedLanguage } from './supportedLanguage'; +import type { TypoTolerance } from './typoTolerance'; + +export type BaseRecommendIndexSettings = { + /** + * Attributes to include in the API response. To reduce the size of your response, you can retrieve only some of the attributes. Attribute names are case-sensitive. - `*` retrieves all attributes, except attributes included in the `customRanking` and `unretrievableAttributes` settings. - To retrieve all attributes except a specific one, prefix the attribute with a dash and combine it with the `*`: `[\"*\", \"-ATTRIBUTE\"]`. - The `objectID` attribute is always included. + */ + attributesToRetrieve?: Array; + + /** + * Determines the order in which Algolia returns your results. By default, each entry corresponds to a [ranking criteria](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/). The tie-breaking algorithm sequentially applies each criterion in the order they\'re specified. If you configure a replica index for [sorting by an attribute](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/how-to/sort-by-attribute/), you put the sorting attribute at the top of the list. **Modifiers** - `asc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in ascending order. - `desc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in descending order. Before you modify the default setting, you should test your changes in the dashboard, and by [A/B testing](https://www.algolia.com/doc/guides/ab-testing/what-is-ab-testing/). + */ + ranking?: Array; + + /** + * Relevancy threshold below which less relevant results aren\'t included in the results. You can only set `relevancyStrictness` on [virtual replica indices](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/replicas/#what-are-virtual-replicas). Use this setting to strike a balance between the relevance and number of returned results. + */ + relevancyStrictness?: number; + + /** + * Attributes to highlight. By default, all searchable attributes are highlighted. Use `*` to highlight all attributes or use an empty array `[]` to turn off highlighting. Attribute names are case-sensitive. With highlighting, strings that match the search query are surrounded by HTML tags defined by `highlightPreTag` and `highlightPostTag`. You can use this to visually highlight matching parts of a search query in your UI. For more information, see [Highlighting and snippeting](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/highlighting-snippeting/js/). + */ + attributesToHighlight?: Array; + + /** + * Attributes for which to enable snippets. Attribute names are case-sensitive. Snippets provide additional context to matched words. If you enable snippets, they include 10 words, including the matched word. The matched word will also be wrapped by HTML tags for highlighting. You can adjust the number of words with the following notation: `ATTRIBUTE:NUMBER`, where `NUMBER` is the number of words to be extracted. + */ + attributesToSnippet?: Array; + + /** + * HTML tag to insert before the highlighted parts in all highlighted results and snippets. + */ + highlightPreTag?: string; + + /** + * HTML tag to insert after the highlighted parts in all highlighted results and snippets. + */ + highlightPostTag?: string; + + /** + * String used as an ellipsis indicator when a snippet is truncated. + */ + snippetEllipsisText?: string; + + /** + * Whether to restrict highlighting and snippeting to items that at least partially matched the search query. By default, all items are highlighted and snippeted. + */ + restrictHighlightAndSnippetArrays?: boolean; + + /** + * Minimum number of characters a word in the search query must contain to accept matches with [one typo](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#configuring-word-length-for-typos). + */ + minWordSizefor1Typo?: number; + + /** + * Minimum number of characters a word in the search query must contain to accept matches with [two typos](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#configuring-word-length-for-typos). + */ + minWordSizefor2Typos?: number; + + typoTolerance?: TypoTolerance; + + /** + * Whether to allow typos on numbers in the search query. Turn off this setting to reduce the number of irrelevant matches when searching in large sets of similar numbers. + */ + allowTyposOnNumericTokens?: boolean; + + /** + * Attributes for which you want to turn off [typo tolerance](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/). Attribute names are case-sensitive. Returning only exact matches can help when: - [Searching in hyphenated attributes](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/how-to/how-to-search-in-hyphenated-attributes/). - Reducing the number of matches when you have too many. This can happen with attributes that are long blocks of text, such as product descriptions. Consider alternatives such as `disableTypoToleranceOnWords` or adding synonyms if your attributes have intentional unusual spellings that might look like typos. + */ + disableTypoToleranceOnAttributes?: Array; + + ignorePlurals?: IgnorePlurals; + + removeStopWords?: RemoveStopWords; + + /** + * Languages for language-specific query processing steps such as plurals, stop-word removal, and word-detection dictionaries. This setting sets a default list of languages used by the `removeStopWords` and `ignorePlurals` settings. This setting also sets a dictionary for word detection in the logogram-based [CJK](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/normalization/#normalization-for-logogram-based-languages-cjk) languages. To support this, you must place the CJK language **first**. **You should always specify a query language.** If you don\'t specify an indexing language, the search engine uses all [supported languages](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/supported-languages/), or the languages you specified with the `ignorePlurals` or `removeStopWords` parameters. This can lead to unexpected search results. For more information, see [Language-specific configuration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/). + */ + queryLanguages?: Array; + + /** + * Whether to split compound words in the query into their building blocks. For more information, see [Word segmentation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/#splitting-compound-words). Word segmentation is supported for these languages: German, Dutch, Finnish, Swedish, and Norwegian. Decompounding doesn\'t work for words with [non-spacing mark Unicode characters](https://www.charactercodes.net/category/non-spacing_mark). For example, `Gartenstühle` won\'t be decompounded if the `ü` consists of `u` (U+0075) and `◌̈` (U+0308). + */ + decompoundQuery?: boolean; + + /** + * Whether to enable rules. + */ + enableRules?: boolean; + + /** + * Whether to enable Personalization. + */ + enablePersonalization?: boolean; + + queryType?: QueryType; + + removeWordsIfNoResults?: RemoveWordsIfNoResults; + + /** + * Whether to support phrase matching and excluding words from search queries. Use the `advancedSyntaxFeatures` parameter to control which feature is supported. + */ + advancedSyntax?: boolean; + + optionalWords?: OptionalWords | null; + + /** + * Searchable attributes for which you want to [turn off the Exact ranking criterion](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/adjust-exact-settings/#turn-off-exact-for-some-attributes). Attribute names are case-sensitive. This can be useful for attributes with long values, where the likelihood of an exact match is high, such as product descriptions. Turning off the Exact ranking criterion for these attributes favors exact matching on other attributes. This reduces the impact of individual attributes with a lot of content on ranking. + */ + disableExactOnAttributes?: Array; + + exactOnSingleWordQuery?: ExactOnSingleWordQuery; + + /** + * Determine which plurals and synonyms should be considered an exact matches. By default, Algolia treats singular and plural forms of a word, and single-word synonyms, as [exact](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#exact) matches when searching. For example: - \"swimsuit\" and \"swimsuits\" are treated the same - \"swimsuit\" and \"swimwear\" are treated the same (if they are [synonyms](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/adding-synonyms/#regular-synonyms)). - `ignorePlurals`. Plurals and similar declensions added by the `ignorePlurals` setting are considered exact matches. - `singleWordSynonym`. Single-word synonyms, such as \"NY\" = \"NYC\", are considered exact matches. - `multiWordsSynonym`. Multi-word synonyms, such as \"NY\" = \"New York\", are considered exact matches. + */ + alternativesAsExact?: Array; + + /** + * Advanced search syntax features you want to support. - `exactPhrase`. Phrases in quotes must match exactly. For example, `sparkly blue \"iPhone case\"` only returns records with the exact string \"iPhone case\". - `excludeWords`. Query words prefixed with a `-` must not occur in a record. For example, `search -engine` matches records that contain \"search\" but not \"engine\". This setting only has an effect if `advancedSyntax` is true. + */ + advancedSyntaxFeatures?: Array; + + distinct?: Distinct; + + /** + * Whether to replace a highlighted word with the matched synonym. By default, the original words are highlighted even if a synonym matches. For example, with `home` as a synonym for `house` and a search for `home`, records matching either \"home\" or \"house\" are included in the search results, and either \"home\" or \"house\" are highlighted. With `replaceSynonymsInHighlight` set to `true`, a search for `home` still matches the same records, but all occurrences of \"house\" are replaced by \"home\" in the highlighted response. + */ + replaceSynonymsInHighlight?: boolean; + + /** + * Minimum proximity score for two matching words. This adjusts the [Proximity ranking criterion](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#proximity) by equally scoring matches that are farther apart. For example, if `minProximity` is 2, neighboring matches and matches with one word between them would have the same score. + */ + minProximity?: number; + + /** + * Properties to include in the API response of search and browse requests. By default, all response properties are included. To reduce the response size, you can select which properties should be included. An empty list may lead to an empty API response (except properties you can\'t exclude). You can\'t exclude these properties: `message`, `warning`, `cursor`, `abTestVariantID`, or any property added by setting `getRankingInfo` to true. Your search depends on the `hits` field. If you omit this field, searches won\'t return any results. Your UI might also depend on other properties, for example, for pagination. Before restricting the response size, check the impact on your search experience. + */ + responseFields?: Array; + + /** + * Maximum number of facet values to return for each facet. + */ + maxValuesPerFacet?: number; + + /** + * Order in which to retrieve facet values. - `count`. Facet values are retrieved by decreasing count. The count is the number of matching records containing this facet value. - `alpha`. Retrieve facet values alphabetically. This setting doesn\'t influence how facet values are displayed in your UI (see `renderingContent`). For more information, see [facet value display](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/facet-display/js/). + */ + sortFacetValuesBy?: string; + + /** + * Whether the best matching attribute should be determined by minimum proximity. This setting only affects ranking if the Attribute ranking criterion comes before Proximity in the `ranking` setting. If true, the best matching attribute is selected based on the minimum proximity of multiple matches. Otherwise, the best matching attribute is determined by the order in the `searchableAttributes` setting. + */ + attributeCriteriaComputedByMinProximity?: boolean; + + renderingContent?: RenderingContent; + + /** + * Whether this search will use [Dynamic Re-Ranking](https://www.algolia.com/doc/guides/algolia-ai/re-ranking/). This setting only has an effect if you activated Dynamic Re-Ranking for this index in the Algolia dashboard. + */ + enableReRanking?: boolean; + + reRankingApplyFilter?: ReRankingApplyFilter | null; +}; diff --git a/packages/algoliasearch/lite/model/baseRecommendRequest.ts b/packages/algoliasearch/lite/model/baseRecommendRequest.ts new file mode 100644 index 000000000..ae8b1782e --- /dev/null +++ b/packages/algoliasearch/lite/model/baseRecommendRequest.ts @@ -0,0 +1,22 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendSearchParams } from './recommendSearchParams'; + +export type BaseRecommendRequest = { + /** + * Index name (case-sensitive). + */ + indexName: string; + + /** + * Minimum score a recommendation must have to be included in the response. + */ + threshold: number; + + /** + * Maximum number of recommendations to retrieve. By default, all recommendations are returned and no fallback request is made. Depending on the available recommendations and the other request parameters, the actual number of recommendations may be lower than this value. + */ + maxRecommendations?: number; + + queryParameters?: RecommendSearchParams; +}; diff --git a/packages/algoliasearch/lite/model/baseRecommendSearchParams.ts b/packages/algoliasearch/lite/model/baseRecommendSearchParams.ts new file mode 100644 index 000000000..bd10f6bac --- /dev/null +++ b/packages/algoliasearch/lite/model/baseRecommendSearchParams.ts @@ -0,0 +1,131 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AroundPrecision } from './aroundPrecision'; +import type { AroundRadius } from './aroundRadius'; +import type { FacetFilters } from './facetFilters'; +import type { InsideBoundingBox } from './insideBoundingBox'; +import type { NumericFilters } from './numericFilters'; +import type { OptionalFilters } from './optionalFilters'; +import type { SupportedLanguage } from './supportedLanguage'; +import type { TagFilters } from './tagFilters'; + +export type BaseRecommendSearchParams = { + /** + * Keywords to be used instead of the search query to conduct a more broader search. Using the `similarQuery` parameter changes other settings: - `queryType` is set to `prefixNone`. - `removeStopWords` is set to true. - `words` is set as the first ranking criterion. - All remaining words are treated as `optionalWords`. Since the `similarQuery` is supposed to do a broad search, they usually return many results. Combine it with `filters` to narrow down the list of results. + */ + similarQuery?: string; + + /** + * Filter expression to only include items that match the filter criteria in the response. You can use these filter expressions: - **Numeric filters.** ` `, where `` is one of `<`, `<=`, `=`, `!=`, `>`, `>=`. - **Ranges.** `: TO ` where `` and `` are the lower and upper limits of the range (inclusive). - **Facet filters.** `:` where `` is a facet attribute (case-sensitive) and `` a facet value. - **Tag filters.** `_tags:` or just `` (case-sensitive). - **Boolean filters.** `: true | false`. You can combine filters with `AND`, `OR`, and `NOT` operators with the following restrictions: - You can only combine filters of the same type with `OR`. **Not supported:** `facet:value OR num > 3`. - You can\'t use `NOT` with combinations of filters. **Not supported:** `NOT(facet:value OR facet:value)` - You can\'t combine conjunctions (`AND`) with `OR`. **Not supported:** `facet:value OR (facet:value AND facet:value)` Use quotes around your filters, if the facet attribute name or facet value has spaces, keywords (`OR`, `AND`, `NOT`), or quotes. If a facet attribute is an array, the filter matches if it matches at least one element of the array. For more information, see [Filters](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/). + */ + filters?: string; + + facetFilters?: FacetFilters; + + optionalFilters?: OptionalFilters; + + numericFilters?: NumericFilters; + + tagFilters?: TagFilters; + + /** + * Whether to sum all filter scores. If true, all filter scores are summed. Otherwise, the maximum filter score is kept. For more information, see [filter scores](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/in-depth/filter-scoring/#accumulating-scores-with-sumorfiltersscores). + */ + sumOrFiltersScores?: boolean; + + /** + * Restricts a search to a subset of your searchable attributes. Attribute names are case-sensitive. + */ + restrictSearchableAttributes?: Array; + + /** + * Facets for which to retrieve facet values that match the search criteria and the number of matching facet values. To retrieve all facets, use the wildcard character `*`. For more information, see [facets](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#contextual-facet-values-and-counts). + */ + facets?: Array; + + /** + * Whether faceting should be applied after deduplication with `distinct`. This leads to accurate facet counts when using faceting in combination with `distinct`. It\'s usually better to use `afterDistinct` modifiers in the `attributesForFaceting` setting, as `facetingAfterDistinct` only computes correct facet counts if all records have the same facet values for the `attributeForDistinct`. + */ + facetingAfterDistinct?: boolean; + + /** + * Coordinates for the center of a circle, expressed as a comma-separated string of latitude and longitude. Only records included within a circle around this central location are included in the results. The radius of the circle is determined by the `aroundRadius` and `minimumAroundRadius` settings. This parameter is ignored if you also specify `insidePolygon` or `insideBoundingBox`. + */ + aroundLatLng?: string; + + /** + * Whether to obtain the coordinates from the request\'s IP address. + */ + aroundLatLngViaIP?: boolean; + + aroundRadius?: AroundRadius; + + aroundPrecision?: AroundPrecision; + + /** + * Minimum radius (in meters) for a search around a location when `aroundRadius` isn\'t set. + */ + minimumAroundRadius?: number; + + insideBoundingBox?: InsideBoundingBox | null; + + /** + * Coordinates of a polygon in which to search. Polygons are defined by 3 to 10,000 points. Each point is represented by its latitude and longitude. Provide multiple polygons as nested arrays. For more information, see [filtering inside polygons](https://www.algolia.com/doc/guides/managing-results/refine-results/geolocation/#filtering-inside-rectangular-or-polygonal-areas). This parameter is ignored if you also specify `insideBoundingBox`. + */ + insidePolygon?: Array>; + + /** + * ISO language codes that adjust settings that are useful for processing natural language queries (as opposed to keyword searches): - Sets `removeStopWords` and `ignorePlurals` to the list of provided languages. - Sets `removeWordsIfNoResults` to `allOptional`. - Adds a `natural_language` attribute to `ruleContexts` and `analyticsTags`. + */ + naturalLanguages?: Array; + + /** + * Assigns a rule context to the search query. [Rule contexts](https://www.algolia.com/doc/guides/managing-results/rules/rules-overview/how-to/customize-search-results-by-platform/#whats-a-context) are strings that you can use to trigger matching rules. + */ + ruleContexts?: Array; + + /** + * Impact that Personalization should have on this search. The higher this value is, the more Personalization determines the ranking compared to other factors. For more information, see [Understanding Personalization impact](https://www.algolia.com/doc/guides/personalization/personalizing-results/in-depth/configuring-personalization/#understanding-personalization-impact). + */ + personalizationImpact?: number; + + /** + * Unique pseudonymous or anonymous user identifier. This helps with analytics and click and conversion events. For more information, see [user token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken?: string; + + /** + * Whether the search response should include detailed ranking information. + */ + getRankingInfo?: boolean; + + /** + * Whether to take into account an index\'s synonyms for this search. + */ + synonyms?: boolean; + + /** + * Whether to include a `queryID` attribute in the response. The query ID is a unique identifier for a search query and is required for tracking [click and conversion events](https://www.algolia.com/guides/sending-events/getting-started/). + */ + clickAnalytics?: boolean; + + /** + * Whether this search will be included in Analytics. + */ + analytics?: boolean; + + /** + * Tags to apply to the query for [segmenting analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + analyticsTags?: Array; + + /** + * Whether to include this search when calculating processing-time percentiles. + */ + percentileComputation?: boolean; + + /** + * Whether to enable A/B testing for this search. + */ + enableABTest?: boolean; +}; diff --git a/packages/algoliasearch/lite/model/baseSearchParams.ts b/packages/algoliasearch/lite/model/baseSearchParams.ts new file mode 100644 index 000000000..030809e05 --- /dev/null +++ b/packages/algoliasearch/lite/model/baseSearchParams.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchParamsWithoutQuery } from './baseSearchParamsWithoutQuery'; +import type { SearchParamsQuery } from './searchParamsQuery'; + +export type BaseSearchParams = SearchParamsQuery & BaseSearchParamsWithoutQuery; diff --git a/packages/algoliasearch/lite/model/baseSearchParamsWithoutQuery.ts b/packages/algoliasearch/lite/model/baseSearchParamsWithoutQuery.ts new file mode 100644 index 000000000..69fcbe82a --- /dev/null +++ b/packages/algoliasearch/lite/model/baseSearchParamsWithoutQuery.ts @@ -0,0 +1,146 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AroundPrecision } from './aroundPrecision'; +import type { AroundRadius } from './aroundRadius'; +import type { FacetFilters } from './facetFilters'; +import type { InsideBoundingBox } from './insideBoundingBox'; +import type { NumericFilters } from './numericFilters'; +import type { OptionalFilters } from './optionalFilters'; +import type { SupportedLanguage } from './supportedLanguage'; +import type { TagFilters } from './tagFilters'; + +export type BaseSearchParamsWithoutQuery = { + /** + * Keywords to be used instead of the search query to conduct a more broader search. Using the `similarQuery` parameter changes other settings: - `queryType` is set to `prefixNone`. - `removeStopWords` is set to true. - `words` is set as the first ranking criterion. - All remaining words are treated as `optionalWords`. Since the `similarQuery` is supposed to do a broad search, they usually return many results. Combine it with `filters` to narrow down the list of results. + */ + similarQuery?: string; + + /** + * Filter expression to only include items that match the filter criteria in the response. You can use these filter expressions: - **Numeric filters.** ` `, where `` is one of `<`, `<=`, `=`, `!=`, `>`, `>=`. - **Ranges.** `: TO ` where `` and `` are the lower and upper limits of the range (inclusive). - **Facet filters.** `:` where `` is a facet attribute (case-sensitive) and `` a facet value. - **Tag filters.** `_tags:` or just `` (case-sensitive). - **Boolean filters.** `: true | false`. You can combine filters with `AND`, `OR`, and `NOT` operators with the following restrictions: - You can only combine filters of the same type with `OR`. **Not supported:** `facet:value OR num > 3`. - You can\'t use `NOT` with combinations of filters. **Not supported:** `NOT(facet:value OR facet:value)` - You can\'t combine conjunctions (`AND`) with `OR`. **Not supported:** `facet:value OR (facet:value AND facet:value)` Use quotes around your filters, if the facet attribute name or facet value has spaces, keywords (`OR`, `AND`, `NOT`), or quotes. If a facet attribute is an array, the filter matches if it matches at least one element of the array. For more information, see [Filters](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/). + */ + filters?: string; + + facetFilters?: FacetFilters; + + optionalFilters?: OptionalFilters; + + numericFilters?: NumericFilters; + + tagFilters?: TagFilters; + + /** + * Whether to sum all filter scores. If true, all filter scores are summed. Otherwise, the maximum filter score is kept. For more information, see [filter scores](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/in-depth/filter-scoring/#accumulating-scores-with-sumorfiltersscores). + */ + sumOrFiltersScores?: boolean; + + /** + * Restricts a search to a subset of your searchable attributes. Attribute names are case-sensitive. + */ + restrictSearchableAttributes?: Array; + + /** + * Facets for which to retrieve facet values that match the search criteria and the number of matching facet values. To retrieve all facets, use the wildcard character `*`. For more information, see [facets](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#contextual-facet-values-and-counts). + */ + facets?: Array; + + /** + * Whether faceting should be applied after deduplication with `distinct`. This leads to accurate facet counts when using faceting in combination with `distinct`. It\'s usually better to use `afterDistinct` modifiers in the `attributesForFaceting` setting, as `facetingAfterDistinct` only computes correct facet counts if all records have the same facet values for the `attributeForDistinct`. + */ + facetingAfterDistinct?: boolean; + + /** + * Page of search results to retrieve. + */ + page?: number; + + /** + * Position of the first hit to retrieve. + */ + offset?: number; + + /** + * Number of hits to retrieve (used in combination with `offset`). + */ + length?: number; + + /** + * Coordinates for the center of a circle, expressed as a comma-separated string of latitude and longitude. Only records included within a circle around this central location are included in the results. The radius of the circle is determined by the `aroundRadius` and `minimumAroundRadius` settings. This parameter is ignored if you also specify `insidePolygon` or `insideBoundingBox`. + */ + aroundLatLng?: string; + + /** + * Whether to obtain the coordinates from the request\'s IP address. + */ + aroundLatLngViaIP?: boolean; + + aroundRadius?: AroundRadius; + + aroundPrecision?: AroundPrecision; + + /** + * Minimum radius (in meters) for a search around a location when `aroundRadius` isn\'t set. + */ + minimumAroundRadius?: number; + + insideBoundingBox?: InsideBoundingBox | null; + + /** + * Coordinates of a polygon in which to search. Polygons are defined by 3 to 10,000 points. Each point is represented by its latitude and longitude. Provide multiple polygons as nested arrays. For more information, see [filtering inside polygons](https://www.algolia.com/doc/guides/managing-results/refine-results/geolocation/#filtering-inside-rectangular-or-polygonal-areas). This parameter is ignored if you also specify `insideBoundingBox`. + */ + insidePolygon?: Array>; + + /** + * ISO language codes that adjust settings that are useful for processing natural language queries (as opposed to keyword searches): - Sets `removeStopWords` and `ignorePlurals` to the list of provided languages. - Sets `removeWordsIfNoResults` to `allOptional`. - Adds a `natural_language` attribute to `ruleContexts` and `analyticsTags`. + */ + naturalLanguages?: Array; + + /** + * Assigns a rule context to the search query. [Rule contexts](https://www.algolia.com/doc/guides/managing-results/rules/rules-overview/how-to/customize-search-results-by-platform/#whats-a-context) are strings that you can use to trigger matching rules. + */ + ruleContexts?: Array; + + /** + * Impact that Personalization should have on this search. The higher this value is, the more Personalization determines the ranking compared to other factors. For more information, see [Understanding Personalization impact](https://www.algolia.com/doc/guides/personalization/personalizing-results/in-depth/configuring-personalization/#understanding-personalization-impact). + */ + personalizationImpact?: number; + + /** + * Unique pseudonymous or anonymous user identifier. This helps with analytics and click and conversion events. For more information, see [user token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken?: string; + + /** + * Whether the search response should include detailed ranking information. + */ + getRankingInfo?: boolean; + + /** + * Whether to take into account an index\'s synonyms for this search. + */ + synonyms?: boolean; + + /** + * Whether to include a `queryID` attribute in the response. The query ID is a unique identifier for a search query and is required for tracking [click and conversion events](https://www.algolia.com/guides/sending-events/getting-started/). + */ + clickAnalytics?: boolean; + + /** + * Whether this search will be included in Analytics. + */ + analytics?: boolean; + + /** + * Tags to apply to the query for [segmenting analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + analyticsTags?: Array; + + /** + * Whether to include this search when calculating processing-time percentiles. + */ + percentileComputation?: boolean; + + /** + * Whether to enable A/B testing for this search. + */ + enableABTest?: boolean; +}; diff --git a/packages/algoliasearch/lite/model/baseSearchResponse.ts b/packages/algoliasearch/lite/model/baseSearchResponse.ts new file mode 100644 index 000000000..066ecc865 --- /dev/null +++ b/packages/algoliasearch/lite/model/baseSearchResponse.ts @@ -0,0 +1,129 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Exhaustive } from './exhaustive'; +import type { FacetStats } from './facetStats'; +import type { Redirect } from './redirect'; +import type { RenderingContent } from './renderingContent'; + +export type BaseSearchResponse = Record & { + /** + * A/B test ID. This is only included in the response for indices that are part of an A/B test. + */ + abTestID?: number; + + /** + * Variant ID. This is only included in the response for indices that are part of an A/B test. + */ + abTestVariantID?: number; + + /** + * Computed geographical location. + */ + aroundLatLng?: string; + + /** + * Distance from a central coordinate provided by `aroundLatLng`. + */ + automaticRadius?: string; + + exhaustive?: Exhaustive; + + /** + * Rules applied to the query. + */ + appliedRules?: Array>; + + /** + * See the `facetsCount` field of the `exhaustive` object in the response. + */ + exhaustiveFacetsCount?: boolean; + + /** + * See the `nbHits` field of the `exhaustive` object in the response. + */ + exhaustiveNbHits?: boolean; + + /** + * See the `typo` field of the `exhaustive` object in the response. + */ + exhaustiveTypo?: boolean; + + /** + * Facet counts. + */ + facets?: { [key: string]: { [key: string]: number } }; + + /** + * Statistics for numerical facets. + */ + facets_stats?: { [key: string]: FacetStats }; + + /** + * Index name used for the query. + */ + index?: string; + + /** + * Index name used for the query. During A/B testing, the targeted index isn\'t always the index used by the query. + */ + indexUsed?: string; + + /** + * Warnings about the query. + */ + message?: string; + + /** + * Number of hits selected and sorted by the relevant sort algorithm. + */ + nbSortedHits?: number; + + /** + * Post-[normalization](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/#what-does-normalization-mean) query string that will be searched. + */ + parsedQuery?: string; + + /** + * Time the server took to process the request, in milliseconds. + */ + processingTimeMS: number; + + /** + * Experimental. List of processing steps and their times, in milliseconds. You can use this list to investigate performance issues. + */ + processingTimingsMS?: Record; + + /** + * Markup text indicating which parts of the original query have been removed to retrieve a non-empty result set. + */ + queryAfterRemoval?: string; + + redirect?: Redirect; + + renderingContent?: RenderingContent; + + /** + * Time the server took to process the request, in milliseconds. + */ + serverTimeMS?: number; + + /** + * Host name of the server that processed the request. + */ + serverUsed?: string; + + /** + * An object with custom data. You can store up to 32kB as custom data. + */ + userData?: any | null; + + /** + * Unique identifier for the query. This is used for [click analytics](https://www.algolia.com/doc/guides/analytics/click-analytics/). + */ + queryID?: string; + + /** + * Whether automatic events collection is enabled for the application. + */ + _automaticInsights?: boolean; +}; diff --git a/packages/algoliasearch/lite/model/booleanString.ts b/packages/algoliasearch/lite/model/booleanString.ts new file mode 100644 index 000000000..4cf1fb196 --- /dev/null +++ b/packages/algoliasearch/lite/model/booleanString.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BooleanString = 'true' | 'false'; diff --git a/packages/algoliasearch/lite/model/boughtTogetherQuery.ts b/packages/algoliasearch/lite/model/boughtTogetherQuery.ts new file mode 100644 index 000000000..19c909cb9 --- /dev/null +++ b/packages/algoliasearch/lite/model/boughtTogetherQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseRecommendRequest } from './baseRecommendRequest'; +import type { FrequentlyBoughtTogether } from './frequentlyBoughtTogether'; + +export type BoughtTogetherQuery = BaseRecommendRequest & FrequentlyBoughtTogether; diff --git a/packages/algoliasearch/lite/model/browsePagination.ts b/packages/algoliasearch/lite/model/browsePagination.ts new file mode 100644 index 000000000..3a9bb25eb --- /dev/null +++ b/packages/algoliasearch/lite/model/browsePagination.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BrowsePagination = { + /** + * Page of search results to retrieve. + */ + page?: number; + + /** + * Number of results (hits). + */ + nbHits?: number; + + /** + * Number of pages of results. + */ + nbPages?: number; + + /** + * Number of hits per page. + */ + hitsPerPage?: number; +}; diff --git a/packages/algoliasearch/lite/model/browseParamsObject.ts b/packages/algoliasearch/lite/model/browseParamsObject.ts new file mode 100644 index 000000000..340270dcf --- /dev/null +++ b/packages/algoliasearch/lite/model/browseParamsObject.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Cursor } from './cursor'; +import type { SearchParamsObject } from './searchParamsObject'; + +export type BrowseParamsObject = SearchParamsObject & Cursor; diff --git a/packages/algoliasearch/lite/model/browseResponse.ts b/packages/algoliasearch/lite/model/browseResponse.ts new file mode 100644 index 000000000..b1bd5513c --- /dev/null +++ b/packages/algoliasearch/lite/model/browseResponse.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchResponse } from './baseSearchResponse'; +import type { BrowsePagination } from './browsePagination'; +import type { Cursor } from './cursor'; +import type { SearchHits } from './searchHits'; + +export type BrowseResponse> = BaseSearchResponse & + BrowsePagination & + SearchHits & + Cursor; diff --git a/packages/algoliasearch/lite/model/clientMethodProps.ts b/packages/algoliasearch/lite/model/clientMethodProps.ts new file mode 100644 index 000000000..efbc97347 --- /dev/null +++ b/packages/algoliasearch/lite/model/clientMethodProps.ts @@ -0,0 +1,63 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendationsRequest } from './recommendationsRequest'; +import type { SearchForFacetsOptions } from './searchForFacetsOptions'; +import type { SearchForHitsOptions } from './searchForHitsOptions'; +import type { SearchParamsObject } from './searchParamsObject'; + +/** + * Properties for the `customPost` method. + */ +export type CustomPostProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Recommend method signature compatible with the `algoliasearch` v4 package. When using this signature, extra computation will be required to make it match the new signature. + * + * @deprecated This signature will be removed from the next major version, we recommend using the `GetRecommendationsParams` type for performances and future proof reasons. + */ +export type LegacyGetRecommendationsParams = RecommendationsRequest[]; + +/** + * In v4, the search parameters are wrapped in a `params` parameter. + * + * @deprecated The `search` method now accepts flat `searchParams` at the root of the method. + */ +type LegacySearchParams = { + params?: SearchParamsObject; +}; + +/** + * In v4, the search parameters are wrapped in a `params` parameter. + * + * @deprecated The `search` method now accepts flat `searchParams` at the root of the method. + */ +type LegacySearchForFacets = LegacySearchParams & SearchForFacetsOptions; + +/** + * In v4, the search parameters are wrapped in a `params` parameter. + * + * @deprecated The `search` method now accepts flat `searchParams` at the root of the method. + */ +type LegacySearchForHits = LegacySearchParams & SearchForHitsOptions; + +type LegacySearchQuery = LegacySearchForFacets | LegacySearchForHits; + +/** + * Search method signature compatible with the `algoliasearch` v4 package. When using this signature, extra computation will be required to make it match the new signature. + * + * @deprecated This signature will be removed from the next major version, we recommend using the `SearchMethodParams` type for performances and future proof reasons. + */ +export type LegacySearchMethodProps = LegacySearchQuery[]; diff --git a/packages/algoliasearch/lite/model/consequenceParams.ts b/packages/algoliasearch/lite/model/consequenceParams.ts new file mode 100644 index 000000000..94b26e7fc --- /dev/null +++ b/packages/algoliasearch/lite/model/consequenceParams.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchParamsWithoutQuery } from './baseSearchParamsWithoutQuery'; +import type { IndexSettingsAsSearchParams } from './indexSettingsAsSearchParams'; +import type { Params } from './params'; + +export type ConsequenceParams = BaseSearchParamsWithoutQuery & IndexSettingsAsSearchParams & Params; diff --git a/packages/algoliasearch/lite/model/consequenceQuery.ts b/packages/algoliasearch/lite/model/consequenceQuery.ts new file mode 100644 index 000000000..28d8722a3 --- /dev/null +++ b/packages/algoliasearch/lite/model/consequenceQuery.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ConsequenceQueryObject } from './consequenceQueryObject'; + +/** + * Replace or edit the search query. If `consequenceQuery` is a string, the entire search query is replaced with that string. If `consequenceQuery` is an object, it describes incremental edits made to the query. + */ +export type ConsequenceQuery = ConsequenceQueryObject | string; diff --git a/packages/algoliasearch/lite/model/consequenceQueryObject.ts b/packages/algoliasearch/lite/model/consequenceQueryObject.ts new file mode 100644 index 000000000..483ebf214 --- /dev/null +++ b/packages/algoliasearch/lite/model/consequenceQueryObject.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Edit } from './edit'; + +export type ConsequenceQueryObject = { + /** + * Words to remove from the search query. + */ + remove?: Array; + + /** + * Changes to make to the search query. + */ + edits?: Array; +}; diff --git a/packages/algoliasearch/lite/model/cursor.ts b/packages/algoliasearch/lite/model/cursor.ts new file mode 100644 index 000000000..db36a6129 --- /dev/null +++ b/packages/algoliasearch/lite/model/cursor.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Cursor = { + /** + * Cursor to get the next page of the response. The parameter must match the value returned in the response of a previous request. The last page of the response does not return a `cursor` attribute. + */ + cursor?: string; +}; diff --git a/packages/algoliasearch/lite/model/distinct.ts b/packages/algoliasearch/lite/model/distinct.ts new file mode 100644 index 000000000..dc87dfb00 --- /dev/null +++ b/packages/algoliasearch/lite/model/distinct.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Determines how many records of a group are included in the search results. Records with the same value for the `attributeForDistinct` attribute are considered a group. The `distinct` setting controls how many members of the group are returned. This is useful for [deduplication and grouping](https://www.algolia.com/doc/guides/managing-results/refine-results/grouping/#introducing-algolias-distinct-feature). The `distinct` setting is ignored if `attributeForDistinct` is not set. + */ +export type Distinct = boolean | number; diff --git a/packages/algoliasearch/lite/model/edit.ts b/packages/algoliasearch/lite/model/edit.ts new file mode 100644 index 000000000..b77d006e3 --- /dev/null +++ b/packages/algoliasearch/lite/model/edit.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { EditType } from './editType'; + +export type Edit = { + type?: EditType; + + /** + * Text or patterns to remove from the query string. + */ + delete?: string; + + /** + * Text to be added in place of the deleted text inside the query string. + */ + insert?: string; +}; diff --git a/packages/algoliasearch/lite/model/editType.ts b/packages/algoliasearch/lite/model/editType.ts new file mode 100644 index 000000000..27ed9b621 --- /dev/null +++ b/packages/algoliasearch/lite/model/editType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Type of edit. + */ +export type EditType = 'remove' | 'replace'; diff --git a/packages/algoliasearch/lite/model/errorBase.ts b/packages/algoliasearch/lite/model/errorBase.ts new file mode 100644 index 000000000..960e509cb --- /dev/null +++ b/packages/algoliasearch/lite/model/errorBase.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Error. + */ +export type ErrorBase = Record & { + message?: string; +}; diff --git a/packages/algoliasearch/lite/model/exactOnSingleWordQuery.ts b/packages/algoliasearch/lite/model/exactOnSingleWordQuery.ts new file mode 100644 index 000000000..d01b358f6 --- /dev/null +++ b/packages/algoliasearch/lite/model/exactOnSingleWordQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Determines how the [Exact ranking criterion](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/adjust-exact-settings/#turn-off-exact-for-some-attributes) is computed when the search query has only one word. - `attribute`. The Exact ranking criterion is 1 if the query word and attribute value are the same. For example, a search for \"road\" will match the value \"road\", but not \"road trip\". - `none`. The Exact ranking criterion is ignored on single-word searches. - `word`. The Exact ranking criterion is 1 if the query word is found in the attribute value. The query word must have at least 3 characters and must not be a stop word. Only exact matches will be highlighted, partial and prefix matches won\'t. + */ +export type ExactOnSingleWordQuery = 'attribute' | 'none' | 'word'; diff --git a/packages/algoliasearch/lite/model/exhaustive.ts b/packages/algoliasearch/lite/model/exhaustive.ts new file mode 100644 index 000000000..6e578adf1 --- /dev/null +++ b/packages/algoliasearch/lite/model/exhaustive.ts @@ -0,0 +1,31 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Whether certain properties of the search response are calculated exhaustive (exact) or approximated. + */ +export type Exhaustive = { + /** + * Whether the facet count is exhaustive (`true`) or approximate (`false`). See the [related discussion](https://support.algolia.com/hc/en-us/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate-). + */ + facetsCount?: boolean; + + /** + * The value is `false` if not all facet values are retrieved. + */ + facetValues?: boolean; + + /** + * Whether the `nbHits` is exhaustive (`true`) or approximate (`false`). When the query takes more than 50ms to be processed, the engine makes an approximation. This can happen when using complex filters on millions of records, when typo-tolerance was not exhaustive, or when enough hits have been retrieved (for example, after the engine finds 10,000 exact matches). `nbHits` is reported as non-exhaustive whenever an approximation is made, even if the approximation didn’t, in the end, impact the exhaustivity of the query. + */ + nbHits?: boolean; + + /** + * Rules matching exhaustivity. The value is `false` if rules were enable for this query, and could not be fully processed due a timeout. This is generally caused by the number of alternatives (such as typos) which is too large. + */ + rulesMatch?: boolean; + + /** + * Whether the typo search was exhaustive (`true`) or approximate (`false`). An approximation is done when the typo search query part takes more than 10% of the query budget (ie. 5ms by default) to be processed (this can happen when a lot of typo alternatives exist for the query). This field will not be included when typo-tolerance is entirely disabled. + */ + typo?: boolean; +}; diff --git a/packages/algoliasearch/lite/model/facetFilters.ts b/packages/algoliasearch/lite/model/facetFilters.ts new file mode 100644 index 000000000..0dc5e336e --- /dev/null +++ b/packages/algoliasearch/lite/model/facetFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter the search by facet values, so that only records with the same facet values are retrieved. **Prefer using the `filters` parameter, which supports all filter types and combinations with boolean operators.** - `[filter1, filter2]` is interpreted as `filter1 AND filter2`. - `[[filter1, filter2], filter3]` is interpreted as `filter1 OR filter2 AND filter3`. - `facet:-value` is interpreted as `NOT facet:value`. While it\'s best to avoid attributes that start with a `-`, you can still filter them by escaping with a backslash: `facet:\\-value`. + */ +export type FacetFilters = Array | string; diff --git a/packages/algoliasearch/lite/model/facetHits.ts b/packages/algoliasearch/lite/model/facetHits.ts new file mode 100644 index 000000000..bd205a61e --- /dev/null +++ b/packages/algoliasearch/lite/model/facetHits.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type FacetHits = { + /** + * Facet value. + */ + value: string; + + /** + * Highlighted attribute value, including HTML tags. + */ + highlighted: string; + + /** + * Number of records with this facet value. [The count may be approximated](https://support.algolia.com/hc/en-us/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate-). + */ + count: number; +}; diff --git a/packages/algoliasearch/lite/model/facetOrdering.ts b/packages/algoliasearch/lite/model/facetOrdering.ts new file mode 100644 index 000000000..ef3e2f406 --- /dev/null +++ b/packages/algoliasearch/lite/model/facetOrdering.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { IndexSettingsFacets } from './indexSettingsFacets'; +import type { Value } from './value'; + +/** + * Order of facet names and facet values in your UI. + */ +export type FacetOrdering = { + facets?: IndexSettingsFacets; + + /** + * Order of facet values. One object for each facet. + */ + values?: { [key: string]: Value }; +}; diff --git a/packages/algoliasearch/lite/model/facetStats.ts b/packages/algoliasearch/lite/model/facetStats.ts new file mode 100644 index 000000000..f8bb276a8 --- /dev/null +++ b/packages/algoliasearch/lite/model/facetStats.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type FacetStats = { + /** + * Minimum value in the results. + */ + min?: number; + + /** + * Maximum value in the results. + */ + max?: number; + + /** + * Average facet value in the results. + */ + avg?: number; + + /** + * Sum of all values in the results. + */ + sum?: number; +}; diff --git a/packages/algoliasearch/lite/model/fallbackParams.ts b/packages/algoliasearch/lite/model/fallbackParams.ts new file mode 100644 index 000000000..c7fdc6515 --- /dev/null +++ b/packages/algoliasearch/lite/model/fallbackParams.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendSearchParams } from './recommendSearchParams'; + +export type FallbackParams = RecommendSearchParams & Record; diff --git a/packages/algoliasearch/lite/model/fbtModel.ts b/packages/algoliasearch/lite/model/fbtModel.ts new file mode 100644 index 000000000..29ee3206e --- /dev/null +++ b/packages/algoliasearch/lite/model/fbtModel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Frequently bought together model. This model recommends items that have been purchased within 1 day with the item with the ID `objectID`. + */ +export type FbtModel = 'bought-together'; diff --git a/packages/algoliasearch/lite/model/frequentlyBoughtTogether.ts b/packages/algoliasearch/lite/model/frequentlyBoughtTogether.ts new file mode 100644 index 000000000..324ffe151 --- /dev/null +++ b/packages/algoliasearch/lite/model/frequentlyBoughtTogether.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FbtModel } from './fbtModel'; + +export type FrequentlyBoughtTogether = { + model: FbtModel; + + /** + * Unique record identifier. + */ + objectID: string; +}; diff --git a/packages/algoliasearch/lite/model/getApiKeyResponse.ts b/packages/algoliasearch/lite/model/getApiKeyResponse.ts new file mode 100644 index 000000000..f88d1005d --- /dev/null +++ b/packages/algoliasearch/lite/model/getApiKeyResponse.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ApiKey } from './apiKey'; +import type { BaseGetApiKeyResponse } from './baseGetApiKeyResponse'; + +export type GetApiKeyResponse = BaseGetApiKeyResponse & ApiKey; diff --git a/packages/algoliasearch/lite/model/getRecommendationsParams.ts b/packages/algoliasearch/lite/model/getRecommendationsParams.ts new file mode 100644 index 000000000..55b34d5bc --- /dev/null +++ b/packages/algoliasearch/lite/model/getRecommendationsParams.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendationsRequest } from './recommendationsRequest'; + +/** + * Recommend request body. + */ +export type GetRecommendationsParams = { + /** + * Recommendation request with parameters depending on the requested model. + */ + requests: Array; +}; diff --git a/packages/algoliasearch/lite/model/getRecommendationsResponse.ts b/packages/algoliasearch/lite/model/getRecommendationsResponse.ts new file mode 100644 index 000000000..a25c511f4 --- /dev/null +++ b/packages/algoliasearch/lite/model/getRecommendationsResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendationsResults } from './recommendationsResults'; + +export type GetRecommendationsResponse = { + results: Array; +}; diff --git a/packages/algoliasearch/lite/model/highlightResult.ts b/packages/algoliasearch/lite/model/highlightResult.ts new file mode 100644 index 000000000..102271a17 --- /dev/null +++ b/packages/algoliasearch/lite/model/highlightResult.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { HighlightResultOption } from './highlightResultOption'; + +export type HighlightResult = HighlightResultOption | { [key: string]: HighlightResult } | Array; diff --git a/packages/algoliasearch/lite/model/highlightResultOption.ts b/packages/algoliasearch/lite/model/highlightResultOption.ts new file mode 100644 index 000000000..47ab0b748 --- /dev/null +++ b/packages/algoliasearch/lite/model/highlightResultOption.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchLevel } from './matchLevel'; + +/** + * Surround words that match the query with HTML tags for highlighting. + */ +export type HighlightResultOption = { + /** + * Highlighted attribute value, including HTML tags. + */ + value: string; + + matchLevel: MatchLevel; + + /** + * List of matched words from the search query. + */ + matchedWords: Array; + + /** + * Whether the entire attribute value is highlighted. + */ + fullyHighlighted?: boolean; +}; diff --git a/packages/algoliasearch/lite/model/hit.ts b/packages/algoliasearch/lite/model/hit.ts new file mode 100644 index 000000000..da626f902 --- /dev/null +++ b/packages/algoliasearch/lite/model/hit.ts @@ -0,0 +1,29 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { HighlightResult } from './highlightResult'; +import type { RankingInfo } from './rankingInfo'; +import type { SnippetResult } from './snippetResult'; + +/** + * Search result. A hit is a record from your index, augmented with special attributes for highlighting, snippeting, and ranking. + */ +export type Hit> = T & { + /** + * Unique record identifier. + */ + objectID: string; + + /** + * Surround words that match the query with HTML tags for highlighting. + */ + _highlightResult?: { [key: string]: HighlightResult }; + + /** + * Snippets that show the context around a matching search query. + */ + _snippetResult?: { [key: string]: SnippetResult }; + + _rankingInfo?: RankingInfo; + + _distinctSeqID?: number; +}; diff --git a/packages/algoliasearch/lite/model/ignorePlurals.ts b/packages/algoliasearch/lite/model/ignorePlurals.ts new file mode 100644 index 000000000..5e4ac00cb --- /dev/null +++ b/packages/algoliasearch/lite/model/ignorePlurals.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BooleanString } from './booleanString'; +import type { SupportedLanguage } from './supportedLanguage'; + +/** + * Treat singular, plurals, and other forms of declensions as equivalent. You should only use this feature for the languages used in your index. + */ +export type IgnorePlurals = Array | BooleanString | boolean; diff --git a/packages/algoliasearch/lite/model/index.ts b/packages/algoliasearch/lite/model/index.ts new file mode 100644 index 000000000..4ff806c5a --- /dev/null +++ b/packages/algoliasearch/lite/model/index.ts @@ -0,0 +1,127 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export * from './acl'; +export * from './advancedSyntaxFeatures'; +export * from './alternativesAsExact'; +export * from './apiKey'; +export * from './aroundPrecision'; +export * from './aroundRadius'; +export * from './aroundRadiusAll'; +export * from './automaticFacetFilter'; +export * from './automaticFacetFilters'; +export * from './banner'; +export * from './bannerImage'; +export * from './bannerImageUrl'; +export * from './bannerLink'; +export * from './baseGetApiKeyResponse'; +export * from './baseIndexSettings'; +export * from './baseRecommendIndexSettings'; +export * from './baseRecommendRequest'; +export * from './baseRecommendSearchParams'; +export * from './baseSearchParams'; +export * from './baseSearchParamsWithoutQuery'; +export * from './baseSearchResponse'; +export * from './booleanString'; +export * from './boughtTogetherQuery'; +export * from './browsePagination'; +export * from './browseParamsObject'; +export * from './browseResponse'; +export * from './clientMethodProps'; +export * from './consequenceParams'; +export * from './consequenceQuery'; +export * from './consequenceQueryObject'; +export * from './cursor'; +export * from './distinct'; +export * from './edit'; +export * from './editType'; +export * from './errorBase'; +export * from './exactOnSingleWordQuery'; +export * from './exhaustive'; +export * from './facetFilters'; +export * from './facetHits'; +export * from './facetOrdering'; +export * from './facetStats'; +export * from './fallbackParams'; +export * from './fbtModel'; +export * from './frequentlyBoughtTogether'; +export * from './getApiKeyResponse'; +export * from './getRecommendationsParams'; +export * from './getRecommendationsResponse'; +export * from './highlightResult'; +export * from './highlightResultOption'; +export * from './hit'; +export * from './ignorePlurals'; +export * from './indexSettings'; +export * from './indexSettingsAsSearchParams'; +export * from './indexSettingsFacets'; +export * from './insideBoundingBox'; +export * from './lookingSimilar'; +export * from './lookingSimilarModel'; +export * from './lookingSimilarQuery'; +export * from './matchedGeoLocation'; +export * from './matchLevel'; +export * from './mode'; +export * from './numericFilters'; +export * from './optionalFilters'; +export * from './optionalWords'; +export * from './params'; +export * from './personalization'; +export * from './queryType'; +export * from './range'; +export * from './rankingInfo'; +export * from './recommendationsHit'; +export * from './recommendationsHits'; +export * from './recommendationsRequest'; +export * from './recommendationsResults'; +export * from './recommendHit'; +export * from './recommendIndexSettings'; +export * from './recommendSearchParams'; +export * from './redirect'; +export * from './redirectRuleIndexData'; +export * from './redirectRuleIndexMetadata'; +export * from './redirectURL'; +export * from './relatedModel'; +export * from './relatedProducts'; +export * from './relatedQuery'; +export * from './removeStopWords'; +export * from './removeWordsIfNoResults'; +export * from './renderingContent'; +export * from './reRankingApplyFilter'; +export * from './searchForFacets'; +export * from './searchForFacetsOptions'; +export * from './searchForFacetValuesResponse'; +export * from './searchForHits'; +export * from './searchForHitsOptions'; +export * from './searchHits'; +export * from './searchMethodParams'; +export * from './searchPagination'; +export * from './searchParams'; +export * from './searchParamsObject'; +export * from './searchParamsQuery'; +export * from './searchParamsString'; +export * from './searchQuery'; +export * from './searchResponse'; +export * from './searchResponses'; +export * from './searchResult'; +export * from './searchStrategy'; +export * from './searchTypeDefault'; +export * from './searchTypeFacet'; +export * from './semanticSearch'; +export * from './settingsResponse'; +export * from './snippetResult'; +export * from './snippetResultOption'; +export * from './sortRemainingBy'; +export * from './supportedLanguage'; +export * from './tagFilters'; +export * from './trendingFacetHit'; +export * from './trendingFacets'; +export * from './trendingFacetsModel'; +export * from './trendingFacetsQuery'; +export * from './trendingItems'; +export * from './trendingItemsModel'; +export * from './trendingItemsQuery'; +export * from './typoTolerance'; +export * from './typoToleranceEnum'; +export * from './value'; +export * from './widgets'; +export * from './withPrimary'; diff --git a/packages/algoliasearch/lite/model/indexSettings.ts b/packages/algoliasearch/lite/model/indexSettings.ts new file mode 100644 index 000000000..7f2e9acde --- /dev/null +++ b/packages/algoliasearch/lite/model/indexSettings.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseIndexSettings } from './baseIndexSettings'; +import type { IndexSettingsAsSearchParams } from './indexSettingsAsSearchParams'; + +/** + * Index settings. + */ +export type IndexSettings = BaseIndexSettings & IndexSettingsAsSearchParams; diff --git a/packages/algoliasearch/lite/model/indexSettingsAsSearchParams.ts b/packages/algoliasearch/lite/model/indexSettingsAsSearchParams.ts new file mode 100644 index 000000000..6d54e76c2 --- /dev/null +++ b/packages/algoliasearch/lite/model/indexSettingsAsSearchParams.ts @@ -0,0 +1,188 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AdvancedSyntaxFeatures } from './advancedSyntaxFeatures'; +import type { AlternativesAsExact } from './alternativesAsExact'; +import type { Distinct } from './distinct'; +import type { ExactOnSingleWordQuery } from './exactOnSingleWordQuery'; +import type { IgnorePlurals } from './ignorePlurals'; +import type { Mode } from './mode'; +import type { OptionalWords } from './optionalWords'; +import type { QueryType } from './queryType'; +import type { ReRankingApplyFilter } from './reRankingApplyFilter'; +import type { RemoveStopWords } from './removeStopWords'; +import type { RemoveWordsIfNoResults } from './removeWordsIfNoResults'; +import type { RenderingContent } from './renderingContent'; +import type { SemanticSearch } from './semanticSearch'; +import type { SupportedLanguage } from './supportedLanguage'; +import type { TypoTolerance } from './typoTolerance'; + +export type IndexSettingsAsSearchParams = { + /** + * Attributes to include in the API response. To reduce the size of your response, you can retrieve only some of the attributes. Attribute names are case-sensitive. - `*` retrieves all attributes, except attributes included in the `customRanking` and `unretrievableAttributes` settings. - To retrieve all attributes except a specific one, prefix the attribute with a dash and combine it with the `*`: `[\"*\", \"-ATTRIBUTE\"]`. - The `objectID` attribute is always included. + */ + attributesToRetrieve?: Array; + + /** + * Determines the order in which Algolia returns your results. By default, each entry corresponds to a [ranking criteria](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/). The tie-breaking algorithm sequentially applies each criterion in the order they\'re specified. If you configure a replica index for [sorting by an attribute](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/how-to/sort-by-attribute/), you put the sorting attribute at the top of the list. **Modifiers** - `asc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in ascending order. - `desc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in descending order. Before you modify the default setting, you should test your changes in the dashboard, and by [A/B testing](https://www.algolia.com/doc/guides/ab-testing/what-is-ab-testing/). + */ + ranking?: Array; + + /** + * Relevancy threshold below which less relevant results aren\'t included in the results. You can only set `relevancyStrictness` on [virtual replica indices](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/replicas/#what-are-virtual-replicas). Use this setting to strike a balance between the relevance and number of returned results. + */ + relevancyStrictness?: number; + + /** + * Attributes to highlight. By default, all searchable attributes are highlighted. Use `*` to highlight all attributes or use an empty array `[]` to turn off highlighting. Attribute names are case-sensitive. With highlighting, strings that match the search query are surrounded by HTML tags defined by `highlightPreTag` and `highlightPostTag`. You can use this to visually highlight matching parts of a search query in your UI. For more information, see [Highlighting and snippeting](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/highlighting-snippeting/js/). + */ + attributesToHighlight?: Array; + + /** + * Attributes for which to enable snippets. Attribute names are case-sensitive. Snippets provide additional context to matched words. If you enable snippets, they include 10 words, including the matched word. The matched word will also be wrapped by HTML tags for highlighting. You can adjust the number of words with the following notation: `ATTRIBUTE:NUMBER`, where `NUMBER` is the number of words to be extracted. + */ + attributesToSnippet?: Array; + + /** + * HTML tag to insert before the highlighted parts in all highlighted results and snippets. + */ + highlightPreTag?: string; + + /** + * HTML tag to insert after the highlighted parts in all highlighted results and snippets. + */ + highlightPostTag?: string; + + /** + * String used as an ellipsis indicator when a snippet is truncated. + */ + snippetEllipsisText?: string; + + /** + * Whether to restrict highlighting and snippeting to items that at least partially matched the search query. By default, all items are highlighted and snippeted. + */ + restrictHighlightAndSnippetArrays?: boolean; + + /** + * Number of hits per page. + */ + hitsPerPage?: number; + + /** + * Minimum number of characters a word in the search query must contain to accept matches with [one typo](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#configuring-word-length-for-typos). + */ + minWordSizefor1Typo?: number; + + /** + * Minimum number of characters a word in the search query must contain to accept matches with [two typos](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#configuring-word-length-for-typos). + */ + minWordSizefor2Typos?: number; + + typoTolerance?: TypoTolerance; + + /** + * Whether to allow typos on numbers in the search query. Turn off this setting to reduce the number of irrelevant matches when searching in large sets of similar numbers. + */ + allowTyposOnNumericTokens?: boolean; + + /** + * Attributes for which you want to turn off [typo tolerance](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/). Attribute names are case-sensitive. Returning only exact matches can help when: - [Searching in hyphenated attributes](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/how-to/how-to-search-in-hyphenated-attributes/). - Reducing the number of matches when you have too many. This can happen with attributes that are long blocks of text, such as product descriptions. Consider alternatives such as `disableTypoToleranceOnWords` or adding synonyms if your attributes have intentional unusual spellings that might look like typos. + */ + disableTypoToleranceOnAttributes?: Array; + + ignorePlurals?: IgnorePlurals; + + removeStopWords?: RemoveStopWords; + + /** + * Languages for language-specific query processing steps such as plurals, stop-word removal, and word-detection dictionaries. This setting sets a default list of languages used by the `removeStopWords` and `ignorePlurals` settings. This setting also sets a dictionary for word detection in the logogram-based [CJK](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/normalization/#normalization-for-logogram-based-languages-cjk) languages. To support this, you must place the CJK language **first**. **You should always specify a query language.** If you don\'t specify an indexing language, the search engine uses all [supported languages](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/supported-languages/), or the languages you specified with the `ignorePlurals` or `removeStopWords` parameters. This can lead to unexpected search results. For more information, see [Language-specific configuration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/). + */ + queryLanguages?: Array; + + /** + * Whether to split compound words in the query into their building blocks. For more information, see [Word segmentation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/#splitting-compound-words). Word segmentation is supported for these languages: German, Dutch, Finnish, Swedish, and Norwegian. Decompounding doesn\'t work for words with [non-spacing mark Unicode characters](https://www.charactercodes.net/category/non-spacing_mark). For example, `Gartenstühle` won\'t be decompounded if the `ü` consists of `u` (U+0075) and `◌̈` (U+0308). + */ + decompoundQuery?: boolean; + + /** + * Whether to enable rules. + */ + enableRules?: boolean; + + /** + * Whether to enable Personalization. + */ + enablePersonalization?: boolean; + + queryType?: QueryType; + + removeWordsIfNoResults?: RemoveWordsIfNoResults; + + mode?: Mode; + + semanticSearch?: SemanticSearch; + + /** + * Whether to support phrase matching and excluding words from search queries. Use the `advancedSyntaxFeatures` parameter to control which feature is supported. + */ + advancedSyntax?: boolean; + + optionalWords?: OptionalWords | null; + + /** + * Searchable attributes for which you want to [turn off the Exact ranking criterion](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/adjust-exact-settings/#turn-off-exact-for-some-attributes). Attribute names are case-sensitive. This can be useful for attributes with long values, where the likelihood of an exact match is high, such as product descriptions. Turning off the Exact ranking criterion for these attributes favors exact matching on other attributes. This reduces the impact of individual attributes with a lot of content on ranking. + */ + disableExactOnAttributes?: Array; + + exactOnSingleWordQuery?: ExactOnSingleWordQuery; + + /** + * Determine which plurals and synonyms should be considered an exact matches. By default, Algolia treats singular and plural forms of a word, and single-word synonyms, as [exact](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#exact) matches when searching. For example: - \"swimsuit\" and \"swimsuits\" are treated the same - \"swimsuit\" and \"swimwear\" are treated the same (if they are [synonyms](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/adding-synonyms/#regular-synonyms)). - `ignorePlurals`. Plurals and similar declensions added by the `ignorePlurals` setting are considered exact matches. - `singleWordSynonym`. Single-word synonyms, such as \"NY\" = \"NYC\", are considered exact matches. - `multiWordsSynonym`. Multi-word synonyms, such as \"NY\" = \"New York\", are considered exact matches. + */ + alternativesAsExact?: Array; + + /** + * Advanced search syntax features you want to support. - `exactPhrase`. Phrases in quotes must match exactly. For example, `sparkly blue \"iPhone case\"` only returns records with the exact string \"iPhone case\". - `excludeWords`. Query words prefixed with a `-` must not occur in a record. For example, `search -engine` matches records that contain \"search\" but not \"engine\". This setting only has an effect if `advancedSyntax` is true. + */ + advancedSyntaxFeatures?: Array; + + distinct?: Distinct; + + /** + * Whether to replace a highlighted word with the matched synonym. By default, the original words are highlighted even if a synonym matches. For example, with `home` as a synonym for `house` and a search for `home`, records matching either \"home\" or \"house\" are included in the search results, and either \"home\" or \"house\" are highlighted. With `replaceSynonymsInHighlight` set to `true`, a search for `home` still matches the same records, but all occurrences of \"house\" are replaced by \"home\" in the highlighted response. + */ + replaceSynonymsInHighlight?: boolean; + + /** + * Minimum proximity score for two matching words. This adjusts the [Proximity ranking criterion](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#proximity) by equally scoring matches that are farther apart. For example, if `minProximity` is 2, neighboring matches and matches with one word between them would have the same score. + */ + minProximity?: number; + + /** + * Properties to include in the API response of search and browse requests. By default, all response properties are included. To reduce the response size, you can select which properties should be included. An empty list may lead to an empty API response (except properties you can\'t exclude). You can\'t exclude these properties: `message`, `warning`, `cursor`, `abTestVariantID`, or any property added by setting `getRankingInfo` to true. Your search depends on the `hits` field. If you omit this field, searches won\'t return any results. Your UI might also depend on other properties, for example, for pagination. Before restricting the response size, check the impact on your search experience. + */ + responseFields?: Array; + + /** + * Maximum number of facet values to return for each facet. + */ + maxValuesPerFacet?: number; + + /** + * Order in which to retrieve facet values. - `count`. Facet values are retrieved by decreasing count. The count is the number of matching records containing this facet value. - `alpha`. Retrieve facet values alphabetically. This setting doesn\'t influence how facet values are displayed in your UI (see `renderingContent`). For more information, see [facet value display](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/facet-display/js/). + */ + sortFacetValuesBy?: string; + + /** + * Whether the best matching attribute should be determined by minimum proximity. This setting only affects ranking if the Attribute ranking criterion comes before Proximity in the `ranking` setting. If true, the best matching attribute is selected based on the minimum proximity of multiple matches. Otherwise, the best matching attribute is determined by the order in the `searchableAttributes` setting. + */ + attributeCriteriaComputedByMinProximity?: boolean; + + renderingContent?: RenderingContent; + + /** + * Whether this search will use [Dynamic Re-Ranking](https://www.algolia.com/doc/guides/algolia-ai/re-ranking/). This setting only has an effect if you activated Dynamic Re-Ranking for this index in the Algolia dashboard. + */ + enableReRanking?: boolean; + + reRankingApplyFilter?: ReRankingApplyFilter | null; +}; diff --git a/packages/algoliasearch/lite/model/indexSettingsFacets.ts b/packages/algoliasearch/lite/model/indexSettingsFacets.ts new file mode 100644 index 000000000..d71333771 --- /dev/null +++ b/packages/algoliasearch/lite/model/indexSettingsFacets.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Order of facet names. + */ +export type IndexSettingsFacets = { + /** + * Explicit order of facets or facet values. This setting lets you always show specific facets or facet values at the top of the list. + */ + order?: Array; +}; diff --git a/packages/algoliasearch/lite/model/insideBoundingBox.ts b/packages/algoliasearch/lite/model/insideBoundingBox.ts new file mode 100644 index 000000000..8a498532f --- /dev/null +++ b/packages/algoliasearch/lite/model/insideBoundingBox.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type InsideBoundingBox = string | Array>; diff --git a/packages/algoliasearch/lite/model/lookingSimilar.ts b/packages/algoliasearch/lite/model/lookingSimilar.ts new file mode 100644 index 000000000..9d59dd83d --- /dev/null +++ b/packages/algoliasearch/lite/model/lookingSimilar.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FallbackParams } from './fallbackParams'; +import type { LookingSimilarModel } from './lookingSimilarModel'; + +export type LookingSimilar = { + model: LookingSimilarModel; + + /** + * Unique record identifier. + */ + objectID: string; + + fallbackParameters?: FallbackParams; +}; diff --git a/packages/algoliasearch/lite/model/lookingSimilarModel.ts b/packages/algoliasearch/lite/model/lookingSimilarModel.ts new file mode 100644 index 000000000..8b2d4a769 --- /dev/null +++ b/packages/algoliasearch/lite/model/lookingSimilarModel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Looking similar model. This model recommends items that look similar to the item with the ID `objectID` based on image attributes in your index. + */ +export type LookingSimilarModel = 'looking-similar'; diff --git a/packages/algoliasearch/lite/model/lookingSimilarQuery.ts b/packages/algoliasearch/lite/model/lookingSimilarQuery.ts new file mode 100644 index 000000000..dc94e36a3 --- /dev/null +++ b/packages/algoliasearch/lite/model/lookingSimilarQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseRecommendRequest } from './baseRecommendRequest'; +import type { LookingSimilar } from './lookingSimilar'; + +export type LookingSimilarQuery = BaseRecommendRequest & LookingSimilar; diff --git a/packages/algoliasearch/lite/model/matchLevel.ts b/packages/algoliasearch/lite/model/matchLevel.ts new file mode 100644 index 000000000..2cb9f4d21 --- /dev/null +++ b/packages/algoliasearch/lite/model/matchLevel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Whether the whole query string matches or only a part. + */ +export type MatchLevel = 'none' | 'partial' | 'full'; diff --git a/packages/algoliasearch/lite/model/matchedGeoLocation.ts b/packages/algoliasearch/lite/model/matchedGeoLocation.ts new file mode 100644 index 000000000..018634191 --- /dev/null +++ b/packages/algoliasearch/lite/model/matchedGeoLocation.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type MatchedGeoLocation = { + /** + * Latitude of the matched location. + */ + lat?: number; + + /** + * Longitude of the matched location. + */ + lng?: number; + + /** + * Distance between the matched location and the search location (in meters). + */ + distance?: number; +}; diff --git a/packages/algoliasearch/lite/model/mode.ts b/packages/algoliasearch/lite/model/mode.ts new file mode 100644 index 000000000..36561b89e --- /dev/null +++ b/packages/algoliasearch/lite/model/mode.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Search mode the index will use to query for results. This setting only applies to indices, for which Algolia enabled NeuralSearch for you. + */ +export type Mode = 'neuralSearch' | 'keywordSearch'; diff --git a/packages/algoliasearch/lite/model/numericFilters.ts b/packages/algoliasearch/lite/model/numericFilters.ts new file mode 100644 index 000000000..6129dc5d3 --- /dev/null +++ b/packages/algoliasearch/lite/model/numericFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter by numeric facets. **Prefer using the `filters` parameter, which supports all filter types and combinations with boolean operators.** You can use numeric comparison operators: `<`, `<=`, `=`, `!=`, `>`, `>=`. Comparisons are precise up to 3 decimals. You can also provide ranges: `facet: TO `. The range includes the lower and upper boundaries. The same combination rules apply as for `facetFilters`. + */ +export type NumericFilters = Array | string; diff --git a/packages/algoliasearch/lite/model/optionalFilters.ts b/packages/algoliasearch/lite/model/optionalFilters.ts new file mode 100644 index 000000000..677b9239c --- /dev/null +++ b/packages/algoliasearch/lite/model/optionalFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filters to promote or demote records in the search results. Optional filters work like facet filters, but they don\'t exclude records from the search results. Records that match the optional filter rank before records that don\'t match. If you\'re using a negative filter `facet:-value`, matching records rank after records that don\'t match. - Optional filters don\'t work on virtual replicas. - Optional filters are applied _after_ sort-by attributes. - Optional filters are applied _before_ custom ranking attributes (in the default [ranking](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/)). - Optional filters don\'t work with numeric attributes. + */ +export type OptionalFilters = Array | string; diff --git a/packages/algoliasearch/lite/model/optionalWords.ts b/packages/algoliasearch/lite/model/optionalWords.ts new file mode 100644 index 000000000..2eed87ef2 --- /dev/null +++ b/packages/algoliasearch/lite/model/optionalWords.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Words that should be considered optional when found in the query. By default, records must match all words in the search query to be included in the search results. Adding optional words can help to increase the number of search results by running an additional search query that doesn\'t include the optional words. For example, if the search query is \"action video\" and \"video\" is an optional word, the search engine runs two queries. One for \"action video\" and one for \"action\". Records that match all words are ranked higher. For a search query with 4 or more words **and** all its words are optional, the number of matched words required for a record to be included in the search results increases for every 1,000 records: - If `optionalWords` has less than 10 words, the required number of matched words increases by 1: results 1 to 1,000 require 1 matched word, results 1,001 to 2000 need 2 matched words. - If `optionalWords` has 10 or more words, the number of required matched words increases by the number of optional words divided by 5 (rounded down). For example, with 18 optional words: results 1 to 1,000 require 1 matched word, results 1,001 to 2000 need 4 matched words. For more information, see [Optional words](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/empty-or-insufficient-results/#creating-a-list-of-optional-words). + */ +export type OptionalWords = string | Array; diff --git a/packages/algoliasearch/lite/model/params.ts b/packages/algoliasearch/lite/model/params.ts new file mode 100644 index 000000000..8dbd02c2f --- /dev/null +++ b/packages/algoliasearch/lite/model/params.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AutomaticFacetFilters } from './automaticFacetFilters'; +import type { ConsequenceQuery } from './consequenceQuery'; +import type { RenderingContent } from './renderingContent'; + +/** + * Parameters to apply to this search. You can use all search parameters, plus special `automaticFacetFilters`, `automaticOptionalFacetFilters`, and `query`. + */ +export type Params = { + query?: ConsequenceQuery; + + automaticFacetFilters?: AutomaticFacetFilters; + + automaticOptionalFacetFilters?: AutomaticFacetFilters; + + renderingContent?: RenderingContent; +}; diff --git a/packages/algoliasearch/lite/model/personalization.ts b/packages/algoliasearch/lite/model/personalization.ts new file mode 100644 index 000000000..c8efd58b1 --- /dev/null +++ b/packages/algoliasearch/lite/model/personalization.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Personalization = { + /** + * The score of the filters. + */ + filtersScore?: number; + + /** + * The score of the ranking. + */ + rankingScore?: number; + + /** + * The score of the event. + */ + score?: number; +}; diff --git a/packages/algoliasearch/lite/model/queryType.ts b/packages/algoliasearch/lite/model/queryType.ts new file mode 100644 index 000000000..b16a40de3 --- /dev/null +++ b/packages/algoliasearch/lite/model/queryType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Determines if and how query words are interpreted as prefixes. By default, only the last query word is treated as a prefix (`prefixLast`). To turn off prefix search, use `prefixNone`. Avoid `prefixAll`, which treats all query words as prefixes. This might lead to counterintuitive results and makes your search slower. For more information, see [Prefix searching](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/prefix-searching/). + */ +export type QueryType = 'prefixLast' | 'prefixAll' | 'prefixNone'; diff --git a/packages/algoliasearch/lite/model/range.ts b/packages/algoliasearch/lite/model/range.ts new file mode 100644 index 000000000..780b75be7 --- /dev/null +++ b/packages/algoliasearch/lite/model/range.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Range object with lower and upper values in meters to define custom ranges. + */ +export type Range = { + /** + * Lower boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. + */ + from?: number; + + /** + * Upper boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. + */ + value?: number; +}; diff --git a/packages/algoliasearch/lite/model/rankingInfo.ts b/packages/algoliasearch/lite/model/rankingInfo.ts new file mode 100644 index 000000000..50c5a3058 --- /dev/null +++ b/packages/algoliasearch/lite/model/rankingInfo.ts @@ -0,0 +1,68 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchedGeoLocation } from './matchedGeoLocation'; +import type { Personalization } from './personalization'; + +/** + * Object with detailed information about the record\'s ranking. + */ +export type RankingInfo = { + /** + * Whether a filter matched the query. + */ + filters?: number; + + /** + * Position of the first matched word in the best matching attribute of the record. + */ + firstMatchedWord: number; + + /** + * Distance between the geo location in the search query and the best matching geo location in the record, divided by the geo precision (in meters). + */ + geoDistance: number; + + /** + * Precision used when computing the geo distance, in meters. + */ + geoPrecision?: number; + + matchedGeoLocation?: MatchedGeoLocation; + + personalization?: Personalization; + + /** + * Number of exactly matched words. + */ + nbExactWords: number; + + /** + * Number of typos encountered when matching the record. + */ + nbTypos: number; + + /** + * Whether the record was promoted by a rule. + */ + promoted?: boolean; + + /** + * Number of words between multiple matches in the query plus 1. For single word queries, `proximityDistance` is 0. + */ + proximityDistance?: number; + + /** + * Overall ranking of the record, expressed as a single integer. This attribute is internal. + */ + userScore: number; + + /** + * Number of matched words. + */ + words?: number; + + /** + * Whether the record is re-ranked. + */ + promotedByReRanking?: boolean; +}; diff --git a/packages/algoliasearch/lite/model/reRankingApplyFilter.ts b/packages/algoliasearch/lite/model/reRankingApplyFilter.ts new file mode 100644 index 000000000..6d4bd8b9f --- /dev/null +++ b/packages/algoliasearch/lite/model/reRankingApplyFilter.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Restrict [Dynamic Re-Ranking](https://www.algolia.com/doc/guides/algolia-ai/re-ranking/) to records that match these filters. + */ +export type ReRankingApplyFilter = Array | string; diff --git a/packages/algoliasearch/lite/model/recommendHit.ts b/packages/algoliasearch/lite/model/recommendHit.ts new file mode 100644 index 000000000..ef363ef91 --- /dev/null +++ b/packages/algoliasearch/lite/model/recommendHit.ts @@ -0,0 +1,34 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { HighlightResult } from './highlightResult'; +import type { RankingInfo } from './rankingInfo'; +import type { SnippetResult } from './snippetResult'; + +/** + * Recommend hit. + */ +export type RecommendHit = Record & { + /** + * Unique record identifier. + */ + objectID: string; + + /** + * Surround words that match the query with HTML tags for highlighting. + */ + _highlightResult?: { [key: string]: HighlightResult }; + + /** + * Snippets that show the context around a matching search query. + */ + _snippetResult?: { [key: string]: SnippetResult }; + + _rankingInfo?: RankingInfo; + + _distinctSeqID?: number; + + /** + * Recommendation score. + */ + _score?: number; +}; diff --git a/packages/algoliasearch/lite/model/recommendIndexSettings.ts b/packages/algoliasearch/lite/model/recommendIndexSettings.ts new file mode 100644 index 000000000..197c5e592 --- /dev/null +++ b/packages/algoliasearch/lite/model/recommendIndexSettings.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseIndexSettings } from './baseIndexSettings'; +import type { BaseRecommendIndexSettings } from './baseRecommendIndexSettings'; + +/** + * Index settings. + */ +export type RecommendIndexSettings = BaseIndexSettings & BaseRecommendIndexSettings; diff --git a/packages/algoliasearch/lite/model/recommendSearchParams.ts b/packages/algoliasearch/lite/model/recommendSearchParams.ts new file mode 100644 index 000000000..0a35657fe --- /dev/null +++ b/packages/algoliasearch/lite/model/recommendSearchParams.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseRecommendSearchParams } from './baseRecommendSearchParams'; +import type { RecommendIndexSettings } from './recommendIndexSettings'; +import type { SearchParamsQuery } from './searchParamsQuery'; + +/** + * Search parameters for filtering the recommendations. + */ +export type RecommendSearchParams = BaseRecommendSearchParams & SearchParamsQuery & RecommendIndexSettings; diff --git a/packages/algoliasearch/lite/model/recommendationsHit.ts b/packages/algoliasearch/lite/model/recommendationsHit.ts new file mode 100644 index 000000000..3d1a86793 --- /dev/null +++ b/packages/algoliasearch/lite/model/recommendationsHit.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendHit } from './recommendHit'; + +import type { TrendingFacetHit } from './trendingFacetHit'; + +export type RecommendationsHit = RecommendHit | TrendingFacetHit; diff --git a/packages/algoliasearch/lite/model/recommendationsHits.ts b/packages/algoliasearch/lite/model/recommendationsHits.ts new file mode 100644 index 000000000..832b0acc6 --- /dev/null +++ b/packages/algoliasearch/lite/model/recommendationsHits.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendationsHit } from './recommendationsHit'; + +export type RecommendationsHits = { + hits: Array; +}; diff --git a/packages/algoliasearch/lite/model/recommendationsRequest.ts b/packages/algoliasearch/lite/model/recommendationsRequest.ts new file mode 100644 index 000000000..4600576aa --- /dev/null +++ b/packages/algoliasearch/lite/model/recommendationsRequest.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BoughtTogetherQuery } from './boughtTogetherQuery'; + +import type { LookingSimilarQuery } from './lookingSimilarQuery'; + +import type { RelatedQuery } from './relatedQuery'; +import type { TrendingFacetsQuery } from './trendingFacetsQuery'; +import type { TrendingItemsQuery } from './trendingItemsQuery'; + +export type RecommendationsRequest = + | BoughtTogetherQuery + | RelatedQuery + | TrendingItemsQuery + | TrendingFacetsQuery + | LookingSimilarQuery; diff --git a/packages/algoliasearch/lite/model/recommendationsResults.ts b/packages/algoliasearch/lite/model/recommendationsResults.ts new file mode 100644 index 000000000..c9145a4b8 --- /dev/null +++ b/packages/algoliasearch/lite/model/recommendationsResults.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchResponse } from './baseSearchResponse'; +import type { RecommendationsHits } from './recommendationsHits'; +import type { SearchPagination } from './searchPagination'; + +export type RecommendationsResults = BaseSearchResponse & SearchPagination & RecommendationsHits; diff --git a/packages/algoliasearch/lite/model/redirect.ts b/packages/algoliasearch/lite/model/redirect.ts new file mode 100644 index 000000000..fa3ea30ff --- /dev/null +++ b/packages/algoliasearch/lite/model/redirect.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RedirectRuleIndexMetadata } from './redirectRuleIndexMetadata'; + +/** + * [Redirect results to a URL](https://www.algolia.com/doc/guides/managing-results/rules/merchandising-and-promoting/how-to/redirects/), this this parameter is for internal use only. + */ +export type Redirect = { + index?: Array; +}; diff --git a/packages/algoliasearch/lite/model/redirectRuleIndexData.ts b/packages/algoliasearch/lite/model/redirectRuleIndexData.ts new file mode 100644 index 000000000..fbb7ea140 --- /dev/null +++ b/packages/algoliasearch/lite/model/redirectRuleIndexData.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Redirect rule data. + */ +export type RedirectRuleIndexData = { + ruleObjectID: string; +}; diff --git a/packages/algoliasearch/lite/model/redirectRuleIndexMetadata.ts b/packages/algoliasearch/lite/model/redirectRuleIndexMetadata.ts new file mode 100644 index 000000000..33802fc69 --- /dev/null +++ b/packages/algoliasearch/lite/model/redirectRuleIndexMetadata.ts @@ -0,0 +1,27 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RedirectRuleIndexData } from './redirectRuleIndexData'; + +export type RedirectRuleIndexMetadata = { + /** + * Source index for the redirect rule. + */ + source: string; + + /** + * Destination index for the redirect rule. + */ + dest: string; + + /** + * Reason for the redirect rule. + */ + reason: string; + + /** + * Redirect rule status. + */ + succeed: boolean; + + data: RedirectRuleIndexData; +}; diff --git a/packages/algoliasearch/lite/model/redirectURL.ts b/packages/algoliasearch/lite/model/redirectURL.ts new file mode 100644 index 000000000..8f66f7ee2 --- /dev/null +++ b/packages/algoliasearch/lite/model/redirectURL.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * The redirect rule container. + */ +export type RedirectURL = { + url?: string; +}; diff --git a/packages/algoliasearch/lite/model/relatedModel.ts b/packages/algoliasearch/lite/model/relatedModel.ts new file mode 100644 index 000000000..97761da60 --- /dev/null +++ b/packages/algoliasearch/lite/model/relatedModel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Related products or similar content model. This model recommends items that are similar to the item with the ID `objectID`. Similarity is determined from the user interactions and attributes. + */ +export type RelatedModel = 'related-products'; diff --git a/packages/algoliasearch/lite/model/relatedProducts.ts b/packages/algoliasearch/lite/model/relatedProducts.ts new file mode 100644 index 000000000..f218e9558 --- /dev/null +++ b/packages/algoliasearch/lite/model/relatedProducts.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FallbackParams } from './fallbackParams'; +import type { RelatedModel } from './relatedModel'; + +export type RelatedProducts = { + model: RelatedModel; + + /** + * Unique record identifier. + */ + objectID: string; + + fallbackParameters?: FallbackParams; +}; diff --git a/packages/algoliasearch/lite/model/relatedQuery.ts b/packages/algoliasearch/lite/model/relatedQuery.ts new file mode 100644 index 000000000..4a8672a2d --- /dev/null +++ b/packages/algoliasearch/lite/model/relatedQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseRecommendRequest } from './baseRecommendRequest'; +import type { RelatedProducts } from './relatedProducts'; + +export type RelatedQuery = BaseRecommendRequest & RelatedProducts; diff --git a/packages/algoliasearch/lite/model/removeStopWords.ts b/packages/algoliasearch/lite/model/removeStopWords.ts new file mode 100644 index 000000000..263ad1184 --- /dev/null +++ b/packages/algoliasearch/lite/model/removeStopWords.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SupportedLanguage } from './supportedLanguage'; + +/** + * Removes stop words from the search query. Stop words are common words like articles, conjunctions, prepositions, or pronouns that have little or no meaning on their own. In English, \"the\", \"a\", or \"and\" are stop words. You should only use this feature for the languages used in your index. + */ +export type RemoveStopWords = Array | boolean; diff --git a/packages/algoliasearch/lite/model/removeWordsIfNoResults.ts b/packages/algoliasearch/lite/model/removeWordsIfNoResults.ts new file mode 100644 index 000000000..3b61da6d8 --- /dev/null +++ b/packages/algoliasearch/lite/model/removeWordsIfNoResults.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Strategy for removing words from the query when it doesn\'t return any results. This helps to avoid returning empty search results. - `none`. No words are removed when a query doesn\'t return results. - `lastWords`. Treat the last (then second to last, then third to last) word as optional, until there are results or at most 5 words have been removed. - `firstWords`. Treat the first (then second, then third) word as optional, until there are results or at most 5 words have been removed. - `allOptional`. Treat all words as optional. For more information, see [Remove words to improve results](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/empty-or-insufficient-results/in-depth/why-use-remove-words-if-no-results/). + */ +export type RemoveWordsIfNoResults = 'none' | 'lastWords' | 'firstWords' | 'allOptional'; diff --git a/packages/algoliasearch/lite/model/renderingContent.ts b/packages/algoliasearch/lite/model/renderingContent.ts new file mode 100644 index 000000000..ddb01bde8 --- /dev/null +++ b/packages/algoliasearch/lite/model/renderingContent.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FacetOrdering } from './facetOrdering'; +import type { RedirectURL } from './redirectURL'; +import type { Widgets } from './widgets'; + +/** + * Extra data that can be used in the search UI. You can use this to control aspects of your search UI, such as the order of facet names and values without changing your frontend code. + */ +export type RenderingContent = { + facetOrdering?: FacetOrdering; + + redirect?: RedirectURL; + + widgets?: Widgets; +}; diff --git a/packages/algoliasearch/lite/model/searchForFacetValuesResponse.ts b/packages/algoliasearch/lite/model/searchForFacetValuesResponse.ts new file mode 100644 index 000000000..423e0f5eb --- /dev/null +++ b/packages/algoliasearch/lite/model/searchForFacetValuesResponse.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FacetHits } from './facetHits'; + +export type SearchForFacetValuesResponse = { + /** + * Matching facet values. + */ + facetHits: Array; + + /** + * Whether the facet count is exhaustive (true) or approximate (false). For more information, see [Why are my facet and hit counts not accurate](https://support.algolia.com/hc/en-us/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate-). + */ + exhaustiveFacetsCount: boolean; + + /** + * Time the server took to process the request, in milliseconds. + */ + processingTimeMS?: number; +}; diff --git a/packages/algoliasearch/lite/model/searchForFacets.ts b/packages/algoliasearch/lite/model/searchForFacets.ts new file mode 100644 index 000000000..00b710fff --- /dev/null +++ b/packages/algoliasearch/lite/model/searchForFacets.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchForFacetsOptions } from './searchForFacetsOptions'; +import type { SearchParams } from './searchParams'; + +export type SearchForFacets = SearchParams & SearchForFacetsOptions; diff --git a/packages/algoliasearch/lite/model/searchForFacetsOptions.ts b/packages/algoliasearch/lite/model/searchForFacetsOptions.ts new file mode 100644 index 000000000..eea336342 --- /dev/null +++ b/packages/algoliasearch/lite/model/searchForFacetsOptions.ts @@ -0,0 +1,27 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchTypeFacet } from './searchTypeFacet'; + +export type SearchForFacetsOptions = { + /** + * Facet name. + */ + facet: string; + + /** + * Index name (case-sensitive). + */ + indexName: string; + + /** + * Text to search inside the facet\'s values. + */ + facetQuery?: string; + + /** + * Maximum number of facet values to return when [searching for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ + maxFacetHits?: number; + + type: SearchTypeFacet; +}; diff --git a/packages/algoliasearch/lite/model/searchForHits.ts b/packages/algoliasearch/lite/model/searchForHits.ts new file mode 100644 index 000000000..91f65b1d8 --- /dev/null +++ b/packages/algoliasearch/lite/model/searchForHits.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchForHitsOptions } from './searchForHitsOptions'; +import type { SearchParams } from './searchParams'; + +export type SearchForHits = SearchParams & SearchForHitsOptions; diff --git a/packages/algoliasearch/lite/model/searchForHitsOptions.ts b/packages/algoliasearch/lite/model/searchForHitsOptions.ts new file mode 100644 index 000000000..85f09a7d5 --- /dev/null +++ b/packages/algoliasearch/lite/model/searchForHitsOptions.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchTypeDefault } from './searchTypeDefault'; + +export type SearchForHitsOptions = { + /** + * Index name (case-sensitive). + */ + indexName: string; + + type?: SearchTypeDefault; +} & { facet?: never; maxFacetHits?: never; facetQuery?: never }; diff --git a/packages/algoliasearch/lite/model/searchHits.ts b/packages/algoliasearch/lite/model/searchHits.ts new file mode 100644 index 000000000..3e410b8a0 --- /dev/null +++ b/packages/algoliasearch/lite/model/searchHits.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Hit } from './hit'; + +export type SearchHits> = Record & { + /** + * Search results (hits). Hits are records from your index that match the search criteria, augmented with additional attributes, such as, for highlighting. + */ + hits: Hit[]; + + /** + * Search query. + */ + query: string; + + /** + * URL-encoded string of all search parameters. + */ + params: string; +}; diff --git a/packages/algoliasearch/lite/model/searchMethodParams.ts b/packages/algoliasearch/lite/model/searchMethodParams.ts new file mode 100644 index 000000000..ca8c960d7 --- /dev/null +++ b/packages/algoliasearch/lite/model/searchMethodParams.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchQuery } from './searchQuery'; +import type { SearchStrategy } from './searchStrategy'; + +export type SearchMethodParams = { + requests: Array; + + strategy?: SearchStrategy; +}; diff --git a/packages/algoliasearch/lite/model/searchPagination.ts b/packages/algoliasearch/lite/model/searchPagination.ts new file mode 100644 index 000000000..284961b8f --- /dev/null +++ b/packages/algoliasearch/lite/model/searchPagination.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SearchPagination = { + /** + * Page of search results to retrieve. + */ + page?: number; + + /** + * Number of results (hits). + */ + nbHits?: number; + + /** + * Number of pages of results. + */ + nbPages?: number; + + /** + * Number of hits per page. + */ + hitsPerPage?: number; +}; diff --git a/packages/algoliasearch/lite/model/searchParams.ts b/packages/algoliasearch/lite/model/searchParams.ts new file mode 100644 index 000000000..38bf1b3bd --- /dev/null +++ b/packages/algoliasearch/lite/model/searchParams.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchParamsObject } from './searchParamsObject'; +import type { SearchParamsString } from './searchParamsString'; + +export type SearchParams = SearchParamsString | SearchParamsObject; diff --git a/packages/algoliasearch/lite/model/searchParamsObject.ts b/packages/algoliasearch/lite/model/searchParamsObject.ts new file mode 100644 index 000000000..b79d4f8f3 --- /dev/null +++ b/packages/algoliasearch/lite/model/searchParamsObject.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchParams } from './baseSearchParams'; +import type { IndexSettingsAsSearchParams } from './indexSettingsAsSearchParams'; + +/** + * Each parameter value, including the `query` must not be larger than 512 bytes. + */ +export type SearchParamsObject = BaseSearchParams & IndexSettingsAsSearchParams; diff --git a/packages/algoliasearch/lite/model/searchParamsQuery.ts b/packages/algoliasearch/lite/model/searchParamsQuery.ts new file mode 100644 index 000000000..9f1926f6c --- /dev/null +++ b/packages/algoliasearch/lite/model/searchParamsQuery.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SearchParamsQuery = { + /** + * Search query. + */ + query?: string; +}; diff --git a/packages/algoliasearch/lite/model/searchParamsString.ts b/packages/algoliasearch/lite/model/searchParamsString.ts new file mode 100644 index 000000000..78e0b5950 --- /dev/null +++ b/packages/algoliasearch/lite/model/searchParamsString.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Search parameters as query string. + */ +export type SearchParamsString = { + /** + * Search parameters as a URL-encoded query string. + */ + params?: string; +}; diff --git a/packages/algoliasearch/lite/model/searchQuery.ts b/packages/algoliasearch/lite/model/searchQuery.ts new file mode 100644 index 000000000..27971258b --- /dev/null +++ b/packages/algoliasearch/lite/model/searchQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchForFacets } from './searchForFacets'; +import type { SearchForHits } from './searchForHits'; + +export type SearchQuery = SearchForHits | SearchForFacets; diff --git a/packages/algoliasearch/lite/model/searchResponse.ts b/packages/algoliasearch/lite/model/searchResponse.ts new file mode 100644 index 000000000..e6a626fd8 --- /dev/null +++ b/packages/algoliasearch/lite/model/searchResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchResponse } from './baseSearchResponse'; +import type { SearchHits } from './searchHits'; +import type { SearchPagination } from './searchPagination'; + +export type SearchResponse> = BaseSearchResponse & SearchPagination & SearchHits; diff --git a/packages/algoliasearch/lite/model/searchResponses.ts b/packages/algoliasearch/lite/model/searchResponses.ts new file mode 100644 index 000000000..8510fb9cf --- /dev/null +++ b/packages/algoliasearch/lite/model/searchResponses.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchResult } from './searchResult'; + +export type SearchResponses> = { + results: SearchResult[]; +}; diff --git a/packages/algoliasearch/lite/model/searchResult.ts b/packages/algoliasearch/lite/model/searchResult.ts new file mode 100644 index 000000000..f3a0d3d33 --- /dev/null +++ b/packages/algoliasearch/lite/model/searchResult.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchForFacetValuesResponse } from './searchForFacetValuesResponse'; +import type { SearchResponse } from './searchResponse'; + +export type SearchResult> = SearchResponse | SearchForFacetValuesResponse; diff --git a/packages/algoliasearch/lite/model/searchStrategy.ts b/packages/algoliasearch/lite/model/searchStrategy.ts new file mode 100644 index 000000000..1bda46977 --- /dev/null +++ b/packages/algoliasearch/lite/model/searchStrategy.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Strategy for multiple search queries: - `none`. Run all queries. - `stopIfEnoughMatches`. Run the queries one by one, stopping as soon as a query matches at least the `hitsPerPage` number of results. + */ +export type SearchStrategy = 'none' | 'stopIfEnoughMatches'; diff --git a/packages/algoliasearch/lite/model/searchTypeDefault.ts b/packages/algoliasearch/lite/model/searchTypeDefault.ts new file mode 100644 index 000000000..7bba6c55d --- /dev/null +++ b/packages/algoliasearch/lite/model/searchTypeDefault.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * - `default`: perform a search query - `facet` [searches for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ +export type SearchTypeDefault = 'default'; diff --git a/packages/algoliasearch/lite/model/searchTypeFacet.ts b/packages/algoliasearch/lite/model/searchTypeFacet.ts new file mode 100644 index 000000000..a6168e735 --- /dev/null +++ b/packages/algoliasearch/lite/model/searchTypeFacet.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * - `default`: perform a search query - `facet` [searches for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ +export type SearchTypeFacet = 'facet'; diff --git a/packages/algoliasearch/lite/model/semanticSearch.ts b/packages/algoliasearch/lite/model/semanticSearch.ts new file mode 100644 index 000000000..851ce7838 --- /dev/null +++ b/packages/algoliasearch/lite/model/semanticSearch.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Settings for the semantic search part of NeuralSearch. Only used when `mode` is `neuralSearch`. + */ +export type SemanticSearch = { + /** + * Indices from which to collect click and conversion events. If null, the current index and all its replicas are used. + */ + eventSources?: Array | null; +}; diff --git a/packages/algoliasearch/lite/model/settingsResponse.ts b/packages/algoliasearch/lite/model/settingsResponse.ts new file mode 100644 index 000000000..339a3a220 --- /dev/null +++ b/packages/algoliasearch/lite/model/settingsResponse.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { IndexSettings } from './indexSettings'; +import type { WithPrimary } from './withPrimary'; + +export type SettingsResponse = IndexSettings & WithPrimary; diff --git a/packages/algoliasearch/lite/model/snippetResult.ts b/packages/algoliasearch/lite/model/snippetResult.ts new file mode 100644 index 000000000..0d9abff48 --- /dev/null +++ b/packages/algoliasearch/lite/model/snippetResult.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SnippetResultOption } from './snippetResultOption'; + +export type SnippetResult = SnippetResultOption | { [key: string]: SnippetResult } | Array; diff --git a/packages/algoliasearch/lite/model/snippetResultOption.ts b/packages/algoliasearch/lite/model/snippetResultOption.ts new file mode 100644 index 000000000..daab65f2d --- /dev/null +++ b/packages/algoliasearch/lite/model/snippetResultOption.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchLevel } from './matchLevel'; + +/** + * Snippets that show the context around a matching search query. + */ +export type SnippetResultOption = { + /** + * Highlighted attribute value, including HTML tags. + */ + value: string; + + matchLevel: MatchLevel; +}; diff --git a/packages/algoliasearch/lite/model/sortRemainingBy.ts b/packages/algoliasearch/lite/model/sortRemainingBy.ts new file mode 100644 index 000000000..85fc5bd88 --- /dev/null +++ b/packages/algoliasearch/lite/model/sortRemainingBy.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Order of facet values that aren\'t explicitly positioned with the `order` setting. - `count`. Order remaining facet values by decreasing count. The count is the number of matching records containing this facet value. - `alpha`. Sort facet values alphabetically. - `hidden`. Don\'t show facet values that aren\'t explicitly positioned. + */ +export type SortRemainingBy = 'count' | 'alpha' | 'hidden'; diff --git a/packages/algoliasearch/lite/model/supportedLanguage.ts b/packages/algoliasearch/lite/model/supportedLanguage.ts new file mode 100644 index 000000000..85f2111cc --- /dev/null +++ b/packages/algoliasearch/lite/model/supportedLanguage.ts @@ -0,0 +1,74 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * ISO code for a supported language. + */ +export type SupportedLanguage = + | 'af' + | 'ar' + | 'az' + | 'bg' + | 'bn' + | 'ca' + | 'cs' + | 'cy' + | 'da' + | 'de' + | 'el' + | 'en' + | 'eo' + | 'es' + | 'et' + | 'eu' + | 'fa' + | 'fi' + | 'fo' + | 'fr' + | 'ga' + | 'gl' + | 'he' + | 'hi' + | 'hu' + | 'hy' + | 'id' + | 'is' + | 'it' + | 'ja' + | 'ka' + | 'kk' + | 'ko' + | 'ku' + | 'ky' + | 'lt' + | 'lv' + | 'mi' + | 'mn' + | 'mr' + | 'ms' + | 'mt' + | 'nb' + | 'nl' + | 'no' + | 'ns' + | 'pl' + | 'ps' + | 'pt' + | 'pt-br' + | 'qu' + | 'ro' + | 'ru' + | 'sk' + | 'sq' + | 'sv' + | 'sw' + | 'ta' + | 'te' + | 'th' + | 'tl' + | 'tn' + | 'tr' + | 'tt' + | 'uk' + | 'ur' + | 'uz' + | 'zh'; diff --git a/packages/algoliasearch/lite/model/tagFilters.ts b/packages/algoliasearch/lite/model/tagFilters.ts new file mode 100644 index 000000000..b13f801cf --- /dev/null +++ b/packages/algoliasearch/lite/model/tagFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter the search by values of the special `_tags` attribute. **Prefer using the `filters` parameter, which supports all filter types and combinations with boolean operators.** Different from regular facets, `_tags` can only be used for filtering (including or excluding records). You won\'t get a facet count. The same combination and escaping rules apply as for `facetFilters`. + */ +export type TagFilters = Array | string; diff --git a/packages/algoliasearch/lite/model/trendingFacetHit.ts b/packages/algoliasearch/lite/model/trendingFacetHit.ts new file mode 100644 index 000000000..be8766692 --- /dev/null +++ b/packages/algoliasearch/lite/model/trendingFacetHit.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Trending facet hit. + */ +export type TrendingFacetHit = { + /** + * Recommendation score. + */ + _score?: number; + + /** + * Facet attribute. To be used in combination with `facetValue`. If specified, only recommendations matching the facet filter will be returned. + */ + facetName: string; + + /** + * Facet value. To be used in combination with `facetName`. If specified, only recommendations matching the facet filter will be returned. + */ + facetValue: string; +}; diff --git a/packages/algoliasearch/lite/model/trendingFacets.ts b/packages/algoliasearch/lite/model/trendingFacets.ts new file mode 100644 index 000000000..06c54eeed --- /dev/null +++ b/packages/algoliasearch/lite/model/trendingFacets.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FallbackParams } from './fallbackParams'; +import type { TrendingFacetsModel } from './trendingFacetsModel'; + +export type TrendingFacets = { + /** + * Facet attribute for which to retrieve trending facet values. + */ + facetName: string; + + model: TrendingFacetsModel; + + fallbackParameters?: FallbackParams; +}; diff --git a/packages/algoliasearch/lite/model/trendingFacetsModel.ts b/packages/algoliasearch/lite/model/trendingFacetsModel.ts new file mode 100644 index 000000000..424bd0bc2 --- /dev/null +++ b/packages/algoliasearch/lite/model/trendingFacetsModel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Trending facet values model. This model recommends trending facet values for the specified facet attribute. + */ +export type TrendingFacetsModel = 'trending-facets'; diff --git a/packages/algoliasearch/lite/model/trendingFacetsQuery.ts b/packages/algoliasearch/lite/model/trendingFacetsQuery.ts new file mode 100644 index 000000000..518d3287f --- /dev/null +++ b/packages/algoliasearch/lite/model/trendingFacetsQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseRecommendRequest } from './baseRecommendRequest'; +import type { TrendingFacets } from './trendingFacets'; + +export type TrendingFacetsQuery = BaseRecommendRequest & TrendingFacets; diff --git a/packages/algoliasearch/lite/model/trendingItems.ts b/packages/algoliasearch/lite/model/trendingItems.ts new file mode 100644 index 000000000..bb0c9cf76 --- /dev/null +++ b/packages/algoliasearch/lite/model/trendingItems.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FallbackParams } from './fallbackParams'; +import type { TrendingItemsModel } from './trendingItemsModel'; + +export type TrendingItems = { + /** + * Facet attribute. To be used in combination with `facetValue`. If specified, only recommendations matching the facet filter will be returned. + */ + facetName?: string; + + /** + * Facet value. To be used in combination with `facetName`. If specified, only recommendations matching the facet filter will be returned. + */ + facetValue?: string; + + model: TrendingItemsModel; + + fallbackParameters?: FallbackParams; +}; diff --git a/packages/algoliasearch/lite/model/trendingItemsModel.ts b/packages/algoliasearch/lite/model/trendingItemsModel.ts new file mode 100644 index 000000000..79bd4740e --- /dev/null +++ b/packages/algoliasearch/lite/model/trendingItemsModel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Trending items model. Trending items are determined from the number of conversion events collected on them. + */ +export type TrendingItemsModel = 'trending-items'; diff --git a/packages/algoliasearch/lite/model/trendingItemsQuery.ts b/packages/algoliasearch/lite/model/trendingItemsQuery.ts new file mode 100644 index 000000000..86740e4bb --- /dev/null +++ b/packages/algoliasearch/lite/model/trendingItemsQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseRecommendRequest } from './baseRecommendRequest'; +import type { TrendingItems } from './trendingItems'; + +export type TrendingItemsQuery = BaseRecommendRequest & TrendingItems; diff --git a/packages/algoliasearch/lite/model/typoTolerance.ts b/packages/algoliasearch/lite/model/typoTolerance.ts new file mode 100644 index 000000000..767e63229 --- /dev/null +++ b/packages/algoliasearch/lite/model/typoTolerance.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TypoToleranceEnum } from './typoToleranceEnum'; + +/** + * Whether [typo tolerance](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/) is enabled and how it is applied. If typo tolerance is true, `min`, or `strict`, [word splitting and concatenation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/splitting-and-concatenation/) are also active. + */ +export type TypoTolerance = boolean | TypoToleranceEnum; diff --git a/packages/algoliasearch/lite/model/typoToleranceEnum.ts b/packages/algoliasearch/lite/model/typoToleranceEnum.ts new file mode 100644 index 000000000..a33877b0d --- /dev/null +++ b/packages/algoliasearch/lite/model/typoToleranceEnum.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * - `min`. Return matches with the lowest number of typos. For example, if you have matches without typos, only include those. But if there are no matches without typos (with 1 typo), include matches with 1 typo (2 typos). - `strict`. Return matches with the two lowest numbers of typos. With `strict`, the Typo ranking criterion is applied first in the `ranking` setting. + */ +export type TypoToleranceEnum = 'min' | 'strict'; diff --git a/packages/algoliasearch/lite/model/value.ts b/packages/algoliasearch/lite/model/value.ts new file mode 100644 index 000000000..72cd05add --- /dev/null +++ b/packages/algoliasearch/lite/model/value.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SortRemainingBy } from './sortRemainingBy'; + +export type Value = { + /** + * Explicit order of facets or facet values. This setting lets you always show specific facets or facet values at the top of the list. + */ + order?: Array; + + sortRemainingBy?: SortRemainingBy; + + /** + * Hide facet values. + */ + hide?: Array; +}; diff --git a/packages/algoliasearch/lite/model/widgets.ts b/packages/algoliasearch/lite/model/widgets.ts new file mode 100644 index 000000000..ee0f95779 --- /dev/null +++ b/packages/algoliasearch/lite/model/widgets.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Banner } from './banner'; + +/** + * Widgets returned from any rules that are applied to the current search. + */ +export type Widgets = { + /** + * Banners defined in the Merchandising Studio for a given search. + */ + banners?: Array; +}; diff --git a/packages/algoliasearch/lite/model/withPrimary.ts b/packages/algoliasearch/lite/model/withPrimary.ts new file mode 100644 index 000000000..552384167 --- /dev/null +++ b/packages/algoliasearch/lite/model/withPrimary.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type WithPrimary = { + /** + * Replica indices only: the name of the primary index for this replica. + */ + primary?: string; +}; diff --git a/packages/algoliasearch/lite/src/liteClient.ts b/packages/algoliasearch/lite/src/liteClient.ts new file mode 100644 index 000000000..cb96efae0 --- /dev/null +++ b/packages/algoliasearch/lite/src/liteClient.ts @@ -0,0 +1,310 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { + CreateClientOptions, + Headers, + Host, + QueryParameters, + Request, + RequestOptions, +} from '@algolia/client-common'; +import { createAuth, createTransporter, getAlgoliaAgent, shuffle } from '@algolia/client-common'; + +import type { GetRecommendationsParams } from '../model/getRecommendationsParams'; +import type { GetRecommendationsResponse } from '../model/getRecommendationsResponse'; +import type { SearchMethodParams } from '../model/searchMethodParams'; +import type { SearchResponses } from '../model/searchResponses'; + +import type { + CustomPostProps, + LegacyGetRecommendationsParams, + LegacySearchMethodProps, +} from '../model/clientMethodProps'; + +import type { SearchForFacetValuesResponse } from '../model/searchForFacetValuesResponse'; +import type { SearchResponse } from '../model/searchResponse'; + +export const apiClientVersion = '5.23.3'; + +function getDefaultHosts(appId: string): Host[] { + return ( + [ + { + url: `${appId}-dsn.algolia.net`, + accept: 'read', + protocol: 'https', + }, + { + url: `${appId}.algolia.net`, + accept: 'write', + protocol: 'https', + }, + ] as Host[] + ).concat( + shuffle([ + { + url: `${appId}-1.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + { + url: `${appId}-2.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + { + url: `${appId}-3.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + ]), + ); +} + +export function createLiteClient({ + appId: appIdOption, + apiKey: apiKeyOption, + authMode, + algoliaAgents, + ...options +}: CreateClientOptions) { + const auth = createAuth(appIdOption, apiKeyOption, authMode); + const transporter = createTransporter({ + hosts: getDefaultHosts(appIdOption), + ...options, + algoliaAgent: getAlgoliaAgent({ + algoliaAgents, + client: 'Lite', + version: apiClientVersion, + }), + baseHeaders: { + 'content-type': 'text/plain', + ...auth.headers(), + ...options.baseHeaders, + }, + baseQueryParameters: { + ...auth.queryParameters(), + ...options.baseQueryParameters, + }, + }); + + return { + transporter, + + /** + * The `appId` currently in use. + */ + appId: appIdOption, + + /** + * The `apiKey` currently in use. + */ + apiKey: apiKeyOption, + + /** + * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties. + */ + clearCache(): Promise { + return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => undefined); + }, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return transporter.algoliaAgent.value; + }, + + /** + * Adds a `segment` to the `x-algolia-agent` sent with every requests. + * + * @param segment - The algolia agent (user-agent) segment to add. + * @param version - The version of the agent. + */ + addAlgoliaAgent(segment: string, version?: string): void { + transporter.algoliaAgent.add({ segment, version }); + }, + + /** + * Helper method to switch the API key used to authenticate the requests. + * + * @param params - Method params. + * @param params.apiKey - The new API Key to use. + */ + setClientApiKey({ apiKey }: { apiKey: string }): void { + if (!authMode || authMode === 'WithinHeaders') { + transporter.baseHeaders['x-algolia-api-key'] = apiKey; + } else { + transporter.baseQueryParameters['x-algolia-api-key'] = apiKey; + } + }, + + /** + * Helper: calls the `search` method but with certainty that we will only request Algolia records (hits) and not facets. + * Disclaimer: We don't assert that the parameters you pass to this method only contains `hits` requests to prevent impacting search performances, this helper is purely for typing purposes. + * + * @summary Search multiple indices for `hits`. + * @param searchMethodParams - Query requests and strategies. Results will be received in the same order as the queries. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchForHits( + searchMethodParams: LegacySearchMethodProps | SearchMethodParams, + requestOptions?: RequestOptions, + ): Promise<{ results: Array> }> { + return this.search(searchMethodParams, requestOptions) as Promise<{ results: Array> }>; + }, + + /** + * Helper: calls the `search` method but with certainty that we will only request Algolia facets and not records (hits). + * Disclaimer: We don't assert that the parameters you pass to this method only contains `facets` requests to prevent impacting search performances, this helper is purely for typing purposes. + * + * @summary Search multiple indices for `facets`. + * @param searchMethodParams - Query requests and strategies. Results will be received in the same order as the queries. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchForFacets( + searchMethodParams: LegacySearchMethodProps | SearchMethodParams, + requestOptions?: RequestOptions, + ): Promise<{ results: Array }> { + return this.search(searchMethodParams, requestOptions) as Promise<{ + results: Array; + }>; + }, + /** + * This method lets you send requests to the Algolia REST API. + * @param customPost - The customPost object. + * @param customPost.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPost.parameters - Query parameters to apply to the current query. + * @param customPost.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPost( + { path, parameters, body }: CustomPostProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPost`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves recommendations from selected AI models. + * + * Required API Key ACLs: + * - search + * @param getRecommendationsParams - The getRecommendationsParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getRecommendations( + getRecommendationsParams: GetRecommendationsParams | LegacyGetRecommendationsParams, + requestOptions?: RequestOptions, + ): Promise { + if (getRecommendationsParams && Array.isArray(getRecommendationsParams)) { + const newSignatureRequest: GetRecommendationsParams = { + requests: getRecommendationsParams, + }; + + getRecommendationsParams = newSignatureRequest; + } + + if (!getRecommendationsParams) { + throw new Error('Parameter `getRecommendationsParams` is required when calling `getRecommendations`.'); + } + + if (!getRecommendationsParams.requests) { + throw new Error('Parameter `getRecommendationsParams.requests` is required when calling `getRecommendations`.'); + } + + const requestPath = '/1/indexes/*/recommendations'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: getRecommendationsParams, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Sends multiple search requests to one or more indices. This can be useful in these cases: - Different indices for different purposes, such as, one index for products, another one for marketing content. - Multiple searches to the same index—for example, with different filters. + * + * Required API Key ACLs: + * - search + * @param searchMethodParams - Muli-search request body. Results are returned in the same order as the requests. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + search( + searchMethodParams: SearchMethodParams | LegacySearchMethodProps, + requestOptions?: RequestOptions, + ): Promise> { + if (searchMethodParams && Array.isArray(searchMethodParams)) { + const newSignatureRequest: SearchMethodParams = { + requests: searchMethodParams.map(({ params, ...legacyRequest }) => { + if (legacyRequest.type === 'facet') { + return { + ...legacyRequest, + ...params, + type: 'facet', + }; + } + + return { + ...legacyRequest, + ...params, + facet: undefined, + maxFacetHits: undefined, + facetQuery: undefined, + }; + }), + }; + + searchMethodParams = newSignatureRequest; + } + + if (!searchMethodParams) { + throw new Error('Parameter `searchMethodParams` is required when calling `search`.'); + } + + if (!searchMethodParams.requests) { + throw new Error('Parameter `searchMethodParams.requests` is required when calling `search`.'); + } + + const requestPath = '/1/indexes/*/queries'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: searchMethodParams, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + }; +} diff --git a/packages/algoliasearch/lite/tsconfig.json b/packages/algoliasearch/lite/tsconfig.json new file mode 100644 index 000000000..82d026413 --- /dev/null +++ b/packages/algoliasearch/lite/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "types": ["node"], + "outDir": "dist/lite" + }, + "include": ["builds", "model", "src"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/algoliasearch/package.json b/packages/algoliasearch/package.json index b845729b3..68324ee45 100644 --- a/packages/algoliasearch/package.json +++ b/packages/algoliasearch/package.json @@ -1,22 +1,71 @@ { - "name": "algoliasearch", - "version": "4.13.1", - "private": false, - "description": "A fully-featured and blazing-fast JavaScript API client to interact with Algolia API.", + "version": "5.23.3", "repository": { "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/algoliasearch#readme", + "type": "module", "license": "MIT", - "sideEffects": false, - "main": "index.js", + "author": "Algolia", + "scripts": { + "build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js", + "clean": "rm -rf ./dist || true", + "test": "tsc -p __tests__/tsconfig.json && vitest --run", + "test:bundle": "publint . && attw --pack ." + }, + "name": "algoliasearch", + "description": "A fully-featured and blazing-fast JavaScript API client to interact with Algolia API.", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/node.js", + "module": "./dist/node.js", + "require": "./dist/node.cjs" + }, + "worker": { + "types": "./dist/worker.d.ts", + "default": "./dist/worker.js" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/browser.js", + "import": "./dist/browser.js", + "default": "./dist/algoliasearch.umd.js" + } + }, + "./lite": { + "node": { + "types": { + "import": "./dist/lite/node.d.ts", + "module": "./dist/lite/node.d.ts", + "require": "./dist/lite/node.d.cts" + }, + "import": "./dist/lite/builds/node.js", + "module": "./dist/lite/builds/node.js", + "require": "./dist/lite/builds/node.cjs" + }, + "default": { + "types": "./dist/lite/browser.d.ts", + "module": "./dist/lite/builds/browser.js", + "import": "./dist/lite/builds/browser.js", + "default": "./dist/lite/builds/browser.umd.js" + } + }, + "./dist/*": "./dist/*.js", + "./dist/lite/builds/*": "./dist/lite/builds/*.js" + }, "jsdelivr": "./dist/algoliasearch.umd.js", "unpkg": "./dist/algoliasearch.umd.js", - "browser": { - "./index.js": "./dist/algoliasearch.umd.js", - "./lite.js": "./dist/algoliasearch-lite.umd.js" + "react-native": { + ".": "./dist/browser.js", + "./lite": "./dist/lite/builds/browser.js" }, - "types": "index.d.ts", "files": [ "dist", "index.js", @@ -25,19 +74,34 @@ "lite.d.ts" ], "dependencies": { - "@algolia/cache-browser-local-storage": "4.13.1", - "@algolia/cache-common": "4.13.1", - "@algolia/cache-in-memory": "4.13.1", - "@algolia/client-account": "4.13.1", - "@algolia/client-analytics": "4.13.1", - "@algolia/client-common": "4.13.1", - "@algolia/client-personalization": "4.13.1", - "@algolia/client-search": "4.13.1", - "@algolia/logger-common": "4.13.1", - "@algolia/logger-console": "4.13.1", - "@algolia/requester-browser-xhr": "4.13.1", - "@algolia/requester-common": "4.13.1", - "@algolia/requester-node-http": "4.13.1", - "@algolia/transporter": "4.13.1" + "@algolia/client-abtesting": "5.23.3", + "@algolia/client-analytics": "5.23.3", + "@algolia/client-common": "5.23.3", + "@algolia/client-insights": "5.23.3", + "@algolia/client-personalization": "5.23.3", + "@algolia/client-query-suggestions": "5.23.3", + "@algolia/client-search": "5.23.3", + "@algolia/ingestion": "1.23.3", + "@algolia/monitoring": "1.23.3", + "@algolia/recommend": "5.23.3", + "@algolia/requester-browser-xhr": "5.23.3", + "@algolia/requester-fetch": "5.23.3", + "@algolia/requester-node-http": "5.23.3" + }, + "devDependencies": { + "@algolia/requester-testing": "5.23.3", + "@arethetypeswrong/cli": "0.17.4", + "@cloudflare/vitest-pool-workers": "0.8.11", + "@cloudflare/workers-types": "4.20250407.0", + "@types/node": "22.14.0", + "jsdom": "26.0.0", + "publint": "0.3.10", + "rollup": "4.39.0", + "tsup": "8.4.0", + "typescript": "5.8.3", + "vitest": "3.1.1" + }, + "engines": { + "node": ">= 14.0.0" } } diff --git a/packages/algoliasearch/rollup.config.js b/packages/algoliasearch/rollup.config.js new file mode 100644 index 000000000..ae4e88749 --- /dev/null +++ b/packages/algoliasearch/rollup.config.js @@ -0,0 +1,31 @@ +export default [ + { + input: 'dist/lite/builds/browser.min.js', + external: ['dom'], + cache: false, + output: { + esModule: false, + file: 'dist/lite/builds/browser.umd.js', + name: 'algoliasearch/lite', + format: 'umd', + sourcemap: false, + globals: { + ['lite']: 'lite', + }, + }, + }, + { + input: 'dist/browser.min.js', + external: ['dom'], + output: { + esModule: false, + file: 'dist/algoliasearch.umd.js', + name: 'algoliasearch', + format: 'umd', + sourcemap: false, + globals: { + ['algoliasearch']: 'algoliasearch', + }, + }, + }, +]; diff --git a/packages/algoliasearch/src/__tests__/default.test.ts b/packages/algoliasearch/src/__tests__/default.test.ts deleted file mode 100644 index a321dc477..000000000 --- a/packages/algoliasearch/src/__tests__/default.test.ts +++ /dev/null @@ -1,175 +0,0 @@ -import { createInMemoryCache } from '@algolia/cache-in-memory'; -import { version } from '@algolia/client-common'; -import { createStatelessHost, createUserAgent } from '@algolia/transporter'; - -import { TestSuite } from '../../../client-common/src/__tests__/TestSuite'; - -const algoliasearch = new TestSuite('search').algoliasearch; -const client = algoliasearch('appId', 'apiKey'); - -describe('default preset', () => { - it('has a version property', () => { - expect(algoliasearch.version).toBe(version); - expect(algoliasearch.version.startsWith('4.')).toBe(true); - }); - - it('sets default headers', () => { - expect(client.transporter.headers).toEqual({ - 'content-type': 'application/x-www-form-urlencoded', - 'x-algolia-application-id': 'appId', - 'x-algolia-api-key': 'apiKey', - }); - }); - - it('sets default query pameters', () => { - expect(client.transporter.queryParameters).toEqual({}); - }); - - it('sets default user agent', () => { - if (testing.isBrowser()) { - expect(client.transporter.userAgent.value).toEqual( - `Algolia for JavaScript (${version}); Browser` - ); - } else { - const nodeVersion = process.versions.node; - - expect(client.transporter.userAgent.value).toEqual( - `Algolia for JavaScript (${version}); Node.js (${nodeVersion})` - ); - } - }); - - it('allows to customize options', () => { - const cache = createInMemoryCache(); - const userAgent = createUserAgent('0.2.0'); - - const customClient = algoliasearch('appId', 'apiKey', { - hostsCache: cache, - requestsCache: cache, - userAgent, - timeouts: { - connect: 45, - read: 46, - write: 47, - }, - queryParameters: { - queryParameter: 'bar', - }, - headers: { - header: 'foo', - }, - hosts: [{ url: 'foo.com' }], - }); - - // First, all should be the same, except hosts cache. - const analytics = client.initAnalytics(); - expect(client.transporter.timeouts).toBe(analytics.transporter.timeouts); - expect(client.transporter.userAgent).toBe(analytics.transporter.userAgent); - expect(client.transporter.responsesCache).toBe(analytics.transporter.responsesCache); - expect(client.transporter.hostsCache).toBe(analytics.transporter.hostsCache); - - // Then, on custom options, only the search client is impacted - expect(client.transporter.hostsCache).not.toBe(cache); - expect(customClient.transporter.hostsCache).toBe(cache); - expect(customClient.initAnalytics().transporter.hostsCache).not.toBe(cache); - expect(customClient.initAnalytics({ hostsCache: cache }).transporter.hostsCache).toBe(cache); - - expect(client.transporter.requestsCache).not.toBe(cache); - expect(customClient.transporter.requestsCache).toBe(cache); - expect(customClient.initPersonalization().transporter.requestsCache).not.toBe(cache); - expect(customClient.initAnalytics({ requestsCache: cache }).transporter.requestsCache).toBe( - cache - ); - expect(customClient.transporter.timeouts).toEqual({ - connect: 45, - read: 46, - write: 47, - }); - expect(customClient.initPersonalization().transporter.timeouts).toEqual({ - connect: testing.isBrowser() ? 1 : 2, - read: testing.isBrowser() ? 2 : 5, - write: 30, - }); - - expect(customClient.transporter.queryParameters).toEqual({ - queryParameter: 'bar', - }); - expect(customClient.transporter.headers).toEqual({ - 'content-type': 'application/x-www-form-urlencoded', - 'x-algolia-application-id': 'appId', - 'x-algolia-api-key': 'apiKey', - header: 'foo', - }); - expect(customClient.transporter.hosts).toEqual([createStatelessHost({ url: 'foo.com' })]); - - expect(customClient.initAnalytics().transporter.queryParameters).toEqual({}); - expect(customClient.initPersonalization().transporter.headers).toEqual({ - 'content-type': 'application/json', - 'x-algolia-application-id': 'appId', - 'x-algolia-api-key': 'apiKey', - }); - expect(customClient.initAnalytics().transporter.hosts).not.toEqual([ - createStatelessHost({ url: 'foo.com' }), - ]); - - expect(customClient.initPersonalization().transporter.queryParameters).not.toEqual({ - queryParameter: 'bar', - }); - - expect(customClient.initPersonalization().transporter.headers).toEqual({ - 'content-type': 'application/json', - 'x-algolia-application-id': 'appId', - 'x-algolia-api-key': 'apiKey', - }); - expect(customClient.initPersonalization().transporter.hosts).not.toEqual([ - createStatelessHost({ url: 'foo.com' }), - ]); - }); - - test('shared implementations between clients', () => { - const analytics = client.initAnalytics(); - const personalization = client.initPersonalization(); - - expect(analytics.transporter).not.toBe(client.transporter); - expect(analytics.transporter.hostsCache).toBe(client.transporter.hostsCache); - expect(analytics.transporter.userAgent).toBe(client.transporter.userAgent); - - expect(personalization.transporter).not.toBe(client.transporter); - expect(personalization.transporter.hostsCache).toBe(client.transporter.hostsCache); - expect(personalization.transporter.userAgent).toBe(client.transporter.userAgent); - }); - - test('allows clients to override credentials', () => { - const clientWithOptions = algoliasearch('appId', 'apiKey'); - - expect(clientWithOptions.transporter.headers['x-algolia-api-key']).toBe('apiKey'); - - const analytics = clientWithOptions.initAnalytics({ - apiKey: 'analytics', - }); - const personalization = clientWithOptions.initPersonalization({ - apiKey: 'personalization', - }); - - expect(analytics.transporter.headers['x-algolia-api-key']).toBe('analytics'); - expect(personalization.transporter.headers['x-algolia-api-key']).toBe('personalization'); - }); - - test('allows clients to keep default credentials', () => { - const clientWithOptions = algoliasearch('appId', 'apiKey'); - - expect(clientWithOptions.transporter.headers['x-algolia-api-key']).toBe('apiKey'); - - const analytics = clientWithOptions.initAnalytics(); - const personalization = clientWithOptions.initPersonalization(); - - expect(analytics.transporter.headers['x-algolia-api-key']).toBe('apiKey'); - expect(personalization.transporter.headers['x-algolia-api-key']).toBe('apiKey'); - }); - - it('can be destroyed', () => { - if (!testing.isBrowser()) { - expect(client).toHaveProperty('destroy'); - } - }); -}); diff --git a/packages/algoliasearch/src/__tests__/lite.test.ts b/packages/algoliasearch/src/__tests__/lite.test.ts deleted file mode 100644 index 4586f4396..000000000 --- a/packages/algoliasearch/src/__tests__/lite.test.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { createInMemoryCache } from '@algolia/cache-in-memory'; -import { version } from '@algolia/client-common'; -import { createStatelessHost, createUserAgent } from '@algolia/transporter'; - -import algoliasearch from '../builds/browserLite'; - -const client = algoliasearch('appId', 'apiKey'); - -describe('lite preset', () => { - it('has a version property', () => { - expect(algoliasearch.version).toBe(version); - expect(algoliasearch.version.startsWith('4.')).toBe(true); - }); - - it('sets default headers', () => { - expect(client.transporter.headers).toEqual({ - 'content-type': 'application/x-www-form-urlencoded', - }); - }); - - it('sets default query pameters', () => { - expect(client.transporter.queryParameters).toEqual({ - 'x-algolia-application-id': 'appId', - 'x-algolia-api-key': 'apiKey', - }); - }); - - it('sets default user agent', () => { - expect(client.transporter.userAgent.value).toEqual( - `Algolia for JavaScript (${version}); Browser (lite)` - ); - }); - - it('allows to customize options', () => { - const cache = createInMemoryCache(); - const userAgent = createUserAgent('0.2.0'); - - const customClient = algoliasearch('appId', 'apiKey', { - hostsCache: cache, - requestsCache: cache, - userAgent, - timeouts: { - connect: 45, - read: 46, - write: 47, - }, - queryParameters: { - queryParameter: 'bar', - }, - headers: { - header: 'foo', - }, - hosts: [{ url: 'foo.com' }], - }); - - expect(customClient.transporter.hostsCache).toBe(cache); - expect(customClient.transporter.requestsCache).toBe(cache); - expect(customClient.transporter.userAgent).toBe(userAgent); - expect(customClient.transporter.timeouts.connect).toBe(45); - expect(customClient.transporter.timeouts.read).toBe(46); - expect(customClient.transporter.timeouts.write).toBe(47); - expect(customClient.transporter.queryParameters).toEqual({ - 'x-algolia-application-id': 'appId', - 'x-algolia-api-key': 'apiKey', - queryParameter: 'bar', - }); - expect(customClient.transporter.headers).toEqual({ - 'content-type': 'application/x-www-form-urlencoded', - header: 'foo', - }); - expect(customClient.transporter.hosts).toEqual([createStatelessHost({ url: 'foo.com' })]); - }); -}); diff --git a/packages/algoliasearch/src/builds/browser.ts b/packages/algoliasearch/src/builds/browser.ts deleted file mode 100644 index 55b836db3..000000000 --- a/packages/algoliasearch/src/builds/browser.ts +++ /dev/null @@ -1,694 +0,0 @@ -import { createBrowserLocalStorageCache } from '@algolia/cache-browser-local-storage'; -import { createFallbackableCache } from '@algolia/cache-common'; -import { createInMemoryCache } from '@algolia/cache-in-memory'; -import { - ABTest, - addABTest, - AddABTestResponse, - AnalyticsClient as BaseAnalyticsClient, - createAnalyticsClient, - deleteABTest, - DeleteABTestResponse, - getABTest, - GetABTestResponse, - getABTests, - GetABTestsOptions, - GetABTestsResponse, - stopABTest, - StopABTestResponse, -} from '@algolia/client-analytics'; -import { version, WaitablePromise } from '@algolia/client-common'; -import { - createPersonalizationClient, - getPersonalizationStrategy, - GetPersonalizationStrategyResponse, - PersonalizationClient as BasePersonalizationClient, - PersonalizationStrategy, - setPersonalizationStrategy, - SetPersonalizationStrategyResponse, -} from '@algolia/client-personalization'; -import { - addApiKey, - AddApiKeyOptions, - AddApiKeyResponse, - ApiKeyACLType, - assignUserID, - AssignUserIDResponse, - assignUserIDs, - AssignUserIDsResponse, - batch, - BatchRequest, - BatchResponse, - browseObjects, - BrowseOptions, - browseRules, - browseSynonyms, - ChunkedBatchResponse, - ChunkOptions, - clearDictionaryEntries, - clearObjects, - clearRules, - ClearRulesOptions, - clearSynonyms, - ClearSynonymsOptions, - copyIndex, - CopyIndexOptions, - copyRules, - copySettings, - copySynonyms, - createSearchClient, - customRequest, - deleteApiKey, - DeleteApiKeyResponse, - deleteBy, - DeleteByFiltersOptions, - deleteDictionaryEntries, - deleteIndex, - deleteObject, - deleteObjects, - DeleteResponse, - deleteRule, - deleteSynonym, - DeleteSynonymOptions, - DictionaryEntriesOptions, - DictionaryEntriesResponse, - DictionaryEntry, - DictionaryName, - DictionarySettings, - exists, - findAnswers, - FindAnswersOptions, - FindAnswersResponse, - findObject, - FindObjectOptions, - FindObjectResponse, - getApiKey, - GetApiKeyResponse, - getAppTask, - getDictionarySettings, - GetDictionarySettingsResponse, - getLogs, - GetLogsResponse, - getObject, - GetObjectOptions, - getObjectPosition, - getObjects, - GetObjectsOptions, - GetObjectsResponse, - getRule, - getSettings, - getSynonym, - getTopUserIDs, - GetTopUserIDsResponse, - getUserID, - hasPendingMappings, - HasPendingMappingsOptions, - HasPendingMappingsResponse, - IndexOperationResponse, - initIndex, - listApiKeys, - ListApiKeysResponse, - listClusters, - ListClustersResponse, - listIndices, - ListIndicesResponse, - listUserIDs, - ListUserIDsOptions, - ListUserIDsResponse, - moveIndex, - multipleBatch, - MultipleBatchRequest, - MultipleBatchResponse, - MultipleGetObject, - multipleGetObjects, - MultipleGetObjectsResponse, - multipleQueries, - MultipleQueriesOptions, - MultipleQueriesQuery, - MultipleQueriesResponse, - multipleSearchForFacetValues, - ObjectWithObjectID, - partialUpdateObject, - PartialUpdateObjectResponse, - partialUpdateObjects, - PartialUpdateObjectsOptions, - removeUserID, - RemoveUserIDResponse, - replaceAllObjects, - ReplaceAllObjectsOptions, - replaceAllRules, - replaceAllSynonyms, - replaceDictionaryEntries, - restoreApiKey, - RestoreApiKeyResponse, - Rule, - saveDictionaryEntries, - saveObject, - SaveObjectResponse, - saveObjects, - SaveObjectsOptions, - saveRule, - SaveRuleResponse, - saveRules, - SaveRulesOptions, - SaveRulesResponse, - saveSynonym, - SaveSynonymResponse, - saveSynonyms, - SaveSynonymsOptions, - SaveSynonymsResponse, - search, - SearchClient as BaseSearchClient, - searchDictionaryEntries, - SearchDictionaryEntriesResponse, - searchForFacetValues, - SearchForFacetValuesQueryParams, - SearchForFacetValuesResponse, - SearchIndex as BaseSearchIndex, - SearchOptions, - SearchResponse, - searchRules, - SearchRulesOptions, - searchSynonyms, - SearchSynonymsOptions, - SearchSynonymsResponse, - searchUserIDs, - SearchUserIDsOptions, - SearchUserIDsResponse, - setDictionarySettings, - setSettings, - SetSettingsResponse, - Settings, - Synonym, - TaskStatusResponse, - updateApiKey, - UpdateApiKeyOptions, - UpdateApiKeyResponse, - UserIDResponse, - waitAppTask, - waitTask, -} from '@algolia/client-search'; -import { LogLevelEnum } from '@algolia/logger-common'; -import { createConsoleLogger } from '@algolia/logger-console'; -import { createBrowserXhrRequester } from '@algolia/requester-browser-xhr'; -import { createUserAgent, Request, RequestOptions } from '@algolia/transporter'; - -import { AlgoliaSearchOptions, InitAnalyticsOptions, InitPersonalizationOptions } from '../types'; - -export default function algoliasearch( - appId: string, - apiKey: string, - options?: AlgoliaSearchOptions -): SearchClient { - const commonOptions = { - appId, - apiKey, - timeouts: { - connect: 1, - read: 2, - write: 30, - }, - requester: createBrowserXhrRequester(), - logger: createConsoleLogger(LogLevelEnum.Error), - responsesCache: createInMemoryCache(), - requestsCache: createInMemoryCache({ serializable: false }), - hostsCache: createFallbackableCache({ - caches: [ - createBrowserLocalStorageCache({ key: `${version}-${appId}` }), - createInMemoryCache(), - ], - }), - userAgent: createUserAgent(version).add({ segment: 'Browser' }), - }; - const searchClientOptions = { ...commonOptions, ...options }; - const initPersonalization = () => ( - clientOptions?: InitPersonalizationOptions - ): PersonalizationClient => { - return createPersonalizationClient({ - ...commonOptions, - ...clientOptions, - methods: { - getPersonalizationStrategy, - setPersonalizationStrategy, - }, - }); - }; - - return createSearchClient({ - ...searchClientOptions, - methods: { - search: multipleQueries, - searchForFacetValues: multipleSearchForFacetValues, - multipleBatch, - multipleGetObjects, - multipleQueries, - copyIndex, - copySettings, - copySynonyms, - copyRules, - moveIndex, - listIndices, - getLogs, - listClusters, - multipleSearchForFacetValues, - getApiKey, - addApiKey, - listApiKeys, - updateApiKey, - deleteApiKey, - restoreApiKey, - assignUserID, - assignUserIDs, - getUserID, - searchUserIDs, - listUserIDs, - getTopUserIDs, - removeUserID, - hasPendingMappings, - clearDictionaryEntries, - deleteDictionaryEntries, - getDictionarySettings, - getAppTask, - replaceDictionaryEntries, - saveDictionaryEntries, - searchDictionaryEntries, - setDictionarySettings, - waitAppTask, - customRequest, - initIndex: base => (indexName: string): SearchIndex => { - return initIndex(base)(indexName, { - methods: { - batch, - delete: deleteIndex, - findAnswers, - getObject, - getObjects, - saveObject, - saveObjects, - search, - searchForFacetValues, - waitTask, - setSettings, - getSettings, - partialUpdateObject, - partialUpdateObjects, - deleteObject, - deleteObjects, - deleteBy, - clearObjects, - browseObjects, - getObjectPosition, - findObject, - exists, - saveSynonym, - saveSynonyms, - getSynonym, - searchSynonyms, - browseSynonyms, - deleteSynonym, - clearSynonyms, - replaceAllObjects, - replaceAllSynonyms, - searchRules, - getRule, - deleteRule, - saveRule, - saveRules, - replaceAllRules, - browseRules, - clearRules, - }, - }); - }, - initAnalytics: () => (clientOptions?: InitAnalyticsOptions): AnalyticsClient => { - return createAnalyticsClient({ - ...commonOptions, - ...clientOptions, - methods: { - addABTest, - getABTest, - getABTests, - stopABTest, - deleteABTest, - }, - }); - }, - initPersonalization, - initRecommendation: () => ( - clientOptions?: InitPersonalizationOptions - ): PersonalizationClient => { - searchClientOptions.logger.info( - 'The `initRecommendation` method is deprecated. Use `initPersonalization` instead.' - ); - - return initPersonalization()(clientOptions); - }, - }, - }); -} - -// eslint-disable-next-line functional/immutable-data -algoliasearch.version = version; - -export type PersonalizationClient = BasePersonalizationClient & { - readonly getPersonalizationStrategy: ( - requestOptions?: RequestOptions - ) => Readonly>; - readonly setPersonalizationStrategy: ( - personalizationStrategy: PersonalizationStrategy, - requestOptions?: RequestOptions - ) => Readonly>; -}; - -/** - * @deprecated Use `PersonalizationClient` instead. - */ -export type RecommendationClient = PersonalizationClient; - -export type AnalyticsClient = BaseAnalyticsClient & { - readonly addABTest: ( - abTest: ABTest, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getABTest: ( - abTestID: number, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getABTests: ( - requestOptions?: RequestOptions & GetABTestsOptions - ) => Readonly>; - readonly stopABTest: ( - abTestID: number, - requestOptions?: RequestOptions - ) => Readonly>; - readonly deleteABTest: ( - abTestID: number, - requestOptions?: RequestOptions - ) => Readonly>; -}; - -export type SearchIndex = BaseSearchIndex & { - readonly search: ( - query: string, - requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; - readonly findAnswers: ( - query: string, - queryLanguages: readonly string[], - requestOptions?: RequestOptions & FindAnswersOptions - ) => Readonly>>; - readonly searchForFacetValues: ( - facetName: string, - facetQuery: string, - requestOptions?: RequestOptions & SearchOptions - ) => Readonly>; - readonly batch: ( - requests: readonly BatchRequest[], - requestOptions?: RequestOptions - ) => Readonly>; - readonly delete: (requestOptions?: RequestOptions) => Readonly>; - readonly getObject: ( - objectID: string, - requestOptions?: RequestOptions & GetObjectOptions - ) => Readonly>; - readonly getObjects: ( - objectIDs: readonly string[], - requestOptions?: RequestOptions & GetObjectsOptions - ) => Readonly>>; - readonly saveObject: ( - object: Readonly>, - requestOptions?: RequestOptions & ChunkOptions & SaveObjectsOptions - ) => Readonly>; - readonly saveObjects: ( - objects: ReadonlyArray>>, - requestOptions?: RequestOptions & ChunkOptions & SaveObjectsOptions - ) => Readonly>; - readonly waitTask: (taskID: number, requestOptions?: RequestOptions) => Readonly>; - readonly setSettings: ( - settings: Settings, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getSettings: (requestOptions?: RequestOptions) => Readonly>; - readonly partialUpdateObject: ( - object: Record, - requestOptions?: RequestOptions & ChunkOptions & PartialUpdateObjectsOptions - ) => Readonly>; - readonly partialUpdateObjects: ( - objects: ReadonlyArray>, - requestOptions?: RequestOptions & ChunkOptions & PartialUpdateObjectsOptions - ) => Readonly>; - readonly deleteObject: ( - objectID: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly deleteObjects: ( - objectIDs: readonly string[], - requestOptions?: RequestOptions & ChunkOptions - ) => Readonly>; - readonly deleteBy: ( - filters: DeleteByFiltersOptions, - requestOptions?: RequestOptions - ) => Readonly>; - readonly clearObjects: ( - requestOptions?: RequestOptions - ) => Readonly>; - readonly browseObjects: ( - requestOptions?: SearchOptions & BrowseOptions & RequestOptions - ) => Readonly>; - readonly getObjectPosition: (searchResponse: SearchResponse<{}>, objectID: string) => number; - readonly findObject: ( - callback: (object: TObject & ObjectWithObjectID) => boolean, - requestOptions?: FindObjectOptions & RequestOptions - ) => Readonly>>; - readonly exists: (requestOptions?: RequestOptions) => Readonly>; - readonly saveSynonym: ( - synonym: Synonym, - requestOptions?: RequestOptions & SaveSynonymsOptions - ) => Readonly>; - readonly saveSynonyms: ( - synonyms: readonly Synonym[], - requestOptions?: SaveSynonymsOptions & RequestOptions - ) => Readonly>; - readonly getSynonym: ( - objectID: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly searchSynonyms: ( - query: string, - requestOptions?: SearchSynonymsOptions & RequestOptions - ) => Readonly>; - readonly browseSynonyms: ( - requestOptions?: SearchSynonymsOptions & BrowseOptions & RequestOptions - ) => Readonly>; - readonly deleteSynonym: ( - objectID: string, - requestOptions?: DeleteSynonymOptions & RequestOptions - ) => Readonly>; - readonly clearSynonyms: ( - requestOptions?: ClearSynonymsOptions & RequestOptions - ) => Readonly>; - readonly replaceAllObjects: ( - objects: ReadonlyArray>>, - requestOptions?: ReplaceAllObjectsOptions & ChunkOptions & SaveObjectsOptions & RequestOptions - ) => Readonly>; - readonly replaceAllSynonyms: ( - synonyms: readonly Synonym[], - requestOptions?: RequestOptions & - Pick< - SaveSynonymsOptions, - Exclude - > - ) => Readonly>; - readonly searchRules: ( - query: string, - requestOptions?: RequestOptions & SearchRulesOptions - ) => Readonly>>; - readonly getRule: (objectID: string, requestOptions?: RequestOptions) => Readonly>; - readonly deleteRule: ( - objectID: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly saveRule: ( - rule: Rule, - requestOptions?: RequestOptions & SaveRulesOptions - ) => Readonly>; - readonly saveRules: ( - rules: readonly Rule[], - requestOptions?: RequestOptions & SaveRulesOptions - ) => Readonly>; - readonly replaceAllRules: ( - rules: readonly Rule[], - requestOptions?: RequestOptions & SaveRulesOptions - ) => Readonly>; - readonly browseRules: ( - requestOptions?: SearchRulesOptions & BrowseOptions & RequestOptions - ) => Readonly>; - readonly clearRules: ( - requestOptions?: RequestOptions & ClearRulesOptions - ) => Readonly>; -}; - -export type SearchClient = BaseSearchClient & { - readonly initIndex: (indexName: string) => SearchIndex; - readonly search: ( - queries: readonly MultipleQueriesQuery[], - requestOptions?: RequestOptions & MultipleQueriesOptions - ) => Readonly>>; - readonly searchForFacetValues: ( - queries: ReadonlyArray<{ - readonly indexName: string; - readonly params: SearchForFacetValuesQueryParams & SearchOptions; - }>, - requestOptions?: RequestOptions - ) => Readonly>; - readonly multipleBatch: ( - requests: readonly MultipleBatchRequest[], - requestOptions?: RequestOptions - ) => Readonly>; - readonly multipleGetObjects: ( - requests: readonly MultipleGetObject[], - requestOptions?: RequestOptions - ) => Readonly>>; - readonly multipleQueries: ( - queries: readonly MultipleQueriesQuery[], - requestOptions?: RequestOptions & MultipleQueriesOptions - ) => Readonly>>; - readonly copyIndex: ( - from: string, - to: string, - requestOptions?: CopyIndexOptions & RequestOptions - ) => Readonly>; - readonly copySettings: ( - from: string, - to: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly copyRules: ( - from: string, - to: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly copySynonyms: ( - from: string, - to: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly moveIndex: ( - from: string, - to: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly listIndices: (requestOptions?: RequestOptions) => Readonly>; - readonly getLogs: (requestOptions?: RequestOptions) => Readonly>; - readonly listClusters: ( - requestOptions?: RequestOptions - ) => Readonly>; - readonly multipleSearchForFacetValues: ( - queries: ReadonlyArray<{ - readonly indexName: string; - readonly params: SearchForFacetValuesQueryParams & SearchOptions; - }>, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getApiKey: ( - apiKey: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly addApiKey: ( - acl: readonly ApiKeyACLType[], - requestOptions?: AddApiKeyOptions & - Pick> - ) => Readonly>; - readonly listApiKeys: (requestOptions?: RequestOptions) => Readonly>; - readonly updateApiKey: ( - apiKey: string, - requestOptions?: UpdateApiKeyOptions & - Pick> - ) => Readonly>; - readonly deleteApiKey: ( - apiKey: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly restoreApiKey: ( - apiKey: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly assignUserID: ( - userID: string, - clusterName: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly assignUserIDs: ( - userIDs: readonly string[], - clusterName: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getUserID: ( - userID: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly searchUserIDs: ( - query: string, - requestOptions?: SearchUserIDsOptions & RequestOptions - ) => Readonly>; - readonly listUserIDs: ( - requestOptions?: ListUserIDsOptions & RequestOptions - ) => Readonly>; - readonly getTopUserIDs: ( - requestOptions?: RequestOptions - ) => Readonly>; - readonly removeUserID: ( - userID: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly hasPendingMappings: ( - requestOptions?: HasPendingMappingsOptions & RequestOptions - ) => Readonly>; - readonly clearDictionaryEntries: ( - dictionary: DictionaryName, - requestOptions?: RequestOptions & DictionaryEntriesOptions - ) => Readonly>; - readonly deleteDictionaryEntries: ( - dictionary: DictionaryName, - objectIDs: readonly string[], - requestOptions?: RequestOptions & DictionaryEntriesOptions - ) => Readonly>; - readonly replaceDictionaryEntries: ( - dictionary: DictionaryName, - entries: readonly DictionaryEntry[], - requestOptions?: RequestOptions & DictionaryEntriesOptions - ) => Readonly>; - readonly saveDictionaryEntries: ( - dictionary: DictionaryName, - entries: readonly DictionaryEntry[], - requestOptions?: RequestOptions & DictionaryEntriesOptions - ) => Readonly>; - readonly searchDictionaryEntries: ( - dictionary: DictionaryName, - query: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getDictionarySettings: ( - requestOptions?: RequestOptions - ) => Readonly>; - readonly setDictionarySettings: ( - settings: DictionarySettings, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getAppTask: ( - taskID: number, - requestOptions?: RequestOptions - ) => Readonly>; - readonly customRequest: ( - request: Request, - requestOptions?: RequestOptions - ) => Readonly>; - readonly initAnalytics: (options?: InitAnalyticsOptions) => AnalyticsClient; - readonly initPersonalization: (options?: InitPersonalizationOptions) => PersonalizationClient; - /** - * @deprecated Use `initPersonalization` instead. - */ - readonly initRecommendation: (options?: InitPersonalizationOptions) => PersonalizationClient; -}; - -export * from '../types'; diff --git a/packages/algoliasearch/src/builds/browserLite.ts b/packages/algoliasearch/src/builds/browserLite.ts deleted file mode 100644 index 3baa84310..000000000 --- a/packages/algoliasearch/src/builds/browserLite.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { createBrowserLocalStorageCache } from '@algolia/cache-browser-local-storage'; -import { createFallbackableCache } from '@algolia/cache-common'; -import { createInMemoryCache } from '@algolia/cache-in-memory'; -import { AuthMode, version } from '@algolia/client-common'; -import { - createSearchClient, - customRequest, - findAnswers, - FindAnswersOptions, - FindAnswersResponse, - initIndex, - multipleQueries, - MultipleQueriesOptions, - MultipleQueriesQuery, - MultipleQueriesResponse, - multipleSearchForFacetValues, - search, - SearchClient as BaseSearchClient, - searchForFacetValues, - SearchForFacetValuesQueryParams, - SearchForFacetValuesResponse, - SearchIndex as BaseSearchIndex, - SearchOptions, - SearchResponse, -} from '@algolia/client-search'; -import { LogLevelEnum } from '@algolia/logger-common'; -import { createConsoleLogger } from '@algolia/logger-console'; -import { createBrowserXhrRequester } from '@algolia/requester-browser-xhr'; -import { createUserAgent, Request, RequestOptions } from '@algolia/transporter'; - -import { AlgoliaSearchOptions } from '../types'; - -export default function algoliasearch( - appId: string, - apiKey: string, - options?: AlgoliaSearchOptions -): SearchClient { - const commonOptions = { - appId, - apiKey, - timeouts: { - connect: 1, - read: 2, - write: 30, - }, - requester: createBrowserXhrRequester(), - logger: createConsoleLogger(LogLevelEnum.Error), - responsesCache: createInMemoryCache(), - requestsCache: createInMemoryCache({ serializable: false }), - hostsCache: createFallbackableCache({ - caches: [ - createBrowserLocalStorageCache({ key: `${version}-${appId}` }), - createInMemoryCache(), - ], - }), - userAgent: createUserAgent(version).add({ - segment: 'Browser', - version: 'lite', - }), - authMode: AuthMode.WithinQueryParameters, - }; - - return createSearchClient({ - ...commonOptions, - ...options, - methods: { - search: multipleQueries, - searchForFacetValues: multipleSearchForFacetValues, - multipleQueries, - multipleSearchForFacetValues, - customRequest, - initIndex: base => (indexName: string): SearchIndex => { - return initIndex(base)(indexName, { - methods: { search, searchForFacetValues, findAnswers }, - }); - }, - }, - }); -} - -// eslint-disable-next-line functional/immutable-data -algoliasearch.version = version; - -export type SearchIndex = BaseSearchIndex & { - readonly search: ( - query: string, - requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; - readonly searchForFacetValues: ( - facetName: string, - facetQuery: string, - requestOptions?: RequestOptions & SearchOptions - ) => Readonly>; - readonly findAnswers: ( - query: string, - queryLanguages: readonly string[], - requestOptions?: RequestOptions & FindAnswersOptions - ) => Readonly>>; -}; - -export type SearchClient = BaseSearchClient & { - readonly initIndex: (indexName: string) => SearchIndex; - readonly search: ( - queries: readonly MultipleQueriesQuery[], - requestOptions?: RequestOptions & MultipleQueriesOptions - ) => Readonly>>; - readonly searchForFacetValues: ( - queries: ReadonlyArray<{ - readonly indexName: string; - readonly params: SearchForFacetValuesQueryParams & SearchOptions; - }>, - requestOptions?: RequestOptions - ) => Readonly>; - readonly customRequest: ( - request: Request, - requestOptions?: RequestOptions - ) => Readonly>; -}; - -export { WithoutCredentials, AlgoliaSearchOptions } from '../types'; diff --git a/packages/algoliasearch/src/builds/node.ts b/packages/algoliasearch/src/builds/node.ts deleted file mode 100644 index 31ab4f35f..000000000 --- a/packages/algoliasearch/src/builds/node.ts +++ /dev/null @@ -1,702 +0,0 @@ -import { createNullCache } from '@algolia/cache-common'; -import { createInMemoryCache } from '@algolia/cache-in-memory'; -import { - ABTest, - addABTest, - AddABTestResponse, - AnalyticsClient as BaseAnalyticsClient, - createAnalyticsClient, - deleteABTest, - DeleteABTestResponse, - getABTest, - GetABTestResponse, - getABTests, - GetABTestsOptions, - GetABTestsResponse, - stopABTest, - StopABTestResponse, -} from '@algolia/client-analytics'; -import { destroy, version, WaitablePromise } from '@algolia/client-common'; -import { - createPersonalizationClient, - getPersonalizationStrategy, - GetPersonalizationStrategyResponse, - PersonalizationClient as BasePersonalizationClient, - PersonalizationStrategy, - setPersonalizationStrategy, - SetPersonalizationStrategyResponse, -} from '@algolia/client-personalization'; -import { - addApiKey, - AddApiKeyOptions, - AddApiKeyResponse, - ApiKeyACLType, - assignUserID, - AssignUserIDResponse, - assignUserIDs, - AssignUserIDsResponse, - batch, - BatchRequest, - BatchResponse, - browseObjects, - BrowseOptions, - browseRules, - browseSynonyms, - ChunkedBatchResponse, - ChunkOptions, - clearDictionaryEntries, - clearObjects, - clearRules, - ClearRulesOptions, - clearSynonyms, - ClearSynonymsOptions, - copyIndex, - CopyIndexOptions, - copyRules, - copySettings, - copySynonyms, - createSearchClient, - customRequest, - deleteApiKey, - DeleteApiKeyResponse, - deleteBy, - DeleteByFiltersOptions, - deleteDictionaryEntries, - deleteIndex, - deleteObject, - deleteObjects, - DeleteResponse, - deleteRule, - deleteSynonym, - DeleteSynonymOptions, - DictionaryEntriesOptions, - DictionaryEntriesResponse, - DictionaryEntry, - DictionaryName, - DictionarySettings, - exists, - findAnswers, - FindAnswersOptions, - FindAnswersResponse, - findObject, - FindObjectOptions, - FindObjectResponse, - generateSecuredApiKey, - getApiKey, - GetApiKeyResponse, - getAppTask, - getDictionarySettings, - GetDictionarySettingsResponse, - getLogs, - GetLogsResponse, - getObject, - GetObjectOptions, - getObjectPosition, - getObjects, - GetObjectsOptions, - GetObjectsResponse, - getRule, - getSecuredApiKeyRemainingValidity, - getSettings, - getSynonym, - getTopUserIDs, - GetTopUserIDsResponse, - getUserID, - hasPendingMappings, - HasPendingMappingsOptions, - HasPendingMappingsResponse, - IndexOperationResponse, - initIndex, - listApiKeys, - ListApiKeysResponse, - listClusters, - ListClustersResponse, - listIndices, - ListIndicesResponse, - listUserIDs, - ListUserIDsOptions, - ListUserIDsResponse, - moveIndex, - multipleBatch, - MultipleBatchRequest, - MultipleBatchResponse, - MultipleGetObject, - multipleGetObjects, - MultipleGetObjectsResponse, - multipleQueries, - MultipleQueriesOptions, - MultipleQueriesQuery, - MultipleQueriesResponse, - multipleSearchForFacetValues, - ObjectWithObjectID, - partialUpdateObject, - PartialUpdateObjectResponse, - partialUpdateObjects, - PartialUpdateObjectsOptions, - removeUserID, - RemoveUserIDResponse, - replaceAllObjects, - ReplaceAllObjectsOptions, - replaceAllRules, - replaceAllSynonyms, - replaceDictionaryEntries, - restoreApiKey, - RestoreApiKeyResponse, - Rule, - saveDictionaryEntries, - saveObject, - SaveObjectResponse, - saveObjects, - SaveObjectsOptions, - saveRule, - SaveRuleResponse, - saveRules, - SaveRulesOptions, - SaveRulesResponse, - saveSynonym, - SaveSynonymResponse, - saveSynonyms, - SaveSynonymsOptions, - SaveSynonymsResponse, - search, - SearchClient as BaseSearchClient, - searchDictionaryEntries, - SearchDictionaryEntriesResponse, - searchForFacetValues, - SearchForFacetValuesQueryParams, - SearchForFacetValuesResponse, - SearchIndex as BaseSearchIndex, - SearchOptions, - SearchResponse, - searchRules, - SearchRulesOptions, - searchSynonyms, - SearchSynonymsOptions, - SearchSynonymsResponse, - searchUserIDs, - SearchUserIDsOptions, - SearchUserIDsResponse, - SecuredApiKeyRestrictions, - setDictionarySettings, - setSettings, - SetSettingsResponse, - Settings, - Synonym, - TaskStatusResponse, - updateApiKey, - UpdateApiKeyOptions, - UpdateApiKeyResponse, - UserIDResponse, - waitAppTask, - waitTask, -} from '@algolia/client-search'; -import { createNullLogger } from '@algolia/logger-common'; -import { Destroyable } from '@algolia/requester-common'; -import { createNodeHttpRequester } from '@algolia/requester-node-http'; -import { createUserAgent, Request, RequestOptions } from '@algolia/transporter'; - -import { AlgoliaSearchOptions, InitAnalyticsOptions, InitPersonalizationOptions } from '../types'; - -export default function algoliasearch( - appId: string, - apiKey: string, - options?: AlgoliaSearchOptions -): SearchClient { - const commonOptions = { - appId, - apiKey, - timeouts: { - connect: 2, - read: 5, - write: 30, - }, - requester: createNodeHttpRequester(), - logger: createNullLogger(), - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createInMemoryCache(), - userAgent: createUserAgent(version).add({ - segment: 'Node.js', - version: process.versions.node, - }), - }; - const searchClientOptions = { ...commonOptions, ...options }; - const initPersonalization = () => ( - clientOptions?: InitPersonalizationOptions - ): PersonalizationClient => { - return createPersonalizationClient({ - ...commonOptions, - ...clientOptions, - methods: { - getPersonalizationStrategy, - setPersonalizationStrategy, - }, - }); - }; - - return createSearchClient({ - ...searchClientOptions, - methods: { - search: multipleQueries, - searchForFacetValues: multipleSearchForFacetValues, - multipleBatch, - multipleGetObjects, - multipleQueries, - copyIndex, - copySettings, - copyRules, - copySynonyms, - moveIndex, - listIndices, - getLogs, - listClusters, - multipleSearchForFacetValues, - getApiKey, - addApiKey, - listApiKeys, - updateApiKey, - deleteApiKey, - restoreApiKey, - assignUserID, - assignUserIDs, - getUserID, - searchUserIDs, - listUserIDs, - getTopUserIDs, - removeUserID, - hasPendingMappings, - generateSecuredApiKey, - getSecuredApiKeyRemainingValidity, - destroy, - clearDictionaryEntries, - deleteDictionaryEntries, - getDictionarySettings, - getAppTask, - replaceDictionaryEntries, - saveDictionaryEntries, - searchDictionaryEntries, - setDictionarySettings, - waitAppTask, - customRequest, - initIndex: base => (indexName: string): SearchIndex => { - return initIndex(base)(indexName, { - methods: { - batch, - delete: deleteIndex, - findAnswers, - getObject, - getObjects, - saveObject, - saveObjects, - search, - searchForFacetValues, - waitTask, - setSettings, - getSettings, - partialUpdateObject, - partialUpdateObjects, - deleteObject, - deleteObjects, - deleteBy, - clearObjects, - browseObjects, - getObjectPosition, - findObject, - exists, - saveSynonym, - saveSynonyms, - getSynonym, - searchSynonyms, - browseSynonyms, - deleteSynonym, - clearSynonyms, - replaceAllObjects, - replaceAllSynonyms, - searchRules, - getRule, - deleteRule, - saveRule, - saveRules, - replaceAllRules, - browseRules, - clearRules, - }, - }); - }, - initAnalytics: () => (clientOptions?: InitAnalyticsOptions): AnalyticsClient => { - return createAnalyticsClient({ - ...commonOptions, - ...clientOptions, - methods: { - addABTest, - getABTest, - getABTests, - stopABTest, - deleteABTest, - }, - }); - }, - initPersonalization, - initRecommendation: () => ( - clientOptions?: InitPersonalizationOptions - ): PersonalizationClient => { - searchClientOptions.logger.info( - 'The `initRecommendation` method is deprecated. Use `initPersonalization` instead.' - ); - - return initPersonalization()(clientOptions); - }, - }, - }); -} - -// eslint-disable-next-line functional/immutable-data -algoliasearch.version = version; - -export type PersonalizationClient = BasePersonalizationClient & { - readonly getPersonalizationStrategy: ( - requestOptions?: RequestOptions - ) => Readonly>; - readonly setPersonalizationStrategy: ( - personalizationStrategy: PersonalizationStrategy, - requestOptions?: RequestOptions - ) => Readonly>; -}; - -/** - * @deprecated Use `PersonalizationClient` instead. - */ -export type RecommendationClient = PersonalizationClient; - -export type AnalyticsClient = BaseAnalyticsClient & { - readonly addABTest: ( - abTest: ABTest, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getABTest: ( - abTestID: number, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getABTests: ( - requestOptions?: RequestOptions & GetABTestsOptions - ) => Readonly>; - readonly stopABTest: ( - abTestID: number, - requestOptions?: RequestOptions - ) => Readonly>; - readonly deleteABTest: ( - abTestID: number, - requestOptions?: RequestOptions - ) => Readonly>; -}; - -export type SearchIndex = BaseSearchIndex & { - readonly search: ( - query: string, - requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; - readonly searchForFacetValues: ( - facetName: string, - facetQuery: string, - requestOptions?: RequestOptions & SearchOptions - ) => Readonly>; - readonly findAnswers: ( - query: string, - queryLanguages: readonly string[], - requestOptions?: RequestOptions & FindAnswersOptions - ) => Readonly>>; - readonly batch: ( - requests: readonly BatchRequest[], - requestOptions?: RequestOptions - ) => Readonly>; - readonly delete: (requestOptions?: RequestOptions) => Readonly>; - readonly getObject: ( - objectID: string, - requestOptions?: RequestOptions & GetObjectOptions - ) => Readonly>; - readonly getObjects: ( - objectIDs: readonly string[], - requestOptions?: RequestOptions & GetObjectsOptions - ) => Readonly>>; - readonly saveObject: ( - object: Readonly>, - requestOptions?: RequestOptions & ChunkOptions & SaveObjectsOptions - ) => Readonly>; - readonly saveObjects: ( - objects: ReadonlyArray>>, - requestOptions?: RequestOptions & ChunkOptions & SaveObjectsOptions - ) => Readonly>; - readonly waitTask: (taskID: number, requestOptions?: RequestOptions) => Readonly>; - readonly setSettings: ( - settings: Settings, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getSettings: (requestOptions?: RequestOptions) => Readonly>; - readonly partialUpdateObject: ( - object: Record, - requestOptions?: RequestOptions & ChunkOptions & PartialUpdateObjectsOptions - ) => Readonly>; - readonly partialUpdateObjects: ( - objects: ReadonlyArray>, - requestOptions?: RequestOptions & ChunkOptions & PartialUpdateObjectsOptions - ) => Readonly>; - readonly deleteObject: ( - objectID: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly deleteObjects: ( - objectIDs: readonly string[], - requestOptions?: RequestOptions & ChunkOptions - ) => Readonly>; - readonly deleteBy: ( - filters: DeleteByFiltersOptions, - requestOptions?: RequestOptions - ) => Readonly>; - readonly clearObjects: ( - requestOptions?: RequestOptions - ) => Readonly>; - readonly browseObjects: ( - requestOptions?: SearchOptions & BrowseOptions & RequestOptions - ) => Readonly>; - readonly getObjectPosition: (searchResponse: SearchResponse<{}>, objectID: string) => number; - readonly findObject: ( - callback: (object: TObject & ObjectWithObjectID) => boolean, - requestOptions?: FindObjectOptions & RequestOptions - ) => Readonly>>; - readonly exists: (requestOptions?: RequestOptions) => Readonly>; - readonly saveSynonym: ( - synonym: Synonym, - requestOptions?: RequestOptions & SaveSynonymsOptions - ) => Readonly>; - readonly saveSynonyms: ( - synonyms: readonly Synonym[], - requestOptions?: SaveSynonymsOptions & RequestOptions - ) => Readonly>; - readonly getSynonym: ( - objectID: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly searchSynonyms: ( - query: string, - requestOptions?: SearchSynonymsOptions & RequestOptions - ) => Readonly>; - readonly browseSynonyms: ( - requestOptions?: SearchSynonymsOptions & BrowseOptions & RequestOptions - ) => Readonly>; - readonly deleteSynonym: ( - objectID: string, - requestOptions?: DeleteSynonymOptions & RequestOptions - ) => Readonly>; - readonly clearSynonyms: ( - requestOptions?: ClearSynonymsOptions & RequestOptions - ) => Readonly>; - readonly replaceAllObjects: ( - objects: ReadonlyArray>>, - requestOptions?: ReplaceAllObjectsOptions & ChunkOptions & SaveObjectsOptions & RequestOptions - ) => Readonly>; - readonly replaceAllSynonyms: ( - synonyms: readonly Synonym[], - requestOptions?: RequestOptions & - Pick< - SaveSynonymsOptions, - Exclude - > - ) => Readonly>; - readonly searchRules: ( - query: string, - requestOptions?: RequestOptions & SearchRulesOptions - ) => Readonly>>; - readonly getRule: (objectID: string, requestOptions?: RequestOptions) => Readonly>; - readonly deleteRule: ( - objectID: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly saveRule: ( - rule: Rule, - requestOptions?: RequestOptions & SaveRulesOptions - ) => Readonly>; - readonly saveRules: ( - rules: readonly Rule[], - requestOptions?: RequestOptions & SaveRulesOptions - ) => Readonly>; - readonly replaceAllRules: ( - rules: readonly Rule[], - requestOptions?: RequestOptions & SaveRulesOptions - ) => Readonly>; - readonly browseRules: ( - requestOptions?: SearchRulesOptions & BrowseOptions & RequestOptions - ) => Readonly>; - readonly clearRules: ( - requestOptions?: RequestOptions & ClearRulesOptions - ) => Readonly>; -}; - -export type SearchClient = BaseSearchClient & { - readonly initIndex: (indexName: string) => SearchIndex; - readonly search: ( - queries: readonly MultipleQueriesQuery[], - requestOptions?: RequestOptions & MultipleQueriesOptions - ) => Readonly>>; - readonly searchForFacetValues: ( - queries: ReadonlyArray<{ - readonly indexName: string; - readonly params: SearchForFacetValuesQueryParams & SearchOptions; - }>, - requestOptions?: RequestOptions - ) => Readonly>; - readonly multipleBatch: ( - requests: readonly MultipleBatchRequest[], - requestOptions?: RequestOptions - ) => Readonly>; - readonly multipleGetObjects: ( - requests: readonly MultipleGetObject[], - requestOptions?: RequestOptions - ) => Readonly>>; - readonly multipleQueries: ( - queries: readonly MultipleQueriesQuery[], - requestOptions?: RequestOptions & MultipleQueriesOptions - ) => Readonly>>; - readonly copyIndex: ( - from: string, - to: string, - requestOptions?: CopyIndexOptions & RequestOptions - ) => Readonly>; - readonly copySettings: ( - from: string, - to: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly copyRules: ( - from: string, - to: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly copySynonyms: ( - from: string, - to: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly moveIndex: ( - from: string, - to: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly listIndices: (requestOptions?: RequestOptions) => Readonly>; - readonly getLogs: (requestOptions?: RequestOptions) => Readonly>; - readonly listClusters: ( - requestOptions?: RequestOptions - ) => Readonly>; - readonly multipleSearchForFacetValues: ( - queries: ReadonlyArray<{ - readonly indexName: string; - readonly params: SearchForFacetValuesQueryParams & SearchOptions; - }>, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getApiKey: ( - apiKey: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly addApiKey: ( - acl: readonly ApiKeyACLType[], - requestOptions?: AddApiKeyOptions & - Pick> - ) => Readonly>; - readonly listApiKeys: (requestOptions?: RequestOptions) => Readonly>; - readonly updateApiKey: ( - apiKey: string, - requestOptions?: UpdateApiKeyOptions & - Pick> - ) => Readonly>; - readonly deleteApiKey: ( - apiKey: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly restoreApiKey: ( - apiKey: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly assignUserID: ( - userID: string, - clusterName: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly assignUserIDs: ( - userIDs: readonly string[], - clusterName: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getUserID: ( - userID: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly searchUserIDs: ( - query: string, - requestOptions?: SearchUserIDsOptions & RequestOptions - ) => Readonly>; - readonly listUserIDs: ( - requestOptions?: ListUserIDsOptions & RequestOptions - ) => Readonly>; - readonly getTopUserIDs: ( - requestOptions?: RequestOptions - ) => Readonly>; - readonly removeUserID: ( - userID: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly hasPendingMappings: ( - requestOptions?: HasPendingMappingsOptions & RequestOptions - ) => Readonly>; - readonly generateSecuredApiKey: ( - parentApiKey: string, - restrictions: SecuredApiKeyRestrictions - ) => string; - readonly getSecuredApiKeyRemainingValidity: (securedApiKey: string) => number; - readonly clearDictionaryEntries: ( - dictionary: DictionaryName, - requestOptions?: RequestOptions & DictionaryEntriesOptions - ) => Readonly>; - readonly deleteDictionaryEntries: ( - dictionary: DictionaryName, - objectIDs: readonly string[], - requestOptions?: RequestOptions & DictionaryEntriesOptions - ) => Readonly>; - readonly replaceDictionaryEntries: ( - dictionary: DictionaryName, - entries: readonly DictionaryEntry[], - requestOptions?: RequestOptions & DictionaryEntriesOptions - ) => Readonly>; - readonly saveDictionaryEntries: ( - dictionary: DictionaryName, - entries: readonly DictionaryEntry[], - requestOptions?: RequestOptions & DictionaryEntriesOptions - ) => Readonly>; - readonly searchDictionaryEntries: ( - dictionary: DictionaryName, - query: string, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getDictionarySettings: ( - requestOptions?: RequestOptions - ) => Readonly>; - readonly setDictionarySettings: ( - settings: DictionarySettings, - requestOptions?: RequestOptions - ) => Readonly>; - readonly getAppTask: ( - taskID: number, - requestOptions?: RequestOptions - ) => Readonly>; - readonly customRequest: ( - request: Request, - requestOptions?: RequestOptions - ) => Readonly>; - readonly initAnalytics: (options?: InitAnalyticsOptions) => AnalyticsClient; - readonly initPersonalization: (options?: InitPersonalizationOptions) => PersonalizationClient; - /** - * @deprecated Use `initPersonalization` instead. - */ - readonly initRecommendation: (options?: InitPersonalizationOptions) => PersonalizationClient; -} & Destroyable; - -export * from '../types'; diff --git a/packages/algoliasearch/src/index.ts b/packages/algoliasearch/src/index.ts deleted file mode 100644 index e067cd20c..000000000 --- a/packages/algoliasearch/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './types/index'; diff --git a/packages/algoliasearch/src/types/AlgoliaSearchOptions.ts b/packages/algoliasearch/src/types/AlgoliaSearchOptions.ts deleted file mode 100644 index 70ee0522a..000000000 --- a/packages/algoliasearch/src/types/AlgoliaSearchOptions.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { AnalyticsClientOptions } from '@algolia/client-analytics'; -import { ClientTransporterOptions } from '@algolia/client-common'; -import { PersonalizationClientOptions } from '@algolia/client-personalization'; -import { SearchClientOptions } from '@algolia/client-search'; - -type Credentials = { readonly appId: string; readonly apiKey: string }; -export type WithoutCredentials = Omit< - TClientOptions, - keyof Credentials ->; -export type OptionalCredentials = Omit< - TClientOptions, - keyof Credentials -> & - Pick, keyof Credentials>; - -export type AlgoliaSearchOptions = Partial & - WithoutCredentials; - -export type InitAnalyticsOptions = Partial & - OptionalCredentials; - -export type InitPersonalizationOptions = Partial & - OptionalCredentials; - -/** - * @deprecated Use `InitPersonalizationOptions` instead. - */ -export type InitRecommendationOptions = InitPersonalizationOptions; diff --git a/packages/algoliasearch/src/types/index.ts b/packages/algoliasearch/src/types/index.ts deleted file mode 100644 index 10c49a730..000000000 --- a/packages/algoliasearch/src/types/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './AlgoliaSearchOptions'; diff --git a/packages/algoliasearch/tsconfig.json b/packages/algoliasearch/tsconfig.json index 39df687c5..e1cd65291 100644 --- a/packages/algoliasearch/tsconfig.json +++ b/packages/algoliasearch/tsconfig.json @@ -1,10 +1,14 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "declaration": true, - "noEmit": false, - "allowJs": false, - "emitDeclarationOnly": true, - "outFile": "dist/types.d.ts" - } + "types": [ + "node", + "@cloudflare/workers-types", + "@cloudflare/vitest-pool-workers", + "vitest/globals" + ], + "outDir": "dist" + }, + "include": ["src", "model", "builds"], + "exclude": ["dist", "node_modules"] } diff --git a/packages/algoliasearch/tsup.config.ts b/packages/algoliasearch/tsup.config.ts new file mode 100644 index 000000000..cb1280dda --- /dev/null +++ b/packages/algoliasearch/tsup.config.ts @@ -0,0 +1,108 @@ +import type { Options } from 'tsup'; +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions, getDependencies } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +const nodeOptions: Options = { + ...getBaseNodeOptions(pkg, __dirname), + dts: { entry: { node: 'lite/builds/node.ts' } }, + entry: ['lite/builds/node.ts', 'lite/src/*.ts'], + outDir: 'dist/lite', +}; + +const nodeConfigs: Options[] = [ + { + ...nodeOptions, + format: 'cjs', + name: `node ${pkg.name} cjs`, + }, + { + ...nodeOptions, + format: 'esm', + name: `node ${pkg.name} esm`, + }, + { + ...nodeOptions, + format: 'cjs', + name: 'node algoliasearch cjs', + dts: { entry: { node: 'builds/node.ts' } }, + entry: ['builds/node.ts'], + outDir: 'dist', + }, + { + ...nodeOptions, + format: 'esm', + name: 'node algoliasearch esm', + dts: { entry: { node: 'builds/node.ts' } }, + entry: ['builds/node.ts'], + outDir: 'dist', + }, + { + ...nodeOptions, + format: 'esm', + name: 'fetch algoliasearch esm', + dts: { entry: { fetch: 'builds/fetch.ts' } }, + entry: ['builds/fetch.ts'], + outDir: 'dist', + external: getDependencies(pkg, 'fetch'), + }, + { + ...nodeOptions, + format: 'esm', + name: 'worker algoliasearch esm', + dts: { entry: { worker: 'builds/worker.ts' } }, + entry: ['builds/worker.ts'], + outDir: 'dist', + external: getDependencies(pkg, 'worker'), + }, +]; + +const browserOptions: Options = { + ...getBaseBrowserOptions(pkg, __dirname), + globalName: 'lite', + outDir: 'dist/lite', +}; + +const browserConfigs: Options[] = [ + { + ...browserOptions, + minify: false, + name: `browser ${pkg.name} esm`, + dts: { entry: { browser: 'lite/builds/browser.ts' } }, + entry: ['lite/builds/browser.ts', 'lite/src/*.ts'], + external: ['dom', '@algolia/client-common', '@algolia/requester-browser-xhr'], + }, + { + ...browserOptions, + dts: false, + minify: true, + name: `browser ${pkg.name} min esm`, + entry: { 'builds/browser.min': 'lite/builds/browser.ts' }, + external: [], + noExternal: ['dom', '@algolia/client-common', '@algolia/requester-browser-xhr'], + }, + { + ...browserOptions, + name: 'algoliasearch esm', + globalName: 'algoliasearch', + dts: { entry: { browser: 'builds/browser.ts' } }, + entry: ['builds/browser.ts'], + outDir: 'dist', + minify: false, + }, + { + ...browserOptions, + name: 'algoliasearch min esm', + globalName: 'algoliasearch', + dts: false, + minify: true, + entry: { 'browser.min': 'builds/browser.ts' }, + outDir: 'dist', + external: [], + noExternal: getDependencies(pkg, 'xhr'), + }, +]; + +export default defineConfig([...nodeConfigs, ...browserConfigs]); diff --git a/packages/algoliasearch/vitest.workspace.ts b/packages/algoliasearch/vitest.workspace.ts new file mode 100644 index 000000000..c3391052e --- /dev/null +++ b/packages/algoliasearch/vitest.workspace.ts @@ -0,0 +1,56 @@ +import { defineWorkersConfig } from '@cloudflare/vitest-pool-workers/config'; + +export default defineWorkersConfig([ + { + resolve: { + alias: { + '@algolia/client-search': '../../client-search/builds/node', + }, + }, + test: { + include: ['__tests__/algoliasearch.node.test.ts'], + name: 'node', + environment: 'node', + }, + }, + { + resolve: { + alias: { + '@algolia/client-search': '../../client-search/builds/browser', + }, + }, + test: { + include: ['__tests__/algoliasearch.browser.test.ts', '__tests__/algoliasearch.common.test.ts'], + name: 'jsdom', + environment: 'jsdom', + }, + }, + { + resolve: { + alias: { + '@algolia/client-search': '../../client-search/builds/fetch', + }, + }, + test: { + include: ['__tests__/algoliasearch.fetch.test.ts'], + name: 'miniflare fetch', + poolOptions: { + workers: {}, + }, + }, + }, + { + resolve: { + alias: { + '@algolia/client-search': '../../client-search/builds/worker', + }, + }, + test: { + include: ['__tests__/algoliasearch.worker.test.ts'], + name: 'miniflare worker', + poolOptions: { + workers: {}, + }, + }, + }, +]); diff --git a/packages/cache-browser-local-storage/api-extractor.json b/packages/cache-browser-local-storage/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/cache-browser-local-storage/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/cache-browser-local-storage/index.js b/packages/cache-browser-local-storage/index.js deleted file mode 100644 index 618c06181..000000000 --- a/packages/cache-browser-local-storage/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/cache-browser-local-storage.cjs.js'); diff --git a/packages/cache-browser-local-storage/package.json b/packages/cache-browser-local-storage/package.json deleted file mode 100644 index e5ef00366..000000000 --- a/packages/cache-browser-local-storage/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "@algolia/cache-browser-local-storage", - "version": "4.13.1", - "private": false, - "description": "Promise-based cache library for browser using local storage.", - "repository": { - "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-javascript.git" - }, - "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/cache-browser-local-storage.esm.js", - "types": "dist/cache-browser-local-storage.d.ts", - "files": [ - "index.js", - "dist" - ], - "dependencies": { - "@algolia/cache-common": "4.13.1" - } -} diff --git a/packages/cache-browser-local-storage/src/__tests__/unit/browser-local-storage-cache.test.ts b/packages/cache-browser-local-storage/src/__tests__/unit/browser-local-storage-cache.test.ts deleted file mode 100644 index 70e90b8ef..000000000 --- a/packages/cache-browser-local-storage/src/__tests__/unit/browser-local-storage-cache.test.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { version } from '@algolia/client-common'; - -import { createBrowserLocalStorageCache } from '../..'; - -const notAvailableStorage: Storage = new Proxy(window.localStorage || {}, { - get() { - return () => { - throw new Error('Component is not available'); - }; - }, -}); - -describe('browser local storage cache', () => { - beforeEach(() => window.localStorage.clear()); - - it('sets/gets values', async () => { - const cache = createBrowserLocalStorageCache({ key: version }); - - const defaultValue = () => Promise.resolve({ bar: 1 }); - - const missMock = jest.fn(); - - expect( - await cache.get({ key: 'foo' }, defaultValue, { - miss: () => Promise.resolve(missMock()), - }) - ).toMatchInlineSnapshot(` - Object { - "bar": 1, - } - `); - - expect(missMock.mock.calls.length).toBe(1); - - await cache.set({ key: 'foo' }, { foo: 2 }); - - expect( - await cache.get({ key: 'foo' }, defaultValue, { - miss: () => Promise.resolve(missMock()), - }) - ).toMatchObject({ foo: 2 }); - - expect(missMock.mock.calls.length).toBe(1); - }); - - it('deletes keys', async () => { - const cache = createBrowserLocalStorageCache({ key: version }); - await cache.set({ key: 'foo' }, { bar: 1 }); - - await cache.delete({ key: 'foo' }); - - const defaultValue = () => Promise.resolve({ bar: 2 }); - - const missMock = jest.fn(); - - expect( - await cache.get({ key: 'foo' }, defaultValue, { - miss: () => Promise.resolve(missMock()), - }) - ).toMatchObject({ bar: 2 }); - - expect(missMock.mock.calls.length).toBe(1); - }); - - it('can be cleared', async () => { - const cache = createBrowserLocalStorageCache({ key: version }); - await cache.set({ key: 'foo' }, { bar: 1 }); - - await cache.clear(); - - const defaultValue = () => Promise.resolve({ bar: 2 }); - - const missMock = jest.fn(); - - expect( - await cache.get({ key: 'foo' }, defaultValue, { - miss: () => Promise.resolve(missMock()), - }) - ).toMatchObject({ bar: 2 }); - - expect(missMock.mock.calls.length).toBe(1); - - expect(localStorage.length).toBe(0); - }); - - it('do throws localstorage exceptions on access', async () => { - const message = - "Failed to read the 'localStorage' property from 'Window': Access is denied for this document."; - - const cache = createBrowserLocalStorageCache( - new Proxy( - { key: 'foo' }, - { - get(_, key) { - if (key === 'key') { - return 'foo'; - } - - // Simulates a window.localStorage access. - throw new DOMException(message); - }, - } - ) - ); - const key = { foo: 'bar' }; - const value = 'foo'; - const fallback = 'bar'; - - await expect(cache.delete(key)).rejects.toEqual(new DOMException(message)); - await expect(cache.set(key, value)).rejects.toEqual(new DOMException(message)); - await expect(cache.get(key, () => Promise.resolve(fallback))).rejects.toEqual( - new DOMException(message) - ); - }); - - it('do throws localstorage exceptions after access', async () => { - const cache = createBrowserLocalStorageCache({ - key: version, - localStorage: notAvailableStorage, - }); - const key = { foo: 'bar' }; - const value = 'foo'; - const fallback = 'bar'; - - const message = 'Component is not available'; - await expect(cache.delete(key)).rejects.toEqual(new Error(message)); - await expect(cache.set(key, value)).rejects.toEqual(new Error(message)); - await expect(cache.get(key, () => Promise.resolve(fallback))).rejects.toEqual( - new Error(message) - ); - }); - it('creates a namespace within local storage', async () => { - const cache = createBrowserLocalStorageCache({ - key: version, - }); - const key = { foo: 'bar' }; - const value = 'foo'; - expect(localStorage.getItem(`algoliasearch-client-js-${version}`)).toBeNull(); - - await cache.set(key, value); - - expect(localStorage.getItem(`algoliasearch-client-js-${version}`)).toBe( - '{"{\\"foo\\":\\"bar\\"}":"foo"}' - ); - }); -}); diff --git a/packages/cache-browser-local-storage/src/createBrowserLocalStorageCache.ts b/packages/cache-browser-local-storage/src/createBrowserLocalStorageCache.ts deleted file mode 100644 index 50738c413..000000000 --- a/packages/cache-browser-local-storage/src/createBrowserLocalStorageCache.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { Cache, CacheEvents } from '@algolia/cache-common'; - -import { BrowserLocalStorageOptions } from '.'; - -export function createBrowserLocalStorageCache(options: BrowserLocalStorageOptions): Cache { - const namespaceKey = `algoliasearch-client-js-${options.key}`; - - // eslint-disable-next-line functional/no-let - let storage: Storage; - const getStorage = () => { - if (storage === undefined) { - storage = options.localStorage || window.localStorage; - } - - return storage; - }; - - const getNamespace = (): Record => { - return JSON.parse(getStorage().getItem(namespaceKey) || '{}'); - }; - - return { - get( - key: object | string, - defaultValue: () => Readonly>, - events: CacheEvents = { - miss: () => Promise.resolve(), - } - ): Readonly> { - return Promise.resolve() - .then(() => { - const keyAsString = JSON.stringify(key); - const value = getNamespace()[keyAsString]; - - return Promise.all([value || defaultValue(), value !== undefined]); - }) - .then(([value, exists]) => { - return Promise.all([value, exists || events.miss(value)]); - }) - .then(([value]) => value); - }, - - set(key: object | string, value: TValue): Readonly> { - return Promise.resolve().then(() => { - const namespace = getNamespace(); - - // eslint-disable-next-line functional/immutable-data - namespace[JSON.stringify(key)] = value; - - getStorage().setItem(namespaceKey, JSON.stringify(namespace)); - - return value; - }); - }, - - delete(key: object | string): Readonly> { - return Promise.resolve().then(() => { - const namespace = getNamespace(); - - // eslint-disable-next-line functional/immutable-data - delete namespace[JSON.stringify(key)]; - - getStorage().setItem(namespaceKey, JSON.stringify(namespace)); - }); - }, - - clear(): Readonly> { - return Promise.resolve().then(() => { - getStorage().removeItem(namespaceKey); - }); - }, - }; -} diff --git a/packages/cache-browser-local-storage/src/index.ts b/packages/cache-browser-local-storage/src/index.ts deleted file mode 100644 index 0ee7b2c24..000000000 --- a/packages/cache-browser-local-storage/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createBrowserLocalStorageCache'; -export * from './types/index'; diff --git a/packages/cache-browser-local-storage/src/types/BrowserLocalStorageOptions.ts b/packages/cache-browser-local-storage/src/types/BrowserLocalStorageOptions.ts deleted file mode 100644 index 3652a4728..000000000 --- a/packages/cache-browser-local-storage/src/types/BrowserLocalStorageOptions.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type BrowserLocalStorageOptions = { - /** - * The cache key. - */ - readonly key: string; - - /** - * The native local storage implementation. - */ - readonly localStorage?: Storage; -}; diff --git a/packages/cache-browser-local-storage/src/types/index.ts b/packages/cache-browser-local-storage/src/types/index.ts deleted file mode 100644 index b8ae5a2ae..000000000 --- a/packages/cache-browser-local-storage/src/types/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './BrowserLocalStorageOptions'; diff --git a/packages/cache-common/api-extractor.json b/packages/cache-common/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/cache-common/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/cache-common/index.js b/packages/cache-common/index.js deleted file mode 100644 index b121ae501..000000000 --- a/packages/cache-common/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/cache-common.cjs.js'); diff --git a/packages/cache-common/package.json b/packages/cache-common/package.json deleted file mode 100644 index f477a1f79..000000000 --- a/packages/cache-common/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "@algolia/cache-common", - "version": "4.13.1", - "private": false, - "description": "Common interfaces for promise-based caching libraries", - "repository": { - "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-js.git" - }, - "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/cache-common.esm.js", - "types": "dist/cache-common.d.ts", - "files": [ - "index.js", - "dist" - ] -} diff --git a/packages/cache-common/src/__tests__/unit/fallbackable-cache.test.ts b/packages/cache-common/src/__tests__/unit/fallbackable-cache.test.ts deleted file mode 100644 index d4c5d187a..000000000 --- a/packages/cache-common/src/__tests__/unit/fallbackable-cache.test.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { createBrowserLocalStorageCache } from '@algolia/cache-browser-local-storage'; -import { createNullCache } from '@algolia/cache-common'; -import { createInMemoryCache } from '@algolia/cache-in-memory'; -import { version } from '@algolia/client-common'; - -import { createFallbackableCache } from '../../createFallbackableCache'; - -const notAvailableStorage: Storage = new Proxy(window.localStorage || {}, { - get() { - return () => { - throw new Error('Component is not available'); - }; - }, -}); - -describe('fallbackable cache', () => { - const key = { 1: 2 }; - const value = { 3: 4 }; - it('always fallback in null cache', async () => { - const cache = createFallbackableCache({ caches: [] }); - - await cache.set(key, value); - expect(await cache.get(key, () => Promise.resolve({ 5: 6 }))).toEqual({ - 5: 6, - }); - }); - - it('uses given caches on the given order', async () => { - // Should use in memory cache - { - const cache = createFallbackableCache({ - caches: [createInMemoryCache()], - }); - - await cache.set(key, value); - expect(await cache.get(key, () => Promise.resolve({ 5: 6 }))).toEqual({ - 3: 4, - }); - } - - // Should use null cache first - { - const cache = createFallbackableCache({ - caches: [createNullCache(), createInMemoryCache()], - }); - - await cache.set(key, value); - expect(await cache.get(key, () => Promise.resolve({ 5: 6 }))).toEqual({ - 5: 6, - }); - } - }); - - it('fallbacks on given caches', async () => { - // Should fallback on in memory cache - { - const cache = createFallbackableCache({ - caches: [ - createBrowserLocalStorageCache({ - key: version, - localStorage: {} as any, // this will make the cache fail, and normally we fallback on in memory cache - }), - createInMemoryCache(), - ], - }); - - await cache.set(key, value); - expect(await cache.get(key, () => Promise.resolve({ 5: 6 }))).toEqual({ - 3: 4, - }); - } - - // Should fallback on null cache - { - const cache = createFallbackableCache({ - caches: [ - createBrowserLocalStorageCache({ - key: version, - localStorage: {} as any, // this will make the cache fail due an type error, and normally we fallback on in memory cache - }), - ], - }); - - await cache.set(key, value); - expect(await cache.get(key, () => Promise.resolve({ 5: 6 }))).toEqual({ - 5: 6, - }); - } - - // Should fallback on in memory cache - { - const cache = createFallbackableCache({ - caches: [ - createBrowserLocalStorageCache({ - key: version, - localStorage: {} as any, // this will make the cache fail due an type error, and normally we fallback on in memory cache - }), - createBrowserLocalStorageCache({ - key: version, - localStorage: notAvailableStorage, // this will make the cache fail due localStorage not available - }), - createInMemoryCache(), - ], - }); - - await cache.set(key, value); - expect(await cache.get(key, () => Promise.resolve({ 5: 6 }))).toEqual({ - 3: 4, - }); - - await cache.clear(); - expect(await cache.get(key, () => Promise.resolve({ 5: 6 }))).toEqual({ - 5: 6, - }); - } - }); -}); diff --git a/packages/cache-common/src/__tests__/unit/null-cache.test.ts b/packages/cache-common/src/__tests__/unit/null-cache.test.ts deleted file mode 100644 index beffdd24b..000000000 --- a/packages/cache-common/src/__tests__/unit/null-cache.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { createNullCache } from '../..'; - -describe('null cache', () => { - const cache = createNullCache(); - - it('does not set value', async () => { - await cache.set({ key: 'key' }, { foo: 10 }); - - const defaultValue = Promise.resolve({ - foo: 12, - }); - - const missMock = jest.fn(); - - expect( - await cache.get({ key: 'key' }, () => defaultValue, { - miss: () => Promise.resolve(missMock()), - }) - ).toMatchObject({ - foo: 12, - }); - - // Always call miss - expect(missMock.mock.calls.length).toBe(1); - }); - - it('returns default value', async () => { - const defaultValue = Promise.resolve({ - foo: 12, - }); - - const missMock = jest.fn(); - - expect( - await cache.get({ foo: 'foo' }, () => defaultValue, { - miss: () => Promise.resolve(missMock()), - }) - ).toMatchObject({ - foo: 12, - }); - - expect(missMock.mock.calls.length).toBe(1); - }); - - it('can be deleted', async () => { - await cache.delete('foo'); - }); - - it('can be cleared', async () => { - await cache.clear(); - }); -}); diff --git a/packages/cache-common/src/createFallbackableCache.ts b/packages/cache-common/src/createFallbackableCache.ts deleted file mode 100644 index beba209eb..000000000 --- a/packages/cache-common/src/createFallbackableCache.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Cache, CacheEvents, createNullCache } from '.'; -import { FallbackableCacheOptions } from './types/FallbackableCacheOptions'; - -// @todo Add logger on options to debug when caches go wrong. -export function createFallbackableCache(options: FallbackableCacheOptions): Cache { - const caches = [...options.caches]; - const current = caches.shift(); // eslint-disable-line functional/immutable-data - - if (current === undefined) { - return createNullCache(); - } - - return { - get( - key: object | string, - defaultValue: () => Readonly>, - events: CacheEvents = { - miss: () => Promise.resolve(), - } - ): Readonly> { - return current.get(key, defaultValue, events).catch(() => { - return createFallbackableCache({ caches }).get(key, defaultValue, events); - }); - }, - - set(key: object | string, value: TValue): Readonly> { - return current.set(key, value).catch(() => { - return createFallbackableCache({ caches }).set(key, value); - }); - }, - - delete(key: object | string): Readonly> { - return current.delete(key).catch(() => { - return createFallbackableCache({ caches }).delete(key); - }); - }, - - clear(): Readonly> { - return current.clear().catch(() => { - return createFallbackableCache({ caches }).clear(); - }); - }, - }; -} diff --git a/packages/cache-common/src/createNullCache.ts b/packages/cache-common/src/createNullCache.ts deleted file mode 100644 index 6e3b17891..000000000 --- a/packages/cache-common/src/createNullCache.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Cache, CacheEvents } from '.'; - -export function createNullCache(): Cache { - return { - get( - _key: object | string, - defaultValue: () => Readonly>, - events: CacheEvents = { - miss: () => Promise.resolve(), - } - ): Readonly> { - const value = defaultValue(); - - return value - .then(result => Promise.all([result, events.miss(result)])) - .then(([result]) => result); - }, - - set(_key: object | string, value: TValue): Readonly> { - return Promise.resolve(value); - }, - - delete(_key: object | string): Readonly> { - return Promise.resolve(); - }, - - clear(): Readonly> { - return Promise.resolve(); - }, - }; -} diff --git a/packages/cache-common/src/index.ts b/packages/cache-common/src/index.ts deleted file mode 100644 index de46255ed..000000000 --- a/packages/cache-common/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createFallbackableCache'; -export * from './createNullCache'; -export * from './types/index'; diff --git a/packages/cache-common/src/types/Cache.ts b/packages/cache-common/src/types/Cache.ts deleted file mode 100644 index f88453e7e..000000000 --- a/packages/cache-common/src/types/Cache.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { CacheEvents } from '.'; - -export type Cache = { - /** - * Gets the value of the given `key`. - */ - readonly get: ( - key: object | string, - defaultValue: () => Readonly>, - events?: CacheEvents - ) => Readonly>; - - /** - * Sets the given value with the given `key`. - */ - readonly set: (key: object | string, value: TValue) => Readonly>; - - /** - * Deletes the given `key`. - */ - readonly delete: (key: object | string) => Readonly>; - - /** - * Clears the cache. - */ - readonly clear: () => Readonly>; -}; diff --git a/packages/cache-common/src/types/CacheEvents.ts b/packages/cache-common/src/types/CacheEvents.ts deleted file mode 100644 index 0a3ae5e76..000000000 --- a/packages/cache-common/src/types/CacheEvents.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type CacheEvents = { - /** - * The callback when the given `key` is missing from the cache. - */ - readonly miss: (value: TValue) => Readonly>; -}; diff --git a/packages/cache-common/src/types/FallbackableCacheOptions.ts b/packages/cache-common/src/types/FallbackableCacheOptions.ts deleted file mode 100644 index a80aeb41d..000000000 --- a/packages/cache-common/src/types/FallbackableCacheOptions.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Cache } from '@algolia/cache-common'; - -export type FallbackableCacheOptions = { - /** - * List of caches order by priority. - */ - readonly caches: readonly Cache[]; -}; diff --git a/packages/cache-common/src/types/index.ts b/packages/cache-common/src/types/index.ts deleted file mode 100644 index 1c27dbefa..000000000 --- a/packages/cache-common/src/types/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './Cache'; -export * from './CacheEvents'; -export * from './FallbackableCacheOptions'; diff --git a/packages/cache-in-memory/api-extractor.json b/packages/cache-in-memory/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/cache-in-memory/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/cache-in-memory/index.js b/packages/cache-in-memory/index.js deleted file mode 100644 index 14ac87838..000000000 --- a/packages/cache-in-memory/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/cache-in-memory.cjs.js'); diff --git a/packages/cache-in-memory/package.json b/packages/cache-in-memory/package.json deleted file mode 100644 index e2470b3db..000000000 --- a/packages/cache-in-memory/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "@algolia/cache-in-memory", - "version": "4.13.1", - "private": false, - "description": "Promise-based cache library using memory.", - "repository": { - "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-javascript.git" - }, - "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/cache-in-memory.esm.js", - "types": "dist/cache-in-memory.d.ts", - "files": [ - "index.js", - "dist" - ], - "dependencies": { - "@algolia/cache-common": "4.13.1" - } -} diff --git a/packages/cache-in-memory/src/__tests__/unit/in-memory-cache.test.ts b/packages/cache-in-memory/src/__tests__/unit/in-memory-cache.test.ts deleted file mode 100644 index 3adb03fd8..000000000 --- a/packages/cache-in-memory/src/__tests__/unit/in-memory-cache.test.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { createInMemoryCache } from '../..'; - -describe('in memory cache', () => { - it('sets/gets values', async () => { - const cache = createInMemoryCache(); - - const defaultValue = () => Promise.resolve({ bar: 1 }); - - const missMock = jest.fn(); - - expect( - await cache.get({ key: 'foo' }, defaultValue, { - miss: () => Promise.resolve(missMock()), - }) - ).toMatchInlineSnapshot(` - Object { - "bar": 1, - } - `); - - await cache.set({ key: 'foo' }, { foo: 2 }); - - expect(missMock.mock.calls.length).toBe(1); - - expect( - await cache.get({ key: 'foo' }, defaultValue, { - miss: () => Promise.resolve(missMock()), - }) - ).toMatchObject({ foo: 2 }); - - expect(missMock.mock.calls.length).toBe(1); - }); - - it('getted values do not have references to the value on cache', async () => { - const cache = createInMemoryCache(); - - const key = { foo: 'bar' }; - const obj = { 1: { 2: 'bar' } }; - const defaultObj = { 1: { 2: 'too' } }; - - await cache.set(key, obj); - const gettedValue = await cache.get(key, () => Promise.resolve(defaultObj)); - gettedValue[1][2] = 'foo'; - - expect(await cache.get(key, () => Promise.resolve(defaultObj))).toEqual({ - 1: { 2: 'bar' }, - }); - }); - - it('deletes keys', async () => { - const cache = createInMemoryCache(); - await cache.set({ key: 'foo' }, { bar: 1 }); - - await cache.delete({ key: 'foo' }); - - const defaultValue = () => Promise.resolve({ bar: 2 }); - - const missMock = jest.fn(); - - expect( - await cache.get({ key: 'foo' }, defaultValue, { - miss: () => Promise.resolve(missMock()), - }) - ).toMatchObject({ bar: 2 }); - - expect(missMock.mock.calls.length).toBe(1); - }); - - it('can be cleared', async () => { - const cache = createInMemoryCache(); - await cache.set({ key: 'foo' }, { bar: 1 }); - - await cache.clear(); - - const defaultValue = () => Promise.resolve({ bar: 2 }); - - const missMock = jest.fn(); - - expect( - await cache.get({ key: 'foo' }, defaultValue, { - miss: () => Promise.resolve(missMock()), - }) - ).toMatchObject({ bar: 2 }); - - expect(missMock.mock.calls.length).toBe(1); - }); - - it('do not force promise based api for clearing cache', async () => { - const cache = createInMemoryCache(); - cache.set({ key: 'foo' }, { bar: 1 }); - - cache.clear(); - - const defaultValue = () => Promise.resolve({ bar: 2 }); - - const missMock = jest.fn(); - - expect( - await cache.get({ key: 'foo' }, defaultValue, { - miss: () => Promise.resolve(missMock()), - }) - ).toMatchObject({ bar: 2 }); - - expect(missMock.mock.calls.length).toBe(1); - }); -}); diff --git a/packages/cache-in-memory/src/createInMemoryCache.ts b/packages/cache-in-memory/src/createInMemoryCache.ts deleted file mode 100644 index 085cd07b0..000000000 --- a/packages/cache-in-memory/src/createInMemoryCache.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Cache, CacheEvents } from '@algolia/cache-common'; - -import { InMemoryCacheOptions } from '.'; - -export function createInMemoryCache(options: InMemoryCacheOptions = { serializable: true }): Cache { - // eslint-disable-next-line functional/no-let - let cache: Record = {}; - - return { - get( - key: object | string, - defaultValue: () => Readonly>, - events: CacheEvents = { - miss: () => Promise.resolve(), - } - ): Readonly> { - const keyAsString = JSON.stringify(key); - - if (keyAsString in cache) { - return Promise.resolve( - options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString] - ); - } - - const promise = defaultValue(); - const miss = (events && events.miss) || (() => Promise.resolve()); - - return promise.then((value: TValue) => miss(value)).then(() => promise); - }, - - set(key: object | string, value: TValue): Readonly> { - // eslint-disable-next-line functional/immutable-data - cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value; - - return Promise.resolve(value); - }, - - delete(key: object | string): Readonly> { - // eslint-disable-next-line functional/immutable-data - delete cache[JSON.stringify(key)]; - - return Promise.resolve(); - }, - - clear(): Readonly> { - cache = {}; - - return Promise.resolve(); - }, - }; -} diff --git a/packages/cache-in-memory/src/index.ts b/packages/cache-in-memory/src/index.ts deleted file mode 100644 index d31542b11..000000000 --- a/packages/cache-in-memory/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createInMemoryCache'; -export * from './types/index'; diff --git a/packages/cache-in-memory/src/types/InMemoryCacheOptions.ts b/packages/cache-in-memory/src/types/InMemoryCacheOptions.ts deleted file mode 100644 index f6bbaf9a5..000000000 --- a/packages/cache-in-memory/src/types/InMemoryCacheOptions.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type InMemoryCacheOptions = { - /** - * If keys and values should be serialized using `JSON.stringify`. - */ - readonly serializable?: boolean; -}; diff --git a/packages/cache-in-memory/src/types/index.ts b/packages/cache-in-memory/src/types/index.ts deleted file mode 100644 index 0e5fd0665..000000000 --- a/packages/cache-in-memory/src/types/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './InMemoryCacheOptions'; diff --git a/packages/client-abtesting/LICENSE b/packages/client-abtesting/LICENSE new file mode 100644 index 000000000..fddf416f9 --- /dev/null +++ b/packages/client-abtesting/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-Present Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/client-abtesting/README.md b/packages/client-abtesting/README.md new file mode 100644 index 000000000..03da32f72 --- /dev/null +++ b/packages/client-abtesting/README.md @@ -0,0 +1,77 @@ +

+ + Algolia for JavaScript + + +

The perfect starting point to integrate Algolia within your JavaScript project

+ +

+ NPM version + NPM downloads + jsDelivr Downloads + License +

+

+ +

+ Documentation • + InstantSearch • + Community Forum • + Stack Overflow • + Report a bug • + FAQ • + Support +

+ +## ✨ Features + +- Thin & **minimal low-level HTTP client** to interact with Algolia's API +- Works both on the **browser** and **node.js** +- **UMD and ESM compatible**, you can use it with any module loader +- Built with TypeScript + +## 💡 Getting Started + +> [!TIP] +> This API client is already a dependency of [the algoliasearch client](https://www.npmjs.com/package/algoliasearch), you don't need to manually install `@algolia/client-abtesting` if you already have `algoliasearch` installed. + +To get started, you first need to install @algolia/client-abtesting (or any other available API client package). +All of our clients comes with type definition, and are available for both browser and node environments. + +### With a package manager + +```bash +yarn add @algolia/client-abtesting@5.23.3 +# or +npm install @algolia/client-abtesting@5.23.3 +# or +pnpm add @algolia/client-abtesting@5.23.3 +``` + +### Without a package manager + +Add the following JavaScript snippet to the of your website: + +```html + +``` + +### Usage + +You can now import the Algolia API client in your project and play with it. + +```js +import { abtestingClient } from '@algolia/client-abtesting'; + +const client = abtestingClient('YOUR_APP_ID', 'YOUR_API_KEY'); +``` + +For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/javascript/v5/methods/abtesting/)**. + +## ❓ Troubleshooting + +Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/libraries/javascript/v5/) where you will find answers for the most common issues and gotchas with the client. You can also open [a GitHub issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=&projects=&template=Bug_report.md) + +## 📄 License + +The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). diff --git a/packages/client-abtesting/builds/browser.ts b/packages/client-abtesting/builds/browser.ts new file mode 100644 index 000000000..27c6f8da5 --- /dev/null +++ b/packages/client-abtesting/builds/browser.ts @@ -0,0 +1,65 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import { createXhrRequester } from '@algolia/requester-browser-xhr'; + +import { + createBrowserLocalStorageCache, + createFallbackableCache, + createMemoryCache, + createNullLogger, +} from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { apiClientVersion, createAbtestingClient } from '../src/abtestingClient'; + +import type { Region } from '../src/abtestingClient'; +import { REGIONS } from '../src/abtestingClient'; + +export type { Region, RegionOptions } from '../src/abtestingClient'; + +export { apiClientVersion } from '../src/abtestingClient'; + +export * from '../model'; + +export function abtestingClient( + appId: string, + apiKey: string, + region?: Region, + options?: ClientOptions, +): AbtestingClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (region && (typeof region !== 'string' || !REGIONS.includes(region))) { + throw new Error(`\`region\` must be one of the following: ${REGIONS.join(', ')}`); + } + + return createAbtestingClient({ + appId, + apiKey, + region, + timeouts: { + connect: 1000, + read: 2000, + write: 30000, + }, + logger: createNullLogger(), + requester: createXhrRequester(), + algoliaAgents: [{ segment: 'Browser' }], + authMode: 'WithinQueryParameters', + responsesCache: createMemoryCache(), + requestsCache: createMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], + }), + ...options, + }); +} + +export type AbtestingClient = ReturnType; diff --git a/packages/client-abtesting/builds/fetch.ts b/packages/client-abtesting/builds/fetch.ts new file mode 100644 index 000000000..172847827 --- /dev/null +++ b/packages/client-abtesting/builds/fetch.ts @@ -0,0 +1,58 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AbtestingClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createAbtestingClient } from '../src/abtestingClient'; + +import type { Region } from '../src/abtestingClient'; +import { REGIONS } from '../src/abtestingClient'; + +export type { Region, RegionOptions } from '../src/abtestingClient'; + +export { apiClientVersion } from '../src/abtestingClient'; + +export * from '../model'; + +export function abtestingClient( + appId: string, + apiKey: string, + region?: Region, + options?: ClientOptions, +): AbtestingClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (region && (typeof region !== 'string' || !REGIONS.includes(region))) { + throw new Error(`\`region\` must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createAbtestingClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Fetch' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-abtesting/builds/node.ts b/packages/client-abtesting/builds/node.ts new file mode 100644 index 000000000..ae808e6a1 --- /dev/null +++ b/packages/client-abtesting/builds/node.ts @@ -0,0 +1,59 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AbtestingClient = ReturnType; + +import { createHttpRequester } from '@algolia/requester-node-http'; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createAbtestingClient } from '../src/abtestingClient'; + +import type { Region } from '../src/abtestingClient'; +import { REGIONS } from '../src/abtestingClient'; + +export type { Region, RegionOptions } from '../src/abtestingClient'; + +export { apiClientVersion } from '../src/abtestingClient'; + +export * from '../model'; + +export function abtestingClient( + appId: string, + apiKey: string, + region?: Region, + options?: ClientOptions, +): AbtestingClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (region && (typeof region !== 'string' || !REGIONS.includes(region))) { + throw new Error(`\`region\` must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createAbtestingClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createHttpRequester(), + algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-abtesting/builds/worker.ts b/packages/client-abtesting/builds/worker.ts new file mode 100644 index 000000000..7bc7aad9c --- /dev/null +++ b/packages/client-abtesting/builds/worker.ts @@ -0,0 +1,58 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AbtestingClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createAbtestingClient } from '../src/abtestingClient'; + +import type { Region } from '../src/abtestingClient'; +import { REGIONS } from '../src/abtestingClient'; + +export type { Region, RegionOptions } from '../src/abtestingClient'; + +export { apiClientVersion } from '../src/abtestingClient'; + +export * from '../model'; + +export function abtestingClient( + appId: string, + apiKey: string, + region?: Region, + options?: ClientOptions, +): AbtestingClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (region && (typeof region !== 'string' || !REGIONS.includes(region))) { + throw new Error(`\`region\` must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createAbtestingClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Worker' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-abtesting/index.d.ts b/packages/client-abtesting/index.d.ts new file mode 100644 index 000000000..e81a1cd3e --- /dev/null +++ b/packages/client-abtesting/index.d.ts @@ -0,0 +1 @@ +export * from './dist/node'; diff --git a/packages/client-abtesting/index.js b/packages/client-abtesting/index.js new file mode 100644 index 000000000..21e26aad3 --- /dev/null +++ b/packages/client-abtesting/index.js @@ -0,0 +1 @@ +module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/client-abtesting/model/aBTest.ts b/packages/client-abtesting/model/aBTest.ts new file mode 100644 index 000000000..06c2791ed --- /dev/null +++ b/packages/client-abtesting/model/aBTest.ts @@ -0,0 +1,51 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ABTestConfiguration } from './aBTestConfiguration'; +import type { Status } from './status'; +import type { Variant } from './variant'; + +export type ABTest = { + /** + * Unique A/B test identifier. + */ + abTestID: number; + + clickSignificance?: number | null; + + conversionSignificance?: number | null; + + addToCartSignificance?: number | null; + + purchaseSignificance?: number | null; + + revenueSignificance?: { [key: string]: number } | null; + + /** + * Date and time when the A/B test was last updated, in RFC 3339 format. + */ + updatedAt: string; + + /** + * Date and time when the A/B test was created, in RFC 3339 format. + */ + createdAt: string; + + /** + * End date and time of the A/B test, in RFC 3339 format. + */ + endAt: string; + + /** + * A/B test name. + */ + name: string; + + status: Status; + + /** + * A/B test variants. The first variant is your _control_ index, typically your production index. The second variant is an index with changed settings that you want to test against the control. + */ + variants: Array; + + configuration?: ABTestConfiguration; +}; diff --git a/packages/client-abtesting/model/aBTestConfiguration.ts b/packages/client-abtesting/model/aBTestConfiguration.ts new file mode 100644 index 000000000..3aff4da58 --- /dev/null +++ b/packages/client-abtesting/model/aBTestConfiguration.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { EmptySearch } from './emptySearch'; +import type { MinimumDetectableEffect } from './minimumDetectableEffect'; +import type { Outliers } from './outliers'; + +/** + * A/B test configuration. + */ +export type ABTestConfiguration = { + outliers?: Outliers; + + emptySearch?: EmptySearch; + + minimumDetectableEffect?: MinimumDetectableEffect; +}; diff --git a/packages/client-abtesting/model/aBTestResponse.ts b/packages/client-abtesting/model/aBTestResponse.ts new file mode 100644 index 000000000..03700d594 --- /dev/null +++ b/packages/client-abtesting/model/aBTestResponse.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type ABTestResponse = { + /** + * Index name of the A/B test variant (case-sensitive). + */ + index: string; + + /** + * Unique A/B test identifier. + */ + abTestID: number; + + /** + * Unique identifier of a task. A successful API response means that a task was added to a queue. It might not run immediately. You can check the task\'s progress with the [`task` operation](#tag/Indices/operation/getTask) and this `taskID`. + */ + taskID: number; +}; diff --git a/packages/client-abtesting/model/abTestsVariant.ts b/packages/client-abtesting/model/abTestsVariant.ts new file mode 100644 index 000000000..dc633b12e --- /dev/null +++ b/packages/client-abtesting/model/abTestsVariant.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AbTestsVariant = { + /** + * Index name of the A/B test variant (case-sensitive). + */ + index: string; + + /** + * Percentage of search requests each variant receives. + */ + trafficPercentage: number; + + /** + * Description for this variant. + */ + description?: string; +}; diff --git a/packages/client-abtesting/model/abTestsVariantSearchParams.ts b/packages/client-abtesting/model/abTestsVariantSearchParams.ts new file mode 100644 index 000000000..4cb0237d7 --- /dev/null +++ b/packages/client-abtesting/model/abTestsVariantSearchParams.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AbTestsVariant } from './abTestsVariant'; +import type { CustomSearchParams } from './customSearchParams'; + +export type AbTestsVariantSearchParams = AbTestsVariant & CustomSearchParams; diff --git a/packages/client-abtesting/model/addABTestsRequest.ts b/packages/client-abtesting/model/addABTestsRequest.ts new file mode 100644 index 000000000..99d22a2d4 --- /dev/null +++ b/packages/client-abtesting/model/addABTestsRequest.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AddABTestsVariant } from './addABTestsVariant'; + +export type AddABTestsRequest = { + /** + * A/B test name. + */ + name: string; + + /** + * A/B test variants. + */ + variants: Array; + + /** + * End date and time of the A/B test, in RFC 3339 format. + */ + endAt: string; +}; diff --git a/packages/client-abtesting/model/addABTestsVariant.ts b/packages/client-abtesting/model/addABTestsVariant.ts new file mode 100644 index 000000000..0b460fe51 --- /dev/null +++ b/packages/client-abtesting/model/addABTestsVariant.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AbTestsVariant } from './abTestsVariant'; +import type { AbTestsVariantSearchParams } from './abTestsVariantSearchParams'; + +export type AddABTestsVariant = AbTestsVariant | AbTestsVariantSearchParams; diff --git a/packages/client-abtesting/model/clientMethodProps.ts b/packages/client-abtesting/model/clientMethodProps.ts new file mode 100644 index 000000000..2eb957d63 --- /dev/null +++ b/packages/client-abtesting/model/clientMethodProps.ts @@ -0,0 +1,117 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Properties for the `customDelete` method. + */ +export type CustomDeleteProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customGet` method. + */ +export type CustomGetProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customPost` method. + */ +export type CustomPostProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `customPut` method. + */ +export type CustomPutProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `deleteABTest` method. + */ +export type DeleteABTestProps = { + /** + * Unique A/B test identifier. + */ + id: number; +}; + +/** + * Properties for the `getABTest` method. + */ +export type GetABTestProps = { + /** + * Unique A/B test identifier. + */ + id: number; +}; + +/** + * Properties for the `listABTests` method. + */ +export type ListABTestsProps = { + /** + * Position of the first item to return. + */ + offset?: number; + /** + * Number of items to return. + */ + limit?: number; + /** + * Index name prefix. Only A/B tests for indices starting with this string are included in the response. + */ + indexPrefix?: string; + /** + * Index name suffix. Only A/B tests for indices ending with this string are included in the response. + */ + indexSuffix?: string; +}; + +/** + * Properties for the `stopABTest` method. + */ +export type StopABTestProps = { + /** + * Unique A/B test identifier. + */ + id: number; +}; diff --git a/packages/client-abtesting/model/currency.ts b/packages/client-abtesting/model/currency.ts new file mode 100644 index 000000000..70f743301 --- /dev/null +++ b/packages/client-abtesting/model/currency.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Currency = { + /** + * Currency code. + */ + currency?: string; + + /** + * Revenue for this currency. + */ + revenue?: number; + + /** + * Mean for this currency. + */ + mean?: number; + + /** + * Standard deviation for this currency. + */ + standardDeviation?: number; +}; diff --git a/packages/client-abtesting/model/customSearchParams.ts b/packages/client-abtesting/model/customSearchParams.ts new file mode 100644 index 000000000..b113a4943 --- /dev/null +++ b/packages/client-abtesting/model/customSearchParams.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Search parameters to add to the test variant. Only use this parameter if the two variants use the same index. + */ +export type CustomSearchParams = { + customSearchParameters: Record; +}; diff --git a/packages/client-abtesting/model/effectMetric.ts b/packages/client-abtesting/model/effectMetric.ts new file mode 100644 index 000000000..dc7e6ee77 --- /dev/null +++ b/packages/client-abtesting/model/effectMetric.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Metric for which you want to detect the smallest relative difference. + */ +export type EffectMetric = 'addToCartRate' | 'clickThroughRate' | 'conversionRate' | 'purchaseRate'; diff --git a/packages/client-abtesting/model/emptySearch.ts b/packages/client-abtesting/model/emptySearch.ts new file mode 100644 index 000000000..3cd54aaa3 --- /dev/null +++ b/packages/client-abtesting/model/emptySearch.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Configuration for handling empty searches. + */ +export type EmptySearch = { + /** + * Whether to exclude empty searches when calculating A/B test results. + */ + exclude?: boolean; +}; diff --git a/packages/client-abtesting/model/emptySearchFilter.ts b/packages/client-abtesting/model/emptySearchFilter.ts new file mode 100644 index 000000000..5fb112cdc --- /dev/null +++ b/packages/client-abtesting/model/emptySearchFilter.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Empty searches removed from the A/B test as a result of configuration settings. + */ +export type EmptySearchFilter = { + /** + * Number of users removed from the A/B test. + */ + usersCount?: number; + + /** + * Number of tracked searches removed from the A/B test. + */ + trackedSearchesCount?: number; +}; diff --git a/packages/client-abtesting/model/errorBase.ts b/packages/client-abtesting/model/errorBase.ts new file mode 100644 index 000000000..960e509cb --- /dev/null +++ b/packages/client-abtesting/model/errorBase.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Error. + */ +export type ErrorBase = Record & { + message?: string; +}; diff --git a/packages/client-abtesting/model/estimateABTestRequest.ts b/packages/client-abtesting/model/estimateABTestRequest.ts new file mode 100644 index 000000000..1c5e6c3db --- /dev/null +++ b/packages/client-abtesting/model/estimateABTestRequest.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AddABTestsVariant } from './addABTestsVariant'; +import type { EstimateConfiguration } from './estimateConfiguration'; + +export type EstimateABTestRequest = { + configuration: EstimateConfiguration; + + /** + * A/B test variants. + */ + variants: Array; +}; diff --git a/packages/client-abtesting/model/estimateABTestResponse.ts b/packages/client-abtesting/model/estimateABTestResponse.ts new file mode 100644 index 000000000..3a8a9c133 --- /dev/null +++ b/packages/client-abtesting/model/estimateABTestResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type EstimateABTestResponse = { + /** + * Estimated number of days needed to reach the sample sizes required for detecting the configured effect. This value is based on historical traffic. + */ + durationDays?: number; + + /** + * Sample size estimates for each variant. The first element is the control variant. Each element is the estimated number of searches required to achieve the desired statistical significance. + */ + sampleSizes?: Array; +}; diff --git a/packages/client-abtesting/model/estimateConfiguration.ts b/packages/client-abtesting/model/estimateConfiguration.ts new file mode 100644 index 000000000..ee60c3c50 --- /dev/null +++ b/packages/client-abtesting/model/estimateConfiguration.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { EmptySearch } from './emptySearch'; +import type { MinimumDetectableEffect } from './minimumDetectableEffect'; +import type { Outliers } from './outliers'; + +/** + * A/B test configuration for estimating the sample size and duration using minimum detectable effect. + */ +export type EstimateConfiguration = { + outliers?: Outliers; + + emptySearch?: EmptySearch; + + minimumDetectableEffect: MinimumDetectableEffect; +}; diff --git a/packages/client-abtesting/model/filterEffects.ts b/packages/client-abtesting/model/filterEffects.ts new file mode 100644 index 000000000..bf40d0a8d --- /dev/null +++ b/packages/client-abtesting/model/filterEffects.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { EmptySearchFilter } from './emptySearchFilter'; +import type { OutliersFilter } from './outliersFilter'; + +/** + * A/B test filter effects resulting from configuration settings. + */ +export type FilterEffects = { + outliers?: OutliersFilter; + + emptySearch?: EmptySearchFilter; +}; diff --git a/packages/client-abtesting/model/index.ts b/packages/client-abtesting/model/index.ts new file mode 100644 index 000000000..980f1f4bc --- /dev/null +++ b/packages/client-abtesting/model/index.ts @@ -0,0 +1,28 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export * from './aBTest'; +export * from './aBTestConfiguration'; +export * from './aBTestResponse'; +export * from './abTestsVariant'; +export * from './abTestsVariantSearchParams'; +export * from './addABTestsRequest'; +export * from './addABTestsVariant'; +export * from './clientMethodProps'; +export * from './currency'; +export * from './customSearchParams'; +export * from './effectMetric'; +export * from './emptySearch'; +export * from './emptySearchFilter'; +export * from './errorBase'; +export * from './estimateABTestRequest'; +export * from './estimateABTestResponse'; +export * from './estimateConfiguration'; +export * from './filterEffects'; +export * from './listABTestsResponse'; +export * from './minimumDetectableEffect'; +export * from './outliers'; +export * from './outliersFilter'; +export * from './scheduleABTestResponse'; +export * from './scheduleABTestsRequest'; +export * from './status'; +export * from './variant'; diff --git a/packages/client-abtesting/model/listABTestsResponse.ts b/packages/client-abtesting/model/listABTestsResponse.ts new file mode 100644 index 000000000..9a021cc1b --- /dev/null +++ b/packages/client-abtesting/model/listABTestsResponse.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ABTest } from './aBTest'; + +export type ListABTestsResponse = { + /** + * The list of A/B tests, null if no A/B tests are configured for this application. + */ + abtests: Array | null; + + /** + * Number of A/B tests. + */ + count: number; + + /** + * Number of retrievable A/B tests. + */ + total: number; +}; diff --git a/packages/client-abtesting/model/minimumDetectableEffect.ts b/packages/client-abtesting/model/minimumDetectableEffect.ts new file mode 100644 index 000000000..ecd87dcc1 --- /dev/null +++ b/packages/client-abtesting/model/minimumDetectableEffect.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { EffectMetric } from './effectMetric'; + +/** + * Configuration for the smallest difference between test variants you want to detect. + */ +export type MinimumDetectableEffect = { + /** + * Smallest difference in an observable metric between variants. For example, to detect a 10% difference between variants, set this value to 0.1. + */ + size: number; + + metric: EffectMetric; +}; diff --git a/packages/client-abtesting/model/outliers.ts b/packages/client-abtesting/model/outliers.ts new file mode 100644 index 000000000..a0460a0d3 --- /dev/null +++ b/packages/client-abtesting/model/outliers.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Configuration for handling outliers. + */ +export type Outliers = { + /** + * Whether to exclude outliers when calculating A/B test results. + */ + exclude?: boolean; +}; diff --git a/packages/client-abtesting/model/outliersFilter.ts b/packages/client-abtesting/model/outliersFilter.ts new file mode 100644 index 000000000..4b82cfe5e --- /dev/null +++ b/packages/client-abtesting/model/outliersFilter.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Outliers removed from the A/B test as a result of configuration settings. + */ +export type OutliersFilter = { + /** + * Number of users removed from the A/B test. + */ + usersCount?: number; + + /** + * Number of tracked searches removed from the A/B test. + */ + trackedSearchesCount?: number; +}; diff --git a/packages/client-abtesting/model/scheduleABTestResponse.ts b/packages/client-abtesting/model/scheduleABTestResponse.ts new file mode 100644 index 000000000..842b8109f --- /dev/null +++ b/packages/client-abtesting/model/scheduleABTestResponse.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type ScheduleABTestResponse = { + /** + * Unique scheduled A/B test identifier. + */ + abTestScheduleID: number; +}; diff --git a/packages/client-abtesting/model/scheduleABTestsRequest.ts b/packages/client-abtesting/model/scheduleABTestsRequest.ts new file mode 100644 index 000000000..ed2b228ed --- /dev/null +++ b/packages/client-abtesting/model/scheduleABTestsRequest.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AddABTestsVariant } from './addABTestsVariant'; + +export type ScheduleABTestsRequest = { + /** + * A/B test name. + */ + name: string; + + /** + * A/B test variants. + */ + variants: Array; + + /** + * Date and time when the A/B test is scheduled to start, in RFC 3339 format. + */ + scheduledAt: string; + + /** + * End date and time of the A/B test, in RFC 3339 format. + */ + endAt: string; +}; diff --git a/packages/client-abtesting/model/status.ts b/packages/client-abtesting/model/status.ts new file mode 100644 index 000000000..3cccd8799 --- /dev/null +++ b/packages/client-abtesting/model/status.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * A/B test status. - `active`. The A/B test is live and search traffic is split between the two variants. - `stopped`. You stopped the A/B test. The A/B test data is still available for analysis. - `expired`. The A/B test was automatically stopped after reaching its end date. - `failed`. Creating the A/B test failed. + */ +export type Status = 'active' | 'stopped' | 'expired' | 'failed'; diff --git a/packages/client-abtesting/model/variant.ts b/packages/client-abtesting/model/variant.ts new file mode 100644 index 000000000..6f03d3e71 --- /dev/null +++ b/packages/client-abtesting/model/variant.ts @@ -0,0 +1,103 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Currency } from './currency'; +import type { FilterEffects } from './filterEffects'; + +export type Variant = { + /** + * Number of add-to-cart events for this variant. + */ + addToCartCount: number; + + /** + * [Add-to-cart rate](https://www.algolia.com/doc/guides/search-analytics/concepts/metrics/#add-to-cart-rate) for this variant. + */ + addToCartRate?: number | null; + + /** + * [Average click position](https://www.algolia.com/doc/guides/search-analytics/concepts/metrics/#click-position) for this variant. + */ + averageClickPosition?: number | null; + + /** + * Number of click events for this variant. + */ + clickCount: number; + + /** + * [Click-through rate](https://www.algolia.com/doc/guides/search-analytics/concepts/metrics/#click-through-rate) for this variant. + */ + clickThroughRate?: number | null; + + /** + * Number of click events for this variant. + */ + conversionCount: number; + + /** + * [Conversion rate](https://www.algolia.com/doc/guides/search-analytics/concepts/metrics/#conversion-rate) for this variant. + */ + conversionRate?: number | null; + + /** + * A/B test currencies. + */ + currencies?: { [key: string]: Currency }; + + /** + * Description for this variant. + */ + description?: string; + + /** + * Estimated number of searches required to achieve the desired statistical significance. The A/B test configuration must include a `mininmumDetectableEffect` setting for this number to be included in the response. + */ + estimatedSampleSize?: number; + + filterEffects?: FilterEffects; + + /** + * Index name of the A/B test variant (case-sensitive). + */ + index: string; + + /** + * Number of [searches without results](https://www.algolia.com/doc/guides/search-analytics/concepts/metrics/#searches-without-results) for this variant. + */ + noResultCount: number | null; + + /** + * Number of purchase events for this variant. + */ + purchaseCount: number; + + /** + * [Purchase rate](https://www.algolia.com/doc/guides/search-analytics/concepts/metrics/#purchase-rate) for this variant. + */ + purchaseRate?: number | null; + + /** + * Number of searches for this variant. + */ + searchCount: number | null; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + trackedSearchCount?: number; + + /** + * Percentage of search requests each variant receives. + */ + trafficPercentage: number; + + /** + * Number of users that made searches to this variant. + */ + userCount: number | null; + + /** + * Number of users that made tracked searches to this variant. + */ + trackedUserCount: number | null; +}; diff --git a/packages/client-abtesting/package.json b/packages/client-abtesting/package.json new file mode 100644 index 000000000..934b5ed65 --- /dev/null +++ b/packages/client-abtesting/package.json @@ -0,0 +1,68 @@ +{ + "version": "5.23.3", + "repository": { + "type": "git", + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/client-abtesting#readme", + "type": "module", + "license": "MIT", + "author": "Algolia", + "scripts": { + "build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js", + "clean": "rm -rf ./dist || true", + "test:bundle": "publint . && attw --pack ." + }, + "name": "@algolia/client-abtesting", + "description": "JavaScript client for client-abtesting", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/builds/node.js", + "module": "./dist/builds/node.js", + "require": "./dist/builds/node.cjs" + }, + "worker": { + "types": "./dist/worker.d.ts", + "default": "./dist/builds/worker.js" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/builds/browser.js", + "import": "./dist/builds/browser.js", + "default": "./dist/builds/browser.umd.js" + } + }, + "./dist/builds/*": "./dist/builds/*.js" + }, + "jsdelivr": "./dist/builds/browser.umd.js", + "unpkg": "./dist/builds/browser.umd.js", + "react-native": "./dist/builds/browser.js", + "files": [ + "dist", + "index.js", + "index.d.ts" + ], + "dependencies": { + "@algolia/client-common": "5.23.3", + "@algolia/requester-browser-xhr": "5.23.3", + "@algolia/requester-fetch": "5.23.3", + "@algolia/requester-node-http": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "publint": "0.3.10", + "rollup": "4.39.0", + "tsup": "8.4.0", + "typescript": "5.8.3" + }, + "engines": { + "node": ">= 14.0.0" + } +} diff --git a/packages/client-abtesting/rollup.config.js b/packages/client-abtesting/rollup.config.js new file mode 100644 index 000000000..ba6f27a30 --- /dev/null +++ b/packages/client-abtesting/rollup.config.js @@ -0,0 +1,17 @@ +export default [ + { + input: 'dist/builds/browser.min.js', + external: ['dom'], + cache: false, + output: { + esModule: false, + file: 'dist/builds/browser.umd.js', + name: '@algolia/client-abtesting', + format: 'umd', + sourcemap: false, + globals: { + ['abtestingClient']: 'abtestingClient', + }, + }, + }, +]; diff --git a/packages/client-abtesting/src/abtestingClient.ts b/packages/client-abtesting/src/abtestingClient.ts new file mode 100644 index 000000000..00867331a --- /dev/null +++ b/packages/client-abtesting/src/abtestingClient.ts @@ -0,0 +1,492 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { + CreateClientOptions, + Headers, + Host, + QueryParameters, + Request, + RequestOptions, +} from '@algolia/client-common'; +import { createAuth, createTransporter, getAlgoliaAgent } from '@algolia/client-common'; + +import type { ABTest } from '../model/aBTest'; +import type { ABTestResponse } from '../model/aBTestResponse'; +import type { AddABTestsRequest } from '../model/addABTestsRequest'; + +import type { EstimateABTestRequest } from '../model/estimateABTestRequest'; +import type { EstimateABTestResponse } from '../model/estimateABTestResponse'; +import type { ListABTestsResponse } from '../model/listABTestsResponse'; +import type { ScheduleABTestResponse } from '../model/scheduleABTestResponse'; +import type { ScheduleABTestsRequest } from '../model/scheduleABTestsRequest'; + +import type { + CustomDeleteProps, + CustomGetProps, + CustomPostProps, + CustomPutProps, + DeleteABTestProps, + GetABTestProps, + ListABTestsProps, + StopABTestProps, +} from '../model/clientMethodProps'; + +export const apiClientVersion = '5.23.3'; + +export const REGIONS = ['de', 'us'] as const; +export type Region = (typeof REGIONS)[number]; +export type RegionOptions = { region?: Region }; + +function getDefaultHosts(region?: Region): Host[] { + const url = !region ? 'analytics.algolia.com' : 'analytics.{region}.algolia.com'.replace('{region}', region); + + return [{ url, accept: 'readWrite', protocol: 'https' }]; +} + +export function createAbtestingClient({ + appId: appIdOption, + apiKey: apiKeyOption, + authMode, + algoliaAgents, + region: regionOption, + ...options +}: CreateClientOptions & RegionOptions) { + const auth = createAuth(appIdOption, apiKeyOption, authMode); + const transporter = createTransporter({ + hosts: getDefaultHosts(regionOption), + ...options, + algoliaAgent: getAlgoliaAgent({ + algoliaAgents, + client: 'Abtesting', + version: apiClientVersion, + }), + baseHeaders: { + 'content-type': 'text/plain', + ...auth.headers(), + ...options.baseHeaders, + }, + baseQueryParameters: { + ...auth.queryParameters(), + ...options.baseQueryParameters, + }, + }); + + return { + transporter, + + /** + * The `appId` currently in use. + */ + appId: appIdOption, + + /** + * The `apiKey` currently in use. + */ + apiKey: apiKeyOption, + + /** + * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties. + */ + clearCache(): Promise { + return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => undefined); + }, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return transporter.algoliaAgent.value; + }, + + /** + * Adds a `segment` to the `x-algolia-agent` sent with every requests. + * + * @param segment - The algolia agent (user-agent) segment to add. + * @param version - The version of the agent. + */ + addAlgoliaAgent(segment: string, version?: string): void { + transporter.algoliaAgent.add({ segment, version }); + }, + + /** + * Helper method to switch the API key used to authenticate the requests. + * + * @param params - Method params. + * @param params.apiKey - The new API Key to use. + */ + setClientApiKey({ apiKey }: { apiKey: string }): void { + if (!authMode || authMode === 'WithinHeaders') { + transporter.baseHeaders['x-algolia-api-key'] = apiKey; + } else { + transporter.baseQueryParameters['x-algolia-api-key'] = apiKey; + } + }, + + /** + * Creates a new A/B test. + * + * Required API Key ACLs: + * - editSettings + * @param addABTestsRequest - The addABTestsRequest object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + addABTests(addABTestsRequest: AddABTestsRequest, requestOptions?: RequestOptions): Promise { + if (!addABTestsRequest) { + throw new Error('Parameter `addABTestsRequest` is required when calling `addABTests`.'); + } + + if (!addABTestsRequest.name) { + throw new Error('Parameter `addABTestsRequest.name` is required when calling `addABTests`.'); + } + if (!addABTestsRequest.variants) { + throw new Error('Parameter `addABTestsRequest.variants` is required when calling `addABTests`.'); + } + if (!addABTestsRequest.endAt) { + throw new Error('Parameter `addABTestsRequest.endAt` is required when calling `addABTests`.'); + } + + const requestPath = '/2/abtests'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: addABTestsRequest, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customDelete - The customDelete object. + * @param customDelete.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customDelete.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customDelete( + { path, parameters }: CustomDeleteProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customDelete`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customGet - The customGet object. + * @param customGet.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customGet.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customGet({ path, parameters }: CustomGetProps, requestOptions?: RequestOptions): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customGet`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPost - The customPost object. + * @param customPost.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPost.parameters - Query parameters to apply to the current query. + * @param customPost.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPost( + { path, parameters, body }: CustomPostProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPost`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPut - The customPut object. + * @param customPut.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPut.parameters - Query parameters to apply to the current query. + * @param customPut.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPut( + { path, parameters, body }: CustomPutProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPut`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes an A/B test by its ID. + * + * Required API Key ACLs: + * - editSettings + * @param deleteABTest - The deleteABTest object. + * @param deleteABTest.id - Unique A/B test identifier. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteABTest({ id }: DeleteABTestProps, requestOptions?: RequestOptions): Promise { + if (!id) { + throw new Error('Parameter `id` is required when calling `deleteABTest`.'); + } + + const requestPath = '/2/abtests/{id}'.replace('{id}', encodeURIComponent(id)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Given the traffic percentage and the expected effect size, this endpoint estimates the sample size and duration of an A/B test based on historical traffic. + * + * Required API Key ACLs: + * - analytics + * @param estimateABTestRequest - The estimateABTestRequest object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + estimateABTest( + estimateABTestRequest: EstimateABTestRequest, + requestOptions?: RequestOptions, + ): Promise { + if (!estimateABTestRequest) { + throw new Error('Parameter `estimateABTestRequest` is required when calling `estimateABTest`.'); + } + + if (!estimateABTestRequest.configuration) { + throw new Error('Parameter `estimateABTestRequest.configuration` is required when calling `estimateABTest`.'); + } + if (!estimateABTestRequest.variants) { + throw new Error('Parameter `estimateABTestRequest.variants` is required when calling `estimateABTest`.'); + } + + const requestPath = '/2/abtests/estimate'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: estimateABTestRequest, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the details for an A/B test by its ID. + * + * Required API Key ACLs: + * - analytics + * @param getABTest - The getABTest object. + * @param getABTest.id - Unique A/B test identifier. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getABTest({ id }: GetABTestProps, requestOptions?: RequestOptions): Promise { + if (!id) { + throw new Error('Parameter `id` is required when calling `getABTest`.'); + } + + const requestPath = '/2/abtests/{id}'.replace('{id}', encodeURIComponent(id)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Lists all A/B tests you configured for this application. + * + * Required API Key ACLs: + * - analytics + * @param listABTests - The listABTests object. + * @param listABTests.offset - Position of the first item to return. + * @param listABTests.limit - Number of items to return. + * @param listABTests.indexPrefix - Index name prefix. Only A/B tests for indices starting with this string are included in the response. + * @param listABTests.indexSuffix - Index name suffix. Only A/B tests for indices ending with this string are included in the response. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listABTests( + { offset, limit, indexPrefix, indexSuffix }: ListABTestsProps = {}, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/2/abtests'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (offset !== undefined) { + queryParameters['offset'] = offset.toString(); + } + + if (limit !== undefined) { + queryParameters['limit'] = limit.toString(); + } + + if (indexPrefix !== undefined) { + queryParameters['indexPrefix'] = indexPrefix.toString(); + } + + if (indexSuffix !== undefined) { + queryParameters['indexSuffix'] = indexSuffix.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Schedule an A/B test to be started at a later time. + * + * Required API Key ACLs: + * - editSettings + * @param scheduleABTestsRequest - The scheduleABTestsRequest object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + scheduleABTest( + scheduleABTestsRequest: ScheduleABTestsRequest, + requestOptions?: RequestOptions, + ): Promise { + if (!scheduleABTestsRequest) { + throw new Error('Parameter `scheduleABTestsRequest` is required when calling `scheduleABTest`.'); + } + + if (!scheduleABTestsRequest.name) { + throw new Error('Parameter `scheduleABTestsRequest.name` is required when calling `scheduleABTest`.'); + } + if (!scheduleABTestsRequest.variants) { + throw new Error('Parameter `scheduleABTestsRequest.variants` is required when calling `scheduleABTest`.'); + } + if (!scheduleABTestsRequest.scheduledAt) { + throw new Error('Parameter `scheduleABTestsRequest.scheduledAt` is required when calling `scheduleABTest`.'); + } + if (!scheduleABTestsRequest.endAt) { + throw new Error('Parameter `scheduleABTestsRequest.endAt` is required when calling `scheduleABTest`.'); + } + + const requestPath = '/2/abtests/schedule'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: scheduleABTestsRequest, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Stops an A/B test by its ID. You can\'t restart stopped A/B tests. + * + * Required API Key ACLs: + * - editSettings + * @param stopABTest - The stopABTest object. + * @param stopABTest.id - Unique A/B test identifier. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + stopABTest({ id }: StopABTestProps, requestOptions?: RequestOptions): Promise { + if (!id) { + throw new Error('Parameter `id` is required when calling `stopABTest`.'); + } + + const requestPath = '/2/abtests/{id}/stop'.replace('{id}', encodeURIComponent(id)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + }; +} diff --git a/packages/client-abtesting/tsconfig.json b/packages/client-abtesting/tsconfig.json new file mode 100644 index 000000000..444e8bb64 --- /dev/null +++ b/packages/client-abtesting/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src", "model", "builds"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/client-abtesting/tsup.config.ts b/packages/client-abtesting/tsup.config.ts new file mode 100644 index 000000000..362baf8f3 --- /dev/null +++ b/packages/client-abtesting/tsup.config.ts @@ -0,0 +1,67 @@ +import type { Options } from 'tsup'; +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions, getDependencies } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +const nodeOptions: Options = { + ...getBaseNodeOptions(pkg, __dirname), + dts: { entry: { node: 'builds/node.ts' } }, + entry: ['builds/node.ts', 'src/*.ts'], +}; + +const nodeConfigs: Options[] = [ + { + ...nodeOptions, + format: 'cjs', + name: `node ${pkg.name} cjs`, + }, + { + ...nodeOptions, + format: 'esm', + name: `node ${pkg.name} esm`, + }, + { + ...nodeOptions, + format: 'esm', + name: `fetch ${pkg.name} esm`, + dts: { entry: { fetch: 'builds/fetch.ts' } }, + external: getDependencies(pkg, 'fetch'), + entry: ['builds/fetch.ts', 'src/*.ts'], + }, + { + ...nodeOptions, + format: 'esm', + name: `worker ${pkg.name} esm`, + dts: { entry: { worker: 'builds/worker.ts' } }, + external: getDependencies(pkg, 'worker'), + entry: ['builds/worker.ts', 'src/*.ts'], + }, +]; + +const browserOptions: Options = { + ...getBaseBrowserOptions(pkg, __dirname), + globalName: 'abtestingClient', +}; + +const browserConfigs: Options[] = [ + { + ...browserOptions, + minify: false, + name: `browser ${pkg.name} esm`, + dts: { entry: { browser: 'builds/browser.ts' } }, + entry: ['builds/browser.ts', 'src/*.ts'], + }, + { + ...browserOptions, + dts: false, + minify: true, + name: `browser ${pkg.name} min esm`, + entry: { 'builds/browser.min': 'builds/browser.ts' }, + external: [], + noExternal: getDependencies(pkg, 'xhr'), + }, +]; + +export default defineConfig([...nodeConfigs, ...browserConfigs]); diff --git a/packages/client-account/api-extractor.json b/packages/client-account/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/client-account/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/client-account/index.js b/packages/client-account/index.js deleted file mode 100644 index ea5e5605a..000000000 --- a/packages/client-account/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/client-account.cjs.js'); diff --git a/packages/client-account/package.json b/packages/client-account/package.json deleted file mode 100644 index 312758d9a..000000000 --- a/packages/client-account/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "@algolia/client-account", - "version": "4.13.1", - "private": false, - "repository": { - "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-javascript.git" - }, - "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/client-account.esm.js", - "types": "dist/client-account.d.ts", - "files": [ - "index.js", - "dist" - ], - "dependencies": { - "@algolia/client-common": "4.13.1", - "@algolia/client-search": "4.13.1", - "@algolia/transporter": "4.13.1" - } -} diff --git a/packages/client-account/src/__tests__/integration/account-copy-index.test.ts b/packages/client-account/src/__tests__/integration/account-copy-index.test.ts deleted file mode 100644 index 8c8cb9af2..000000000 --- a/packages/client-account/src/__tests__/integration/account-copy-index.test.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { accountCopyIndex } from '@algolia/client-account'; -import { createRetryablePromise } from '@algolia/client-common'; -import { Rule, Synonym } from '@algolia/client-search'; - -import { waitResponses } from '../../../../client-common/src/__tests__/helpers'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('account_copy_index'); - -describe(testSuite.testName, () => { - const rule: Rule = { - objectID: 'one', - condition: { anchoring: 'is', pattern: 'pattern' }, - consequence: { - params: { - query: { - edits: [{ type: 'remove', delete: 'pattern' }], - }, - }, - }, - }; - - const synomy: Synonym = { objectID: 'one', type: 'synonym', synonyms: ['one', 'two'] }; - - const setUpSource = async (source: ReturnType) => { - await waitResponses([ - source.saveObject({ objectID: 'one' }), - source.setSettings({ searchableAttributes: ['objectID'] }), - source.saveRule(rule), - source.saveSynonym(synomy), - ]); - }; - - const waitForIndexCreated = (destination: ReturnType) => - createRetryablePromise(async retry => { - const exists = await destination.exists(); - - return exists ? Promise.resolve() : retry(); - }); - - it('copies indices between accounts', async () => { - const source = testSuite.makeIndex(); - const destination = testSuite - .makeSearchClient('ALGOLIA_APPLICATION_ID_2', 'ALGOLIA_ADMIN_KEY_2') - .initIndex(testSuite.makeIndexName()); - - await setUpSource(source); - - await expect(accountCopyIndex(source, source)).rejects.toEqual({ - name: 'IndicesInTheSameAppError', - message: 'Indices are in the same application. Use SearchClient.copyIndex instead.', - appId: source.appId, - }); - - await expect(accountCopyIndex(source, destination).wait()).resolves.toBeUndefined(); - - await expect(destination.search('')).resolves.toMatchObject({ - hits: [{ objectID: 'one' }], - }); - - await expect(destination.getSettings()).resolves.toMatchObject({ - searchableAttributes: ['objectID'], - }); - - await expect(destination.getRule('one')).resolves.toMatchObject(rule); - - await expect(destination.getSynonym('one')).resolves.toEqual(synomy); - - await expect(accountCopyIndex(source, destination)).rejects.toEqual({ - name: 'DestinationIndiceAlreadyExistsError', - message: 'Destination indice already exists.', - }); - }); - - it('it does not need to wait', async () => { - const source = testSuite.makeIndex(); - const destination = testSuite - .makeSearchClient('ALGOLIA_APPLICATION_ID_2', 'ALGOLIA_ADMIN_KEY_2') - .initIndex(testSuite.makeIndexName()); - - await setUpSource(source); - - await expect(accountCopyIndex(source, destination)).resolves.toBeUndefined(); - - await waitForIndexCreated(destination); - await expect(destination.exists()).resolves.toEqual(true); - }); - - it('it bubbles up errors', async () => { - const source = testSuite.makeIndex(); - - await setUpSource(source); - - const indexName = testSuite.makeIndexName(); - - const addApiKeyResponse = await testSuite - .makeSearchClient('ALGOLIA_APPLICATION_ID_2', 'ALGOLIA_ADMIN_KEY_2') - .addApiKey(['settings', 'editSettings', 'search'], { - indexes: [indexName], - }) - .wait(); - - const destination = testSuite - .algoliasearch(`${process.env.ALGOLIA_APPLICATION_ID_2}`, addApiKeyResponse.key) - .initIndex(indexName); - - await expect(accountCopyIndex(source, destination).wait()).rejects.toMatchObject({ - name: 'ApiError', - message: 'Not enough rights to update an object near line:1 column:64', - status: 400, - }); - - // At this point, we should have created the index. But it should - // be empty because we only have set settings on it. - await waitForIndexCreated(destination); - - await expect(destination.search('')).resolves.toMatchObject({ - nbHits: 0, - hits: [], - }); - }); -}); diff --git a/packages/client-account/src/errors/createDestinationIndiceExistsError.ts b/packages/client-account/src/errors/createDestinationIndiceExistsError.ts deleted file mode 100644 index 193afa6bb..000000000 --- a/packages/client-account/src/errors/createDestinationIndiceExistsError.ts +++ /dev/null @@ -1,6 +0,0 @@ -export function createDestinationIndiceExistsError(): Error { - return { - name: 'DestinationIndiceAlreadyExistsError', - message: 'Destination indice already exists.', - }; -} diff --git a/packages/client-account/src/errors/createIndicesInSameAppError.ts b/packages/client-account/src/errors/createIndicesInSameAppError.ts deleted file mode 100644 index 6fdcea8f2..000000000 --- a/packages/client-account/src/errors/createIndicesInSameAppError.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IndicesInSameAppError } from '..'; - -export function createIndicesInSameAppError(appId: string): IndicesInSameAppError { - return { - name: 'IndicesInTheSameAppError', - message: 'Indices are in the same application. Use SearchClient.copyIndex instead.', - appId, - }; -} diff --git a/packages/client-account/src/errors/index.ts b/packages/client-account/src/errors/index.ts deleted file mode 100644 index 2656cec3d..000000000 --- a/packages/client-account/src/errors/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createDestinationIndiceExistsError'; -export * from './createIndicesInSameAppError'; diff --git a/packages/client-account/src/index.ts b/packages/client-account/src/index.ts deleted file mode 100644 index 61f10b209..000000000 --- a/packages/client-account/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './errors/index'; -export * from './methods/index'; -export * from './types/index'; diff --git a/packages/client-account/src/methods/accountCopyIndex.ts b/packages/client-account/src/methods/accountCopyIndex.ts deleted file mode 100644 index 2df6a43d6..000000000 --- a/packages/client-account/src/methods/accountCopyIndex.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { createWaitablePromise, WaitablePromise } from '@algolia/client-common'; -import { - browseObjects, - browseRules, - browseSynonyms, - exists, - getSettings, - saveObjects, - saveRules, - saveSynonyms, - SearchIndex, - setSettings, -} from '@algolia/client-search'; -import { RequestOptions } from '@algolia/transporter'; - -import { createDestinationIndiceExistsError, createIndicesInSameAppError } from '..'; - -export const accountCopyIndex = ( - source: SearchIndex, - destination: SearchIndex, - requestOptions?: RequestOptions -): WaitablePromise => { - // eslint-disable-next-line functional/prefer-readonly-type - const responses: Array> = []; - - const promise = exists(destination)() - .then(res => { - if (source.appId === destination.appId) { - throw createIndicesInSameAppError(source.appId); - } - - if (res) { - throw createDestinationIndiceExistsError(); - } - }) - .then(() => getSettings(source)()) - .then(settings => - // eslint-disable-next-line functional/immutable-data - responses.push(setSettings(destination)(settings, requestOptions)) - ) - .then(() => - browseRules(source)({ - // eslint-disable-next-line functional/immutable-data - batch: rules => responses.push(saveRules(destination)(rules, requestOptions)), - }) - ) - .then(() => - browseSynonyms(source)({ - // eslint-disable-next-line functional/immutable-data - batch: synonyms => responses.push(saveSynonyms(destination)(synonyms, requestOptions)), - }) - ) - .then(() => - browseObjects(source)({ - // eslint-disable-next-line functional/immutable-data - batch: objects => responses.push(saveObjects(destination)(objects, requestOptions)), - }) - ); - - return createWaitablePromise( - /** - * The original promise will return an array of async responses, now - * we need to resolve that array of async responses using a - * `Promise.all`, and then resolve `void` for the end-user. - */ - promise.then(() => Promise.all(responses)).then(() => undefined), - - /** - * Next, if the end-user calls the `wait` method, we need to also call - * the `wait` method on each element of of async responses. - */ - (_response, waitRequestOptions) => { - return Promise.all(responses.map(response => response.wait(waitRequestOptions))); - } - ); -}; diff --git a/packages/client-account/src/methods/index.ts b/packages/client-account/src/methods/index.ts deleted file mode 100644 index dc8bf10be..000000000 --- a/packages/client-account/src/methods/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './accountCopyIndex'; diff --git a/packages/client-account/src/types/IndicesInSameAppError.ts b/packages/client-account/src/types/IndicesInSameAppError.ts deleted file mode 100644 index 478835723..000000000 --- a/packages/client-account/src/types/IndicesInSameAppError.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type IndicesInSameAppError = Error & { - /** - * The app id. - */ - readonly appId: string; -}; diff --git a/packages/client-account/src/types/index.ts b/packages/client-account/src/types/index.ts deleted file mode 100644 index 19e81e25f..000000000 --- a/packages/client-account/src/types/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './IndicesInSameAppError'; diff --git a/packages/client-analytics/LICENSE b/packages/client-analytics/LICENSE new file mode 100644 index 000000000..fddf416f9 --- /dev/null +++ b/packages/client-analytics/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-Present Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/client-analytics/README.md b/packages/client-analytics/README.md new file mode 100644 index 000000000..f918345e7 --- /dev/null +++ b/packages/client-analytics/README.md @@ -0,0 +1,77 @@ +

+ + Algolia for JavaScript + + +

The perfect starting point to integrate Algolia within your JavaScript project

+ +

+ NPM version + NPM downloads + jsDelivr Downloads + License +

+

+ +

+ Documentation • + InstantSearch • + Community Forum • + Stack Overflow • + Report a bug • + FAQ • + Support +

+ +## ✨ Features + +- Thin & **minimal low-level HTTP client** to interact with Algolia's API +- Works both on the **browser** and **node.js** +- **UMD and ESM compatible**, you can use it with any module loader +- Built with TypeScript + +## 💡 Getting Started + +> [!TIP] +> This API client is already a dependency of [the algoliasearch client](https://www.npmjs.com/package/algoliasearch), you don't need to manually install `@algolia/client-analytics` if you already have `algoliasearch` installed. + +To get started, you first need to install @algolia/client-analytics (or any other available API client package). +All of our clients comes with type definition, and are available for both browser and node environments. + +### With a package manager + +```bash +yarn add @algolia/client-analytics@5.23.3 +# or +npm install @algolia/client-analytics@5.23.3 +# or +pnpm add @algolia/client-analytics@5.23.3 +``` + +### Without a package manager + +Add the following JavaScript snippet to the of your website: + +```html + +``` + +### Usage + +You can now import the Algolia API client in your project and play with it. + +```js +import { analyticsClient } from '@algolia/client-analytics'; + +const client = analyticsClient('YOUR_APP_ID', 'YOUR_API_KEY'); +``` + +For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/javascript/v5/methods/analytics/)**. + +## ❓ Troubleshooting + +Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/libraries/javascript/v5/) where you will find answers for the most common issues and gotchas with the client. You can also open [a GitHub issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=&projects=&template=Bug_report.md) + +## 📄 License + +The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). diff --git a/packages/client-analytics/api-extractor.json b/packages/client-analytics/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/client-analytics/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/client-analytics/builds/browser.ts b/packages/client-analytics/builds/browser.ts new file mode 100644 index 000000000..77f99642a --- /dev/null +++ b/packages/client-analytics/builds/browser.ts @@ -0,0 +1,65 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import { createXhrRequester } from '@algolia/requester-browser-xhr'; + +import { + createBrowserLocalStorageCache, + createFallbackableCache, + createMemoryCache, + createNullLogger, +} from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { apiClientVersion, createAnalyticsClient } from '../src/analyticsClient'; + +import type { Region } from '../src/analyticsClient'; +import { REGIONS } from '../src/analyticsClient'; + +export type { Region, RegionOptions } from '../src/analyticsClient'; + +export { apiClientVersion } from '../src/analyticsClient'; + +export * from '../model'; + +export function analyticsClient( + appId: string, + apiKey: string, + region?: Region, + options?: ClientOptions, +): AnalyticsClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (region && (typeof region !== 'string' || !REGIONS.includes(region))) { + throw new Error(`\`region\` must be one of the following: ${REGIONS.join(', ')}`); + } + + return createAnalyticsClient({ + appId, + apiKey, + region, + timeouts: { + connect: 1000, + read: 2000, + write: 30000, + }, + logger: createNullLogger(), + requester: createXhrRequester(), + algoliaAgents: [{ segment: 'Browser' }], + authMode: 'WithinQueryParameters', + responsesCache: createMemoryCache(), + requestsCache: createMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], + }), + ...options, + }); +} + +export type AnalyticsClient = ReturnType; diff --git a/packages/client-analytics/builds/fetch.ts b/packages/client-analytics/builds/fetch.ts new file mode 100644 index 000000000..25a5ea260 --- /dev/null +++ b/packages/client-analytics/builds/fetch.ts @@ -0,0 +1,58 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AnalyticsClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createAnalyticsClient } from '../src/analyticsClient'; + +import type { Region } from '../src/analyticsClient'; +import { REGIONS } from '../src/analyticsClient'; + +export type { Region, RegionOptions } from '../src/analyticsClient'; + +export { apiClientVersion } from '../src/analyticsClient'; + +export * from '../model'; + +export function analyticsClient( + appId: string, + apiKey: string, + region?: Region, + options?: ClientOptions, +): AnalyticsClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (region && (typeof region !== 'string' || !REGIONS.includes(region))) { + throw new Error(`\`region\` must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createAnalyticsClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Fetch' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-analytics/builds/node.ts b/packages/client-analytics/builds/node.ts new file mode 100644 index 000000000..1d1c2655e --- /dev/null +++ b/packages/client-analytics/builds/node.ts @@ -0,0 +1,59 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AnalyticsClient = ReturnType; + +import { createHttpRequester } from '@algolia/requester-node-http'; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createAnalyticsClient } from '../src/analyticsClient'; + +import type { Region } from '../src/analyticsClient'; +import { REGIONS } from '../src/analyticsClient'; + +export type { Region, RegionOptions } from '../src/analyticsClient'; + +export { apiClientVersion } from '../src/analyticsClient'; + +export * from '../model'; + +export function analyticsClient( + appId: string, + apiKey: string, + region?: Region, + options?: ClientOptions, +): AnalyticsClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (region && (typeof region !== 'string' || !REGIONS.includes(region))) { + throw new Error(`\`region\` must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createAnalyticsClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createHttpRequester(), + algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-analytics/builds/worker.ts b/packages/client-analytics/builds/worker.ts new file mode 100644 index 000000000..d71ef8249 --- /dev/null +++ b/packages/client-analytics/builds/worker.ts @@ -0,0 +1,58 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AnalyticsClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createAnalyticsClient } from '../src/analyticsClient'; + +import type { Region } from '../src/analyticsClient'; +import { REGIONS } from '../src/analyticsClient'; + +export type { Region, RegionOptions } from '../src/analyticsClient'; + +export { apiClientVersion } from '../src/analyticsClient'; + +export * from '../model'; + +export function analyticsClient( + appId: string, + apiKey: string, + region?: Region, + options?: ClientOptions, +): AnalyticsClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (region && (typeof region !== 'string' || !REGIONS.includes(region))) { + throw new Error(`\`region\` must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createAnalyticsClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Worker' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-analytics/index.d.ts b/packages/client-analytics/index.d.ts new file mode 100644 index 000000000..e81a1cd3e --- /dev/null +++ b/packages/client-analytics/index.d.ts @@ -0,0 +1 @@ +export * from './dist/node'; diff --git a/packages/client-analytics/index.js b/packages/client-analytics/index.js index 3588503aa..21e26aad3 100644 --- a/packages/client-analytics/index.js +++ b/packages/client-analytics/index.js @@ -1,2 +1 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/client-analytics.cjs.js'); +module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/client-analytics/model/clickPosition.ts b/packages/client-analytics/model/clickPosition.ts new file mode 100644 index 000000000..7009b3bbd --- /dev/null +++ b/packages/client-analytics/model/clickPosition.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Click position. + */ +export type ClickPosition = { + /** + * Range of positions in the search results, using the pattern `[start,end]`. For positions 11 and up, click events are summed over the specified range. `-1` indicates the end of the list of search results. + */ + position?: Array; + + /** + * Number of times this search has been clicked at that position. + */ + clickCount?: number; +}; diff --git a/packages/client-analytics/model/clientMethodProps.ts b/packages/client-analytics/model/clientMethodProps.ts new file mode 100644 index 000000000..512cc4fa5 --- /dev/null +++ b/packages/client-analytics/model/clientMethodProps.ts @@ -0,0 +1,605 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Direction } from '../model/direction'; + +import type { OrderBy } from '../model/orderBy'; + +/** + * Properties for the `customDelete` method. + */ +export type CustomDeleteProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customGet` method. + */ +export type CustomGetProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customPost` method. + */ +export type CustomPostProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `customPut` method. + */ +export type CustomPutProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `getAddToCartRate` method. + */ +export type GetAddToCartRateProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getAverageClickPosition` method. + */ +export type GetAverageClickPositionProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getClickPositions` method. + */ +export type GetClickPositionsProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getClickThroughRate` method. + */ +export type GetClickThroughRateProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getConversionRate` method. + */ +export type GetConversionRateProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getNoClickRate` method. + */ +export type GetNoClickRateProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getNoResultsRate` method. + */ +export type GetNoResultsRateProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getPurchaseRate` method. + */ +export type GetPurchaseRateProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getRevenue` method. + */ +export type GetRevenueProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getSearchesCount` method. + */ +export type GetSearchesCountProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getSearchesNoClicks` method. + */ +export type GetSearchesNoClicksProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Number of items to return. + */ + limit?: number; + /** + * Position of the first item to return. + */ + offset?: number; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getSearchesNoResults` method. + */ +export type GetSearchesNoResultsProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Number of items to return. + */ + limit?: number; + /** + * Position of the first item to return. + */ + offset?: number; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getStatus` method. + */ +export type GetStatusProps = { + /** + * Index name. + */ + index: string; +}; + +/** + * Properties for the `getTopCountries` method. + */ +export type GetTopCountriesProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Number of items to return. + */ + limit?: number; + /** + * Position of the first item to return. + */ + offset?: number; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getTopFilterAttributes` method. + */ +export type GetTopFilterAttributesProps = { + /** + * Index name. + */ + index: string; + /** + * Search query. + */ + search?: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Number of items to return. + */ + limit?: number; + /** + * Position of the first item to return. + */ + offset?: number; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getTopFilterForAttribute` method. + */ +export type GetTopFilterForAttributeProps = { + /** + * Attribute name. + */ + attribute: string; + /** + * Index name. + */ + index: string; + /** + * Search query. + */ + search?: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Number of items to return. + */ + limit?: number; + /** + * Position of the first item to return. + */ + offset?: number; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getTopFiltersNoResults` method. + */ +export type GetTopFiltersNoResultsProps = { + /** + * Index name. + */ + index: string; + /** + * Search query. + */ + search?: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Number of items to return. + */ + limit?: number; + /** + * Position of the first item to return. + */ + offset?: number; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getTopHits` method. + */ +export type GetTopHitsProps = { + /** + * Index name. + */ + index: string; + /** + * Search query. + */ + search?: string; + /** + * Whether to include metrics related to click and conversion events in the response. + */ + clickAnalytics?: boolean; + /** + * Whether to include metrics related to revenue events in the response. + */ + revenueAnalytics?: boolean; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Number of items to return. + */ + limit?: number; + /** + * Position of the first item to return. + */ + offset?: number; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getTopSearches` method. + */ +export type GetTopSearchesProps = { + /** + * Index name. + */ + index: string; + /** + * Whether to include metrics related to click and conversion events in the response. + */ + clickAnalytics?: boolean; + /** + * Whether to include metrics related to revenue events in the response. + */ + revenueAnalytics?: boolean; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Attribute by which to order the response items. If the `clickAnalytics` parameter is false, only `searchCount` is available. + */ + orderBy?: OrderBy; + /** + * Sorting direction of the results: ascending or descending. + */ + direction?: Direction; + /** + * Number of items to return. + */ + limit?: number; + /** + * Position of the first item to return. + */ + offset?: number; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; + +/** + * Properties for the `getUsersCount` method. + */ +export type GetUsersCountProps = { + /** + * Index name. + */ + index: string; + /** + * Start date of the period to analyze, in `YYYY-MM-DD` format. + */ + startDate?: string; + /** + * End date of the period to analyze, in `YYYY-MM-DD` format. + */ + endDate?: string; + /** + * Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + tags?: string; +}; diff --git a/packages/client-analytics/model/currencyCode.ts b/packages/client-analytics/model/currencyCode.ts new file mode 100644 index 000000000..5d36ebaa0 --- /dev/null +++ b/packages/client-analytics/model/currencyCode.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Currency code. + */ +export type CurrencyCode = { + /** + * Currency code. + */ + currency?: string; + + /** + * Revenue associated with this search in this currency. + */ + revenue?: number; +}; diff --git a/packages/client-analytics/model/dailyAddToCartRates.ts b/packages/client-analytics/model/dailyAddToCartRates.ts new file mode 100644 index 000000000..9b4d29066 --- /dev/null +++ b/packages/client-analytics/model/dailyAddToCartRates.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DailyAddToCartRates = { + /** + * Add-to-cart rate: calculated as the number of tracked searches with at least one add-to-cart event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + rate: number | null; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + trackedSearchCount: number; + + /** + * Number of add-to-cart events from this search. + */ + addToCartCount: number; + + /** + * Date in the format YYYY-MM-DD. + */ + date: string; +}; diff --git a/packages/client-analytics/model/dailyAverageClicks.ts b/packages/client-analytics/model/dailyAverageClicks.ts new file mode 100644 index 000000000..fb9928685 --- /dev/null +++ b/packages/client-analytics/model/dailyAverageClicks.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DailyAverageClicks = { + /** + * Average position of a clicked search result in the list of search results. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + average: number | null; + + /** + * Number of clicks associated with this search. + */ + clickCount: number; + + /** + * Date in the format YYYY-MM-DD. + */ + date: string; +}; diff --git a/packages/client-analytics/model/dailyClickThroughRates.ts b/packages/client-analytics/model/dailyClickThroughRates.ts new file mode 100644 index 000000000..bec5f12ac --- /dev/null +++ b/packages/client-analytics/model/dailyClickThroughRates.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DailyClickThroughRates = { + /** + * Click-through rate: calculated as the number of tracked searches with at least one click event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + rate: number | null; + + /** + * Number of clicks associated with this search. + */ + clickCount: number; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + trackedSearchCount: number; + + /** + * Date in the format YYYY-MM-DD. + */ + date: string; +}; diff --git a/packages/client-analytics/model/dailyConversionRates.ts b/packages/client-analytics/model/dailyConversionRates.ts new file mode 100644 index 000000000..d1599a4ce --- /dev/null +++ b/packages/client-analytics/model/dailyConversionRates.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DailyConversionRates = { + /** + * Conversion rate: calculated as the number of tracked searches with at least one conversion event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + rate: number | null; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + trackedSearchCount: number; + + /** + * Number of conversions from this search. + */ + conversionCount: number; + + /** + * Date in the format YYYY-MM-DD. + */ + date: string; +}; diff --git a/packages/client-analytics/model/dailyNoClickRates.ts b/packages/client-analytics/model/dailyNoClickRates.ts new file mode 100644 index 000000000..74addb9e1 --- /dev/null +++ b/packages/client-analytics/model/dailyNoClickRates.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DailyNoClickRates = { + /** + * No click rate: calculated as the number of tracked searches without clicks divided by the number of tracked searches. + */ + rate: number; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + count: number; + + /** + * Number of times this search was returned as a result without any click. + */ + noClickCount: number; + + /** + * Date in the format YYYY-MM-DD. + */ + date: string; +}; diff --git a/packages/client-analytics/model/dailyNoResultsRates.ts b/packages/client-analytics/model/dailyNoResultsRates.ts new file mode 100644 index 000000000..fb9148285 --- /dev/null +++ b/packages/client-analytics/model/dailyNoResultsRates.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DailyNoResultsRates = { + /** + * Date in the format YYYY-MM-DD. + */ + date: string; + + /** + * Number of searches without any results. + */ + noResultCount: number; + + /** + * Number of searches. + */ + count: number; + + /** + * No results rate: calculated as the number of searches with zero results divided by the total number of searches. + */ + rate: number; +}; diff --git a/packages/client-analytics/model/dailyPurchaseRates.ts b/packages/client-analytics/model/dailyPurchaseRates.ts new file mode 100644 index 000000000..1c54a3798 --- /dev/null +++ b/packages/client-analytics/model/dailyPurchaseRates.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DailyPurchaseRates = { + /** + * Purchase rate: calculated as the number of tracked searches with at least one purchase event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + rate: number | null; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + trackedSearchCount: number; + + /** + * Number of purchase events from this search. + */ + purchaseCount: number; + + /** + * Date in the format YYYY-MM-DD. + */ + date: string; +}; diff --git a/packages/client-analytics/model/dailyRevenue.ts b/packages/client-analytics/model/dailyRevenue.ts new file mode 100644 index 000000000..cfdc08a9e --- /dev/null +++ b/packages/client-analytics/model/dailyRevenue.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CurrencyCode } from './currencyCode'; + +export type DailyRevenue = { + /** + * Revenue associated with this search: broken down by currency. + */ + currencies: { [key: string]: CurrencyCode }; + + /** + * Date in the format YYYY-MM-DD. + */ + date: string; +}; diff --git a/packages/client-analytics/model/dailySearches.ts b/packages/client-analytics/model/dailySearches.ts new file mode 100644 index 000000000..12c7b7156 --- /dev/null +++ b/packages/client-analytics/model/dailySearches.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DailySearches = { + /** + * Date in the format YYYY-MM-DD. + */ + date: string; + + /** + * Number of occurrences. + */ + count: number; +}; diff --git a/packages/client-analytics/model/dailySearchesNoClicks.ts b/packages/client-analytics/model/dailySearchesNoClicks.ts new file mode 100644 index 000000000..378ce3664 --- /dev/null +++ b/packages/client-analytics/model/dailySearchesNoClicks.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DailySearchesNoClicks = { + /** + * Search query. + */ + search: string; + + /** + * Number of tracked searches. + */ + count: number; + + /** + * Number of results (hits). + */ + nbHits: number; +}; diff --git a/packages/client-analytics/model/dailySearchesNoResults.ts b/packages/client-analytics/model/dailySearchesNoResults.ts new file mode 100644 index 000000000..9e3dd5d38 --- /dev/null +++ b/packages/client-analytics/model/dailySearchesNoResults.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DailySearchesNoResults = { + /** + * Search query. + */ + search: string; + + /** + * Number of occurrences. + */ + count: number; + + /** + * Number of searches for this term with applied filters. + */ + withFilterCount: number; +}; diff --git a/packages/client-analytics/model/dailyUsers.ts b/packages/client-analytics/model/dailyUsers.ts new file mode 100644 index 000000000..77ba423b5 --- /dev/null +++ b/packages/client-analytics/model/dailyUsers.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DailyUsers = { + /** + * Date in the format YYYY-MM-DD. + */ + date: string; + + /** + * Number of unique users. + */ + count: number; +}; diff --git a/packages/client-analytics/model/direction.ts b/packages/client-analytics/model/direction.ts new file mode 100644 index 000000000..73073b314 --- /dev/null +++ b/packages/client-analytics/model/direction.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Direction = 'asc' | 'desc'; diff --git a/packages/client-analytics/model/errorBase.ts b/packages/client-analytics/model/errorBase.ts new file mode 100644 index 000000000..960e509cb --- /dev/null +++ b/packages/client-analytics/model/errorBase.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Error. + */ +export type ErrorBase = Record & { + message?: string; +}; diff --git a/packages/client-analytics/model/getAddToCartRateResponse.ts b/packages/client-analytics/model/getAddToCartRateResponse.ts new file mode 100644 index 000000000..7ee441596 --- /dev/null +++ b/packages/client-analytics/model/getAddToCartRateResponse.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DailyAddToCartRates } from './dailyAddToCartRates'; + +export type GetAddToCartRateResponse = { + /** + * Add-to-cart rate: calculated as the number of tracked searches with at least one add-to-cart event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + rate: number | null; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + trackedSearchCount: number; + + /** + * Number of add-to-cart events from this search. + */ + addToCartCount: number; + + /** + * Daily add-to-cart rates. + */ + dates: Array; +}; diff --git a/packages/client-analytics/model/getAverageClickPositionResponse.ts b/packages/client-analytics/model/getAverageClickPositionResponse.ts new file mode 100644 index 000000000..53264bd55 --- /dev/null +++ b/packages/client-analytics/model/getAverageClickPositionResponse.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DailyAverageClicks } from './dailyAverageClicks'; + +export type GetAverageClickPositionResponse = { + /** + * Average position of a clicked search result in the list of search results. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + average: number | null; + + /** + * Number of clicks associated with this search. + */ + clickCount: number; + + /** + * Daily average click positions. + */ + dates: Array; +}; diff --git a/packages/client-analytics/model/getClickPositionsResponse.ts b/packages/client-analytics/model/getClickPositionsResponse.ts new file mode 100644 index 000000000..1f9d1b073 --- /dev/null +++ b/packages/client-analytics/model/getClickPositionsResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ClickPosition } from './clickPosition'; + +export type GetClickPositionsResponse = { + /** + * List of positions in the search results and clicks associated with this search. + */ + positions: Array; +}; diff --git a/packages/client-analytics/model/getClickThroughRateResponse.ts b/packages/client-analytics/model/getClickThroughRateResponse.ts new file mode 100644 index 000000000..1d11f2b53 --- /dev/null +++ b/packages/client-analytics/model/getClickThroughRateResponse.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DailyClickThroughRates } from './dailyClickThroughRates'; + +export type GetClickThroughRateResponse = { + /** + * Click-through rate: calculated as the number of tracked searches with at least one click event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + rate: number | null; + + /** + * Number of clicks associated with this search. + */ + clickCount: number; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + trackedSearchCount: number; + + /** + * Daily click-through rates. + */ + dates: Array; +}; diff --git a/packages/client-analytics/model/getConversionRateResponse.ts b/packages/client-analytics/model/getConversionRateResponse.ts new file mode 100644 index 000000000..a95863874 --- /dev/null +++ b/packages/client-analytics/model/getConversionRateResponse.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DailyConversionRates } from './dailyConversionRates'; + +export type GetConversionRateResponse = { + /** + * Conversion rate: calculated as the number of tracked searches with at least one conversion event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + rate: number | null; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + trackedSearchCount: number; + + /** + * Number of conversions from this search. + */ + conversionCount: number; + + /** + * Daily conversion rates. + */ + dates: Array; +}; diff --git a/packages/client-analytics/model/getNoClickRateResponse.ts b/packages/client-analytics/model/getNoClickRateResponse.ts new file mode 100644 index 000000000..d57236034 --- /dev/null +++ b/packages/client-analytics/model/getNoClickRateResponse.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DailyNoClickRates } from './dailyNoClickRates'; + +export type GetNoClickRateResponse = { + /** + * No click rate: calculated as the number of tracked searches without clicks divided by the number of tracked searches. + */ + rate: number; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + count: number; + + /** + * Number of times this search was returned as a result without any click. + */ + noClickCount: number; + + /** + * Daily no click rates. + */ + dates: Array; +}; diff --git a/packages/client-analytics/model/getNoResultsRateResponse.ts b/packages/client-analytics/model/getNoResultsRateResponse.ts new file mode 100644 index 000000000..c6e4810e9 --- /dev/null +++ b/packages/client-analytics/model/getNoResultsRateResponse.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DailyNoResultsRates } from './dailyNoResultsRates'; + +export type GetNoResultsRateResponse = { + /** + * No results rate: calculated as the number of searches with zero results divided by the total number of searches. + */ + rate: number; + + /** + * Number of searches. + */ + count: number; + + /** + * Number of searches without any results. + */ + noResultCount: number; + + /** + * Daily no results rates. + */ + dates: Array; +}; diff --git a/packages/client-analytics/model/getPurchaseRateResponse.ts b/packages/client-analytics/model/getPurchaseRateResponse.ts new file mode 100644 index 000000000..f4ca5b889 --- /dev/null +++ b/packages/client-analytics/model/getPurchaseRateResponse.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DailyPurchaseRates } from './dailyPurchaseRates'; + +export type GetPurchaseRateResponse = { + /** + * Purchase rate: calculated as the number of tracked searches with at least one purchase event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + rate: number | null; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + trackedSearchCount: number; + + /** + * Number of purchase events from this search. + */ + purchaseCount: number; + + /** + * Daily purchase rates. + */ + dates: Array; +}; diff --git a/packages/client-analytics/model/getRevenue.ts b/packages/client-analytics/model/getRevenue.ts new file mode 100644 index 000000000..72be26323 --- /dev/null +++ b/packages/client-analytics/model/getRevenue.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CurrencyCode } from './currencyCode'; +import type { DailyRevenue } from './dailyRevenue'; + +export type GetRevenue = { + /** + * Revenue associated with this search: broken down by currency. + */ + currencies: { [key: string]: CurrencyCode }; + + /** + * Daily revenue. + */ + dates: Array; +}; diff --git a/packages/client-analytics/model/getSearchesCountResponse.ts b/packages/client-analytics/model/getSearchesCountResponse.ts new file mode 100644 index 000000000..5c8ce8271 --- /dev/null +++ b/packages/client-analytics/model/getSearchesCountResponse.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DailySearches } from './dailySearches'; + +export type GetSearchesCountResponse = { + /** + * Number of occurrences. + */ + count: number; + + /** + * Daily number of searches. + */ + dates: Array; +}; diff --git a/packages/client-analytics/model/getSearchesNoClicksResponse.ts b/packages/client-analytics/model/getSearchesNoClicksResponse.ts new file mode 100644 index 000000000..f4296a31e --- /dev/null +++ b/packages/client-analytics/model/getSearchesNoClicksResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DailySearchesNoClicks } from './dailySearchesNoClicks'; + +export type GetSearchesNoClicksResponse = { + /** + * Searches without any clicks. + */ + searches: Array; +}; diff --git a/packages/client-analytics/model/getSearchesNoResultsResponse.ts b/packages/client-analytics/model/getSearchesNoResultsResponse.ts new file mode 100644 index 000000000..33ca553c2 --- /dev/null +++ b/packages/client-analytics/model/getSearchesNoResultsResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DailySearchesNoResults } from './dailySearchesNoResults'; + +export type GetSearchesNoResultsResponse = { + /** + * Searches without results. + */ + searches: Array; +}; diff --git a/packages/client-analytics/model/getStatusResponse.ts b/packages/client-analytics/model/getStatusResponse.ts new file mode 100644 index 000000000..6237d59d2 --- /dev/null +++ b/packages/client-analytics/model/getStatusResponse.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type GetStatusResponse = { + /** + * Date and time when the object was updated, in RFC 3339 format. + */ + updatedAt: string | null; +}; diff --git a/packages/client-analytics/model/getTopCountriesResponse.ts b/packages/client-analytics/model/getTopCountriesResponse.ts new file mode 100644 index 000000000..4490f267b --- /dev/null +++ b/packages/client-analytics/model/getTopCountriesResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TopCountry } from './topCountry'; + +export type GetTopCountriesResponse = { + /** + * Countries and number of searches. + */ + countries: Array; +}; diff --git a/packages/client-analytics/model/getTopFilterAttribute.ts b/packages/client-analytics/model/getTopFilterAttribute.ts new file mode 100644 index 000000000..221c8f0b6 --- /dev/null +++ b/packages/client-analytics/model/getTopFilterAttribute.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type GetTopFilterAttribute = { + /** + * Attribute name. + */ + attribute: string; + + /** + * Number of occurrences. + */ + count: number; +}; diff --git a/packages/client-analytics/model/getTopFilterAttributesResponse.ts b/packages/client-analytics/model/getTopFilterAttributesResponse.ts new file mode 100644 index 000000000..a79aa8028 --- /dev/null +++ b/packages/client-analytics/model/getTopFilterAttributesResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { GetTopFilterAttribute } from './getTopFilterAttribute'; + +export type GetTopFilterAttributesResponse = { + /** + * Most frequent filters. + */ + attributes: Array; +}; diff --git a/packages/client-analytics/model/getTopFilterForAttribute.ts b/packages/client-analytics/model/getTopFilterForAttribute.ts new file mode 100644 index 000000000..1dbf29bfc --- /dev/null +++ b/packages/client-analytics/model/getTopFilterForAttribute.ts @@ -0,0 +1,22 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Operator } from './operator'; + +export type GetTopFilterForAttribute = { + /** + * Attribute name. + */ + attribute: string; + + operator: Operator; + + /** + * Attribute value. + */ + value: string; + + /** + * Number of occurrences. + */ + count: number; +}; diff --git a/packages/client-analytics/model/getTopFilterForAttributeResponse.ts b/packages/client-analytics/model/getTopFilterForAttributeResponse.ts new file mode 100644 index 000000000..6e4a3dc0d --- /dev/null +++ b/packages/client-analytics/model/getTopFilterForAttributeResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { GetTopFilterForAttribute } from './getTopFilterForAttribute'; + +export type GetTopFilterForAttributeResponse = { + /** + * Filter values for an attribute. + */ + values: Array; +}; diff --git a/packages/client-analytics/model/getTopFiltersNoResultsResponse.ts b/packages/client-analytics/model/getTopFiltersNoResultsResponse.ts new file mode 100644 index 000000000..b3cc8d3e4 --- /dev/null +++ b/packages/client-analytics/model/getTopFiltersNoResultsResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { GetTopFiltersNoResultsValues } from './getTopFiltersNoResultsValues'; + +export type GetTopFiltersNoResultsResponse = { + /** + * Filters for searches without any results. If null, the search term specified with the `search` parameter isn\'t a search without results, or the `search` parameter is absent from the request. + */ + values: Array | null; +}; diff --git a/packages/client-analytics/model/getTopFiltersNoResultsValue.ts b/packages/client-analytics/model/getTopFiltersNoResultsValue.ts new file mode 100644 index 000000000..9ee048b36 --- /dev/null +++ b/packages/client-analytics/model/getTopFiltersNoResultsValue.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Operator } from './operator'; + +export type GetTopFiltersNoResultsValue = { + /** + * Attribute name. + */ + attribute: string; + + operator: Operator; + + /** + * Attribute value. + */ + value: string; +}; diff --git a/packages/client-analytics/model/getTopFiltersNoResultsValues.ts b/packages/client-analytics/model/getTopFiltersNoResultsValues.ts new file mode 100644 index 000000000..852c9c229 --- /dev/null +++ b/packages/client-analytics/model/getTopFiltersNoResultsValues.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { GetTopFiltersNoResultsValue } from './getTopFiltersNoResultsValue'; + +export type GetTopFiltersNoResultsValues = { + /** + * Number of occurrences. + */ + count: number; + + /** + * Filters with no results. + */ + values: Array; +}; diff --git a/packages/client-analytics/model/getTopHitsResponse.ts b/packages/client-analytics/model/getTopHitsResponse.ts new file mode 100644 index 000000000..735cf41db --- /dev/null +++ b/packages/client-analytics/model/getTopHitsResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TopHitsResponse } from './topHitsResponse'; +import type { TopHitsResponseWithAnalytics } from './topHitsResponseWithAnalytics'; +import type { TopHitsResponseWithRevenueAnalytics } from './topHitsResponseWithRevenueAnalytics'; + +export type GetTopHitsResponse = TopHitsResponse | TopHitsResponseWithAnalytics | TopHitsResponseWithRevenueAnalytics; diff --git a/packages/client-analytics/model/getTopSearchesResponse.ts b/packages/client-analytics/model/getTopSearchesResponse.ts new file mode 100644 index 000000000..1b8b9c029 --- /dev/null +++ b/packages/client-analytics/model/getTopSearchesResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TopSearchesResponse } from './topSearchesResponse'; +import type { TopSearchesResponseWithAnalytics } from './topSearchesResponseWithAnalytics'; +import type { TopSearchesResponseWithRevenueAnalytics } from './topSearchesResponseWithRevenueAnalytics'; + +export type GetTopSearchesResponse = + | TopSearchesResponse + | TopSearchesResponseWithAnalytics + | TopSearchesResponseWithRevenueAnalytics; diff --git a/packages/client-analytics/model/getUsersCountResponse.ts b/packages/client-analytics/model/getUsersCountResponse.ts new file mode 100644 index 000000000..226abcef0 --- /dev/null +++ b/packages/client-analytics/model/getUsersCountResponse.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DailyUsers } from './dailyUsers'; + +export type GetUsersCountResponse = { + /** + * Number of unique users. + */ + count: number; + + /** + * Daily number of unique users. + */ + dates: Array; +}; diff --git a/packages/client-analytics/model/index.ts b/packages/client-analytics/model/index.ts new file mode 100644 index 000000000..326185c4f --- /dev/null +++ b/packages/client-analytics/model/index.ts @@ -0,0 +1,58 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export * from './clickPosition'; +export * from './clientMethodProps'; +export * from './currencyCode'; +export * from './dailyAddToCartRates'; +export * from './dailyAverageClicks'; +export * from './dailyClickThroughRates'; +export * from './dailyConversionRates'; +export * from './dailyNoClickRates'; +export * from './dailyNoResultsRates'; +export * from './dailyPurchaseRates'; +export * from './dailyRevenue'; +export * from './dailySearches'; +export * from './dailySearchesNoClicks'; +export * from './dailySearchesNoResults'; +export * from './dailyUsers'; +export * from './direction'; +export * from './errorBase'; +export * from './getAddToCartRateResponse'; +export * from './getAverageClickPositionResponse'; +export * from './getClickPositionsResponse'; +export * from './getClickThroughRateResponse'; +export * from './getConversionRateResponse'; +export * from './getNoClickRateResponse'; +export * from './getNoResultsRateResponse'; +export * from './getPurchaseRateResponse'; +export * from './getRevenue'; +export * from './getSearchesCountResponse'; +export * from './getSearchesNoClicksResponse'; +export * from './getSearchesNoResultsResponse'; +export * from './getStatusResponse'; +export * from './getTopCountriesResponse'; +export * from './getTopFilterAttribute'; +export * from './getTopFilterAttributesResponse'; +export * from './getTopFilterForAttribute'; +export * from './getTopFilterForAttributeResponse'; +export * from './getTopFiltersNoResultsResponse'; +export * from './getTopFiltersNoResultsValue'; +export * from './getTopFiltersNoResultsValues'; +export * from './getTopHitsResponse'; +export * from './getTopSearchesResponse'; +export * from './getUsersCountResponse'; +export * from './operator'; +export * from './orderBy'; +export * from './topCountry'; +export * from './topHit'; +export * from './topHitsResponse'; +export * from './topHitsResponseWithAnalytics'; +export * from './topHitsResponseWithRevenueAnalytics'; +export * from './topHitWithAnalytics'; +export * from './topHitWithRevenueAnalytics'; +export * from './topSearch'; +export * from './topSearchesResponse'; +export * from './topSearchesResponseWithAnalytics'; +export * from './topSearchesResponseWithRevenueAnalytics'; +export * from './topSearchWithAnalytics'; +export * from './topSearchWithRevenueAnalytics'; diff --git a/packages/client-analytics/model/operator.ts b/packages/client-analytics/model/operator.ts new file mode 100644 index 000000000..71eb38cfc --- /dev/null +++ b/packages/client-analytics/model/operator.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Character that characterizes how the filter is applied. For example, for a facet filter `facet:value`, `:` is the operator. For a numeric filter `count>50`, `>` is the operator. + */ +export type Operator = ':' | '<' | '<=' | '=' | '!=' | '>' | '>='; diff --git a/packages/client-analytics/model/orderBy.ts b/packages/client-analytics/model/orderBy.ts new file mode 100644 index 000000000..0e354488f --- /dev/null +++ b/packages/client-analytics/model/orderBy.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Attribute by which to order the response items. If the `clickAnalytics` parameter is false, only `searchCount` is available. + */ +export type OrderBy = 'searchCount' | 'clickThroughRate' | 'conversionRate' | 'averageClickPosition'; diff --git a/packages/client-analytics/model/topCountry.ts b/packages/client-analytics/model/topCountry.ts new file mode 100644 index 000000000..4bf2db6b3 --- /dev/null +++ b/packages/client-analytics/model/topCountry.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type TopCountry = { + /** + * Country code. + */ + country: string; + + /** + * Number of occurrences. + */ + count: number; +}; diff --git a/packages/client-analytics/model/topHit.ts b/packages/client-analytics/model/topHit.ts new file mode 100644 index 000000000..7f003f3d8 --- /dev/null +++ b/packages/client-analytics/model/topHit.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type TopHit = { + /** + * Object ID of a record returned as a search result. + */ + hit: string; + + /** + * Number of occurrences. + */ + count: number; +}; diff --git a/packages/client-analytics/model/topHitWithAnalytics.ts b/packages/client-analytics/model/topHitWithAnalytics.ts new file mode 100644 index 000000000..7069ec8df --- /dev/null +++ b/packages/client-analytics/model/topHitWithAnalytics.ts @@ -0,0 +1,38 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type TopHitWithAnalytics = { + /** + * Object ID of a record returned as a search result. + */ + hit: string; + + /** + * Number of occurrences. + */ + count: number; + + /** + * Click-through rate: calculated as the number of tracked searches with at least one click event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + clickThroughRate: number | null; + + /** + * Conversion rate: calculated as the number of tracked searches with at least one conversion event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + conversionRate: number | null; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + trackedHitCount: number; + + /** + * Number of clicks associated with this search. + */ + clickCount: number; + + /** + * Number of conversions from this search. + */ + conversionCount: number; +}; diff --git a/packages/client-analytics/model/topHitWithRevenueAnalytics.ts b/packages/client-analytics/model/topHitWithRevenueAnalytics.ts new file mode 100644 index 000000000..0edde9367 --- /dev/null +++ b/packages/client-analytics/model/topHitWithRevenueAnalytics.ts @@ -0,0 +1,65 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CurrencyCode } from './currencyCode'; + +export type TopHitWithRevenueAnalytics = { + /** + * Object ID of a record returned as a search result. + */ + hit: string; + + /** + * Number of occurrences. + */ + count: number; + + /** + * Click-through rate: calculated as the number of tracked searches with at least one click event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + clickThroughRate: number | null; + + /** + * Conversion rate: calculated as the number of tracked searches with at least one conversion event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + conversionRate: number | null; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + trackedHitCount: number; + + /** + * Number of clicks associated with this search. + */ + clickCount: number; + + /** + * Number of conversions from this search. + */ + conversionCount: number; + + /** + * Add-to-cart rate: calculated as the number of tracked searches with at least one add-to-cart event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + addToCartRate: number | null; + + /** + * Number of add-to-cart events from this search. + */ + addToCartCount: number; + + /** + * Purchase rate: calculated as the number of tracked searches with at least one purchase event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + purchaseRate: number | null; + + /** + * Number of purchase events from this search. + */ + purchaseCount: number; + + /** + * Revenue associated with this search: broken down by currency. + */ + currencies: { [key: string]: CurrencyCode }; +}; diff --git a/packages/client-analytics/model/topHitsResponse.ts b/packages/client-analytics/model/topHitsResponse.ts new file mode 100644 index 000000000..aa299f394 --- /dev/null +++ b/packages/client-analytics/model/topHitsResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TopHit } from './topHit'; + +export type TopHitsResponse = { + /** + * Most frequent search results. + */ + hits: Array; +}; diff --git a/packages/client-analytics/model/topHitsResponseWithAnalytics.ts b/packages/client-analytics/model/topHitsResponseWithAnalytics.ts new file mode 100644 index 000000000..7a88efce5 --- /dev/null +++ b/packages/client-analytics/model/topHitsResponseWithAnalytics.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TopHitWithAnalytics } from './topHitWithAnalytics'; + +export type TopHitsResponseWithAnalytics = { + /** + * Most frequent search results with click and conversion metrics. + */ + hits: Array; +}; diff --git a/packages/client-analytics/model/topHitsResponseWithRevenueAnalytics.ts b/packages/client-analytics/model/topHitsResponseWithRevenueAnalytics.ts new file mode 100644 index 000000000..e4716c74b --- /dev/null +++ b/packages/client-analytics/model/topHitsResponseWithRevenueAnalytics.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TopHitWithRevenueAnalytics } from './topHitWithRevenueAnalytics'; + +export type TopHitsResponseWithRevenueAnalytics = { + /** + * Most frequent search results with click, conversion, and revenue metrics. + */ + hits: Array; +}; diff --git a/packages/client-analytics/model/topSearch.ts b/packages/client-analytics/model/topSearch.ts new file mode 100644 index 000000000..a5de4f284 --- /dev/null +++ b/packages/client-analytics/model/topSearch.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type TopSearch = { + /** + * Search query. + */ + search: string; + + /** + * Number of searches. + */ + count: number; + + /** + * Number of results (hits). + */ + nbHits: number; +}; diff --git a/packages/client-analytics/model/topSearchWithAnalytics.ts b/packages/client-analytics/model/topSearchWithAnalytics.ts new file mode 100644 index 000000000..911769cb5 --- /dev/null +++ b/packages/client-analytics/model/topSearchWithAnalytics.ts @@ -0,0 +1,55 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ClickPosition } from './clickPosition'; + +export type TopSearchWithAnalytics = { + /** + * Search query. + */ + search: string; + + /** + * Number of searches. + */ + count: number; + + /** + * Click-through rate: calculated as the number of tracked searches with at least one click event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + clickThroughRate: number | null; + + /** + * Average position of a clicked search result in the list of search results. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + averageClickPosition: number | null; + + /** + * List of positions in the search results and clicks associated with this search. + */ + clickPositions: Array; + + /** + * Conversion rate: calculated as the number of tracked searches with at least one conversion event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + conversionRate: number | null; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + trackedSearchCount: number; + + /** + * Number of clicks associated with this search. + */ + clickCount: number; + + /** + * Number of conversions from this search. + */ + conversionCount: number; + + /** + * Number of results (hits). + */ + nbHits: number; +}; diff --git a/packages/client-analytics/model/topSearchWithRevenueAnalytics.ts b/packages/client-analytics/model/topSearchWithRevenueAnalytics.ts new file mode 100644 index 000000000..55873c453 --- /dev/null +++ b/packages/client-analytics/model/topSearchWithRevenueAnalytics.ts @@ -0,0 +1,81 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ClickPosition } from './clickPosition'; +import type { CurrencyCode } from './currencyCode'; + +export type TopSearchWithRevenueAnalytics = { + /** + * Search query. + */ + search: string; + + /** + * Number of searches. + */ + count: number; + + /** + * Click-through rate: calculated as the number of tracked searches with at least one click event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + clickThroughRate: number | null; + + /** + * Average position of a clicked search result in the list of search results. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + averageClickPosition: number | null; + + /** + * List of positions in the search results and clicks associated with this search. + */ + clickPositions: Array; + + /** + * Conversion rate: calculated as the number of tracked searches with at least one conversion event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + conversionRate: number | null; + + /** + * Number of tracked searches. Tracked searches are search requests where the `clickAnalytics` parameter is true. + */ + trackedSearchCount: number; + + /** + * Number of clicks associated with this search. + */ + clickCount: number; + + /** + * Number of conversions from this search. + */ + conversionCount: number; + + /** + * Number of results (hits). + */ + nbHits: number; + + /** + * Revenue associated with this search: broken down by currency. + */ + currencies: { [key: string]: CurrencyCode }; + + /** + * Add-to-cart rate: calculated as the number of tracked searches with at least one add-to-cart event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + addToCartRate: number | null; + + /** + * Number of add-to-cart events from this search. + */ + addToCartCount: number; + + /** + * Purchase rate: calculated as the number of tracked searches with at least one purchase event divided by the number of tracked searches. If null, Algolia didn\'t receive any search requests with `clickAnalytics` set to true. + */ + purchaseRate: number | null; + + /** + * Number of purchase events from this search. + */ + purchaseCount: number; +}; diff --git a/packages/client-analytics/model/topSearchesResponse.ts b/packages/client-analytics/model/topSearchesResponse.ts new file mode 100644 index 000000000..0db8aac7a --- /dev/null +++ b/packages/client-analytics/model/topSearchesResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TopSearch } from './topSearch'; + +export type TopSearchesResponse = { + /** + * Most popular searches and their number of search results (hits). + */ + searches: Array; +}; diff --git a/packages/client-analytics/model/topSearchesResponseWithAnalytics.ts b/packages/client-analytics/model/topSearchesResponseWithAnalytics.ts new file mode 100644 index 000000000..a7f70ab23 --- /dev/null +++ b/packages/client-analytics/model/topSearchesResponseWithAnalytics.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TopSearchWithAnalytics } from './topSearchWithAnalytics'; + +export type TopSearchesResponseWithAnalytics = { + /** + * Most popular searches and their associated click and conversion metrics. + */ + searches: Array; +}; diff --git a/packages/client-analytics/model/topSearchesResponseWithRevenueAnalytics.ts b/packages/client-analytics/model/topSearchesResponseWithRevenueAnalytics.ts new file mode 100644 index 000000000..e69a68c26 --- /dev/null +++ b/packages/client-analytics/model/topSearchesResponseWithRevenueAnalytics.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TopSearchWithRevenueAnalytics } from './topSearchWithRevenueAnalytics'; + +export type TopSearchesResponseWithRevenueAnalytics = { + /** + * Most popular searches, including their click and revenue metrics. + */ + searches: Array; +}; diff --git a/packages/client-analytics/package.json b/packages/client-analytics/package.json index 467addb8a..51e895b50 100644 --- a/packages/client-analytics/package.json +++ b/packages/client-analytics/package.json @@ -1,24 +1,68 @@ { - "name": "@algolia/client-analytics", - "version": "4.13.1", - "private": false, + "version": "5.23.3", "repository": { "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/client-analytics#readme", + "type": "module", "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/client-analytics.esm.js", - "types": "dist/client-analytics.d.ts", + "author": "Algolia", + "scripts": { + "build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js", + "clean": "rm -rf ./dist || true", + "test:bundle": "publint . && attw --pack ." + }, + "name": "@algolia/client-analytics", + "description": "JavaScript client for client-analytics", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/builds/node.js", + "module": "./dist/builds/node.js", + "require": "./dist/builds/node.cjs" + }, + "worker": { + "types": "./dist/worker.d.ts", + "default": "./dist/builds/worker.js" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/builds/browser.js", + "import": "./dist/builds/browser.js", + "default": "./dist/builds/browser.umd.js" + } + }, + "./dist/builds/*": "./dist/builds/*.js" + }, + "jsdelivr": "./dist/builds/browser.umd.js", + "unpkg": "./dist/builds/browser.umd.js", + "react-native": "./dist/builds/browser.js", "files": [ + "dist", "index.js", - "dist" + "index.d.ts" ], "dependencies": { - "@algolia/client-common": "4.13.1", - "@algolia/client-search": "4.13.1", - "@algolia/requester-common": "4.13.1", - "@algolia/transporter": "4.13.1" + "@algolia/client-common": "5.23.3", + "@algolia/requester-browser-xhr": "5.23.3", + "@algolia/requester-fetch": "5.23.3", + "@algolia/requester-node-http": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "publint": "0.3.10", + "rollup": "4.39.0", + "tsup": "8.4.0", + "typescript": "5.8.3" + }, + "engines": { + "node": ">= 14.0.0" } } diff --git a/packages/client-analytics/rollup.config.js b/packages/client-analytics/rollup.config.js new file mode 100644 index 000000000..b6e4066eb --- /dev/null +++ b/packages/client-analytics/rollup.config.js @@ -0,0 +1,17 @@ +export default [ + { + input: 'dist/builds/browser.min.js', + external: ['dom'], + cache: false, + output: { + esModule: false, + file: 'dist/builds/browser.umd.js', + name: '@algolia/client-analytics', + format: 'umd', + sourcemap: false, + globals: { + ['analyticsClient']: 'analyticsClient', + }, + }, + }, +]; diff --git a/packages/client-analytics/src/__tests__/integration/ab-testing.test.ts b/packages/client-analytics/src/__tests__/integration/ab-testing.test.ts deleted file mode 100644 index 8ee4918eb..000000000 --- a/packages/client-analytics/src/__tests__/integration/ab-testing.test.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { createRetryablePromise } from '@algolia/client-common'; -import { Transporter } from '@algolia/transporter'; - -import { ABTest, Variant } from '../..'; -import { createFaker } from '../../../../client-common/src/__tests__/createFaker'; -import { waitResponses } from '../../../../client-common/src/__tests__/helpers'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; -import { AddABTestResponse } from '../../types'; - -const testSuite = new TestSuite('ab_testing'); - -const createRetryableTransporter = (client: Transporter): Transporter => { - return new Proxy(client, { - get(obj: any, method: string) { - return (...args: any) => { - return createRetryablePromise(retry => { - return obj[method](...args).catch((err: Error) => { - if (err.message === 'Too Many Requests') { - return retry(); - } - - throw err; - }); - }); - }; - }, - }); -}; - -test(testSuite.testName, async () => { - const index1 = testSuite.makeIndex(); - const index2 = testSuite.makeIndex(); - const client = testSuite.makeSearchClient(); - const analytics = client.initAnalytics(); - - // @ts-ignore - analytics.transporter = createRetryableTransporter(analytics.transporter); - const today = new Date(); - - // @ts-ignore - analytics.transporter.timeouts = { - connect: 2, - read: 5, - write: 30, - }; - - // Create the two indices by adding a dummy object in each of them - const object = createFaker().object('one'); - await waitResponses([index1.saveObject(object), index2.saveObject(object)]); - - const abTestName = testSuite.makeIndexName(); - const abTest: ABTest = { - name: abTestName, - variants: [ - { - index: index1.indexName, - trafficPercentage: 60, - description: 'a description', - }, - { index: index2.indexName, trafficPercentage: 40 }, - ], - endAt: new Date(today.getTime() + 24 * 3600 * 1000).toISOString(), - }; - - const addABTestResponse = await createRetryablePromise(async retry => { - try { - return await analytics.addABTest(abTest); - } catch (e) { - if (e.message !== 'Index does not exist') { - throw e; - } - - return retry(); - } - }); - - const abTestID = addABTestResponse.abTestID; - await client.initIndex(addABTestResponse.index).waitTask(addABTestResponse.taskID); - - const compareVariants = (got: readonly Variant[], expected: readonly Variant[]) => { - const convertedVariants = got.map(v => { - const hasDescription = v.description && v.description.length !== 0; - - return { - index: v.index, - trafficPercentage: v.trafficPercentage, - ...(hasDescription ? { description: v.description } : {}), - }; - }); - - expect(convertedVariants).toEqual( - // @ts-ignore - expect.arrayContaining(expected) - ); - expect(expected).toEqual(expect.arrayContaining(convertedVariants)); - }; - - const compareDateStrings = (got: string, expected: string) => { - expect(new Date(got).getTime()).toBe(new Date(expected).getTime()); - }; - - // Retrieve the AB test and check it corresponds to the original one - { - const found = await analytics.getABTest(abTestID); - expect(found.abTestID).toBe(abTestID); - expect(found.name).toBe(abTest.name); - compareDateStrings(found.endAt, abTest.endAt); - compareVariants(found.variants, abTest.variants); - } - - // Find the AB test among all the existing AB tests and check it - // corresponds to the original one - { - const all = await analytics.getABTests(); - const found = all.abtests && all.abtests.find(t => t.abTestID === abTestID); - if (!found) { - throw new Error('Ab test not found.'); - } - - expect(found.abTestID).toBe(abTestID); - expect(found.name).toBe(abTest.name); - compareDateStrings(found.endAt, abTest.endAt); - compareVariants(found.variants, abTest.variants); - } - - // Stop the AB test - const stopABTestResponse = await analytics.stopABTest(abTestID); - await index1.waitTask(stopABTestResponse.taskID); - - // Check the AB test still exists but is stopped - await expect(analytics.getABTest(abTestID)).resolves.toMatchObject({ - status: 'stopped', - }); - - // Delete the AB test - const deleteABTestResponse = await analytics.deleteABTest(abTestID); - await index1.waitTask(deleteABTestResponse.taskID); - - // Check the AB test doesn't exist anymore - await expect(analytics.getABTest(abTestID)).rejects.toMatchObject({ - name: 'ApiError', - message: 'ABTestID not found', - status: 404, - }); -}); diff --git a/packages/client-analytics/src/__tests__/unit/analytics-client.test.ts b/packages/client-analytics/src/__tests__/unit/analytics-client.test.ts deleted file mode 100644 index 2020152cb..000000000 --- a/packages/client-analytics/src/__tests__/unit/analytics-client.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const analyticsClient = new TestSuite().algoliasearch('appId', 'apiKey').initAnalytics(); - -describe('analytics client', () => { - it('uses region to define the host', () => { - expect(analyticsClient.transporter.hosts[0].url).toBe('analytics.us.algolia.com'); - }); - - it('sets default headers', () => { - expect(analyticsClient.transporter.headers).toEqual({ - 'content-type': 'application/json', - 'x-algolia-application-id': 'appId', - 'x-algolia-api-key': 'apiKey', - }); - - expect(analyticsClient.transporter.queryParameters).toEqual({}); - }); -}); diff --git a/packages/client-analytics/src/analyticsClient.ts b/packages/client-analytics/src/analyticsClient.ts new file mode 100644 index 000000000..c42c58e7a --- /dev/null +++ b/packages/client-analytics/src/analyticsClient.ts @@ -0,0 +1,1397 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { + CreateClientOptions, + Headers, + Host, + QueryParameters, + Request, + RequestOptions, +} from '@algolia/client-common'; +import { createAuth, createTransporter, getAlgoliaAgent } from '@algolia/client-common'; + +import type { GetAddToCartRateResponse } from '../model/getAddToCartRateResponse'; +import type { GetAverageClickPositionResponse } from '../model/getAverageClickPositionResponse'; +import type { GetClickPositionsResponse } from '../model/getClickPositionsResponse'; +import type { GetClickThroughRateResponse } from '../model/getClickThroughRateResponse'; +import type { GetConversionRateResponse } from '../model/getConversionRateResponse'; +import type { GetNoClickRateResponse } from '../model/getNoClickRateResponse'; +import type { GetNoResultsRateResponse } from '../model/getNoResultsRateResponse'; +import type { GetPurchaseRateResponse } from '../model/getPurchaseRateResponse'; +import type { GetRevenue } from '../model/getRevenue'; +import type { GetSearchesCountResponse } from '../model/getSearchesCountResponse'; +import type { GetSearchesNoClicksResponse } from '../model/getSearchesNoClicksResponse'; +import type { GetSearchesNoResultsResponse } from '../model/getSearchesNoResultsResponse'; +import type { GetStatusResponse } from '../model/getStatusResponse'; +import type { GetTopCountriesResponse } from '../model/getTopCountriesResponse'; +import type { GetTopFilterAttributesResponse } from '../model/getTopFilterAttributesResponse'; +import type { GetTopFilterForAttributeResponse } from '../model/getTopFilterForAttributeResponse'; +import type { GetTopFiltersNoResultsResponse } from '../model/getTopFiltersNoResultsResponse'; +import type { GetTopHitsResponse } from '../model/getTopHitsResponse'; +import type { GetTopSearchesResponse } from '../model/getTopSearchesResponse'; +import type { GetUsersCountResponse } from '../model/getUsersCountResponse'; + +import type { + CustomDeleteProps, + CustomGetProps, + CustomPostProps, + CustomPutProps, + GetAddToCartRateProps, + GetAverageClickPositionProps, + GetClickPositionsProps, + GetClickThroughRateProps, + GetConversionRateProps, + GetNoClickRateProps, + GetNoResultsRateProps, + GetPurchaseRateProps, + GetRevenueProps, + GetSearchesCountProps, + GetSearchesNoClicksProps, + GetSearchesNoResultsProps, + GetStatusProps, + GetTopCountriesProps, + GetTopFilterAttributesProps, + GetTopFilterForAttributeProps, + GetTopFiltersNoResultsProps, + GetTopHitsProps, + GetTopSearchesProps, + GetUsersCountProps, +} from '../model/clientMethodProps'; + +export const apiClientVersion = '5.23.3'; + +export const REGIONS = ['de', 'us'] as const; +export type Region = (typeof REGIONS)[number]; +export type RegionOptions = { region?: Region }; + +function getDefaultHosts(region?: Region): Host[] { + const url = !region ? 'analytics.algolia.com' : 'analytics.{region}.algolia.com'.replace('{region}', region); + + return [{ url, accept: 'readWrite', protocol: 'https' }]; +} + +export function createAnalyticsClient({ + appId: appIdOption, + apiKey: apiKeyOption, + authMode, + algoliaAgents, + region: regionOption, + ...options +}: CreateClientOptions & RegionOptions) { + const auth = createAuth(appIdOption, apiKeyOption, authMode); + const transporter = createTransporter({ + hosts: getDefaultHosts(regionOption), + ...options, + algoliaAgent: getAlgoliaAgent({ + algoliaAgents, + client: 'Analytics', + version: apiClientVersion, + }), + baseHeaders: { + 'content-type': 'text/plain', + ...auth.headers(), + ...options.baseHeaders, + }, + baseQueryParameters: { + ...auth.queryParameters(), + ...options.baseQueryParameters, + }, + }); + + return { + transporter, + + /** + * The `appId` currently in use. + */ + appId: appIdOption, + + /** + * The `apiKey` currently in use. + */ + apiKey: apiKeyOption, + + /** + * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties. + */ + clearCache(): Promise { + return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => undefined); + }, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return transporter.algoliaAgent.value; + }, + + /** + * Adds a `segment` to the `x-algolia-agent` sent with every requests. + * + * @param segment - The algolia agent (user-agent) segment to add. + * @param version - The version of the agent. + */ + addAlgoliaAgent(segment: string, version?: string): void { + transporter.algoliaAgent.add({ segment, version }); + }, + + /** + * Helper method to switch the API key used to authenticate the requests. + * + * @param params - Method params. + * @param params.apiKey - The new API Key to use. + */ + setClientApiKey({ apiKey }: { apiKey: string }): void { + if (!authMode || authMode === 'WithinHeaders') { + transporter.baseHeaders['x-algolia-api-key'] = apiKey; + } else { + transporter.baseQueryParameters['x-algolia-api-key'] = apiKey; + } + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customDelete - The customDelete object. + * @param customDelete.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customDelete.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customDelete( + { path, parameters }: CustomDeleteProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customDelete`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customGet - The customGet object. + * @param customGet.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customGet.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customGet({ path, parameters }: CustomGetProps, requestOptions?: RequestOptions): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customGet`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPost - The customPost object. + * @param customPost.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPost.parameters - Query parameters to apply to the current query. + * @param customPost.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPost( + { path, parameters, body }: CustomPostProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPost`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPut - The customPut object. + * @param customPut.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPut.parameters - Query parameters to apply to the current query. + * @param customPut.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPut( + { path, parameters, body }: CustomPutProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPut`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the add-to-cart rate for all your searches with at least one add-to-cart event, including a daily breakdown. By default, the analyzed period includes the last eight days including the current day. The rate is the number of add-to-cart conversion events divided by the number of tracked searches. A search is tracked if it returns a queryID (`clickAnalytics` is `true`). This differs from the response\'s `count`, which shows the overall number of searches, including those where `clickAnalytics` is `false`. **There\'s a difference between a 0 and null add-to-cart rate when `clickAnalytics` is enabled:** - **Null** means there were no queries: since Algolia didn\'t receive any events, the add-to-cart rate is null. - **0** mean there _were_ queries but no [add-to-cart events](https://www.algolia.com/doc/guides/sending-events/getting-started/) were received. + * + * Required API Key ACLs: + * - analytics + * @param getAddToCartRate - The getAddToCartRate object. + * @param getAddToCartRate.index - Index name. + * @param getAddToCartRate.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getAddToCartRate.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getAddToCartRate.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getAddToCartRate( + { index, startDate, endDate, tags }: GetAddToCartRateProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getAddToCartRate`.'); + } + + const requestPath = '/2/conversions/addToCartRate'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the average click position of your search results, including a daily breakdown. The average click position is the average of all clicked search result positions. For example, if users only ever click on the first result for any search, the average click position is 1. By default, the analyzed period includes the last eight days including the current day. An average of `null` when `clickAnalytics` is enabled means Algolia didn\'t receive any [click events](https://www.algolia.com/doc/guides/sending-events/getting-started/) for the queries. The average is `null` until Algolia receives at least one click event. + * + * Required API Key ACLs: + * - analytics + * @param getAverageClickPosition - The getAverageClickPosition object. + * @param getAverageClickPosition.index - Index name. + * @param getAverageClickPosition.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getAverageClickPosition.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getAverageClickPosition.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getAverageClickPosition( + { index, startDate, endDate, tags }: GetAverageClickPositionProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getAverageClickPosition`.'); + } + + const requestPath = '/2/clicks/averageClickPosition'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the positions in the search results and their associated number of clicks. This lets you check how many clicks the first, second, or tenth search results receive. An average of `0` when `clickAnalytics` is enabled means Algolia didn\'t receive any [click events](https://www.algolia.com/doc/guides/sending-events/getting-started/) for the queries. + * + * Required API Key ACLs: + * - analytics + * @param getClickPositions - The getClickPositions object. + * @param getClickPositions.index - Index name. + * @param getClickPositions.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getClickPositions.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getClickPositions.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getClickPositions( + { index, startDate, endDate, tags }: GetClickPositionsProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getClickPositions`.'); + } + + const requestPath = '/2/clicks/positions'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the click-through rate (CTR) for all your searches with at least one click event, including a daily breakdown. By default, the analyzed period includes the last eight days including the current day. **There\'s a difference between a 0 and null CTR when `clickAnalytics` is enabled:** - **Null** means there were no queries: since Algolia didn\'t receive any events, CTR is null. - **0** mean there _were_ queries but no [click events](https://www.algolia.com/doc/guides/sending-events/getting-started/) were received. + * + * Required API Key ACLs: + * - analytics + * @param getClickThroughRate - The getClickThroughRate object. + * @param getClickThroughRate.index - Index name. + * @param getClickThroughRate.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getClickThroughRate.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getClickThroughRate.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getClickThroughRate( + { index, startDate, endDate, tags }: GetClickThroughRateProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getClickThroughRate`.'); + } + + const requestPath = '/2/clicks/clickThroughRate'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the conversion rate (CR) for all your searches with at least one conversion event, including a daily breakdown. By default, the analyzed period includes the last eight days including the current day. **There\'s a difference between a 0 and null CR when `clickAnalytics` is enabled:** - **Null** means there were no queries: since Algolia didn\'t receive any events, CR is null. - **0** mean there _were_ queries but no [conversion events](https://www.algolia.com/doc/guides/sending-events/getting-started/) were received. + * + * Required API Key ACLs: + * - analytics + * @param getConversionRate - The getConversionRate object. + * @param getConversionRate.index - Index name. + * @param getConversionRate.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getConversionRate.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getConversionRate.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getConversionRate( + { index, startDate, endDate, tags }: GetConversionRateProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getConversionRate`.'); + } + + const requestPath = '/2/conversions/conversionRate'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the fraction of searches that didn\'t lead to any click within a time range, including a daily breakdown. It also returns the number of tracked searches and tracked searches without clicks. By default, the analyzed period includes the last eight days including the current day. + * + * Required API Key ACLs: + * - analytics + * @param getNoClickRate - The getNoClickRate object. + * @param getNoClickRate.index - Index name. + * @param getNoClickRate.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getNoClickRate.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getNoClickRate.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getNoClickRate( + { index, startDate, endDate, tags }: GetNoClickRateProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getNoClickRate`.'); + } + + const requestPath = '/2/searches/noClickRate'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the fraction of searches that didn\'t return any results within a time range, including a daily breakdown. It also returns the count of searches and searches without results used to compute the rates. By default, the analyzed period includes the last eight days including the current day. + * + * Required API Key ACLs: + * - analytics + * @param getNoResultsRate - The getNoResultsRate object. + * @param getNoResultsRate.index - Index name. + * @param getNoResultsRate.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getNoResultsRate.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getNoResultsRate.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getNoResultsRate( + { index, startDate, endDate, tags }: GetNoResultsRateProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getNoResultsRate`.'); + } + + const requestPath = '/2/searches/noResultRate'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the purchase rate for all your searches with at least one purchase event, including a daily breakdown. By default, the analyzed period includes the last eight days including the current day. The rate is the number of purchase conversion events divided by the number of tracked searches. A search is tracked if it returns a query ID (`clickAnalytics` is `true`). This differs from the response\'s `count`, which shows the overall number of searches, including those where `clickAnalytics` is `false`. **There\'s a difference between a 0 and null purchase rate when `clickAnalytics` is enabled:** - **Null** means there were no queries: since Algolia didn\'t receive any events, the purchase rate is null. - **0** mean there _were_ queries but no [purchase conversion events](https://www.algolia.com/doc/guides/sending-events/getting-started/) were received. + * + * Required API Key ACLs: + * - analytics + * @param getPurchaseRate - The getPurchaseRate object. + * @param getPurchaseRate.index - Index name. + * @param getPurchaseRate.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getPurchaseRate.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getPurchaseRate.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getPurchaseRate( + { index, startDate, endDate, tags }: GetPurchaseRateProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getPurchaseRate`.'); + } + + const requestPath = '/2/conversions/purchaseRate'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves revenue-related metrics, such as the total revenue or the average order value. To retrieve revenue-related metrics, send purchase events. By default, the analyzed period includes the last eight days including the current day. Revenue is based on purchase conversion events (a conversion event with an `eventSubtype` attribute of `purchase`). The revenue is the `price` attribute multiplied by the `quantity` attribute for each object in the event\'s `objectData` array. + * + * Required API Key ACLs: + * - analytics + * @param getRevenue - The getRevenue object. + * @param getRevenue.index - Index name. + * @param getRevenue.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getRevenue.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getRevenue.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getRevenue( + { index, startDate, endDate, tags }: GetRevenueProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getRevenue`.'); + } + + const requestPath = '/2/conversions/revenue'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the number of searches within a time range, including a daily breakdown. By default, the analyzed period includes the last eight days including the current day. + * + * Required API Key ACLs: + * - analytics + * @param getSearchesCount - The getSearchesCount object. + * @param getSearchesCount.index - Index name. + * @param getSearchesCount.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getSearchesCount.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getSearchesCount.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getSearchesCount( + { index, startDate, endDate, tags }: GetSearchesCountProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getSearchesCount`.'); + } + + const requestPath = '/2/searches/count'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the most popular searches that didn\'t lead to any clicks, from the 1,000 most frequent searches. For each search, it also returns the number of displayed search results that remained unclicked. + * + * Required API Key ACLs: + * - analytics + * @param getSearchesNoClicks - The getSearchesNoClicks object. + * @param getSearchesNoClicks.index - Index name. + * @param getSearchesNoClicks.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getSearchesNoClicks.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getSearchesNoClicks.limit - Number of items to return. + * @param getSearchesNoClicks.offset - Position of the first item to return. + * @param getSearchesNoClicks.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getSearchesNoClicks( + { index, startDate, endDate, limit, offset, tags }: GetSearchesNoClicksProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getSearchesNoClicks`.'); + } + + const requestPath = '/2/searches/noClicks'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (limit !== undefined) { + queryParameters['limit'] = limit.toString(); + } + + if (offset !== undefined) { + queryParameters['offset'] = offset.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the 1,000 most frequent searches that produced zero results. + * + * Required API Key ACLs: + * - analytics + * @param getSearchesNoResults - The getSearchesNoResults object. + * @param getSearchesNoResults.index - Index name. + * @param getSearchesNoResults.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getSearchesNoResults.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getSearchesNoResults.limit - Number of items to return. + * @param getSearchesNoResults.offset - Position of the first item to return. + * @param getSearchesNoResults.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getSearchesNoResults( + { index, startDate, endDate, limit, offset, tags }: GetSearchesNoResultsProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getSearchesNoResults`.'); + } + + const requestPath = '/2/searches/noResults'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (limit !== undefined) { + queryParameters['limit'] = limit.toString(); + } + + if (offset !== undefined) { + queryParameters['offset'] = offset.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the time when the Analytics data for the specified index was last updated. If the index has been recently created or no search has been performed yet the updated time is `null`. The Analytics data is updated every 5 minutes. + * + * Required API Key ACLs: + * - analytics + * @param getStatus - The getStatus object. + * @param getStatus.index - Index name. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getStatus({ index }: GetStatusProps, requestOptions?: RequestOptions): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getStatus`.'); + } + + const requestPath = '/2/status'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the countries with the most searches in your index. + * + * Required API Key ACLs: + * - analytics + * @param getTopCountries - The getTopCountries object. + * @param getTopCountries.index - Index name. + * @param getTopCountries.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getTopCountries.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getTopCountries.limit - Number of items to return. + * @param getTopCountries.offset - Position of the first item to return. + * @param getTopCountries.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getTopCountries( + { index, startDate, endDate, limit, offset, tags }: GetTopCountriesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getTopCountries`.'); + } + + const requestPath = '/2/countries'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (limit !== undefined) { + queryParameters['limit'] = limit.toString(); + } + + if (offset !== undefined) { + queryParameters['offset'] = offset.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the 1,000 most frequently used filter attributes. These are attributes of your records that you included in the `attributesForFaceting` setting. + * + * Required API Key ACLs: + * - analytics + * @param getTopFilterAttributes - The getTopFilterAttributes object. + * @param getTopFilterAttributes.index - Index name. + * @param getTopFilterAttributes.search - Search query. + * @param getTopFilterAttributes.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getTopFilterAttributes.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getTopFilterAttributes.limit - Number of items to return. + * @param getTopFilterAttributes.offset - Position of the first item to return. + * @param getTopFilterAttributes.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getTopFilterAttributes( + { index, search, startDate, endDate, limit, offset, tags }: GetTopFilterAttributesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getTopFilterAttributes`.'); + } + + const requestPath = '/2/filters'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (search !== undefined) { + queryParameters['search'] = search.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (limit !== undefined) { + queryParameters['limit'] = limit.toString(); + } + + if (offset !== undefined) { + queryParameters['offset'] = offset.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the 1,000 most frequent filter (facet) values for a filter attribute. These are attributes of your records that you included in the `attributesForFaceting` setting. + * + * Required API Key ACLs: + * - analytics + * @param getTopFilterForAttribute - The getTopFilterForAttribute object. + * @param getTopFilterForAttribute.attribute - Attribute name. + * @param getTopFilterForAttribute.index - Index name. + * @param getTopFilterForAttribute.search - Search query. + * @param getTopFilterForAttribute.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getTopFilterForAttribute.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getTopFilterForAttribute.limit - Number of items to return. + * @param getTopFilterForAttribute.offset - Position of the first item to return. + * @param getTopFilterForAttribute.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getTopFilterForAttribute( + { attribute, index, search, startDate, endDate, limit, offset, tags }: GetTopFilterForAttributeProps, + requestOptions?: RequestOptions, + ): Promise { + if (!attribute) { + throw new Error('Parameter `attribute` is required when calling `getTopFilterForAttribute`.'); + } + + if (!index) { + throw new Error('Parameter `index` is required when calling `getTopFilterForAttribute`.'); + } + + const requestPath = '/2/filters/{attribute}'.replace('{attribute}', encodeURIComponent(attribute)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (search !== undefined) { + queryParameters['search'] = search.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (limit !== undefined) { + queryParameters['limit'] = limit.toString(); + } + + if (offset !== undefined) { + queryParameters['offset'] = offset.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the 1,000 most frequently used filters for a search that didn\'t return any results. To get the most frequent searches without results, use the [Retrieve searches without results](#tag/search/operation/getSearchesNoResults) operation. + * + * Required API Key ACLs: + * - analytics + * @param getTopFiltersNoResults - The getTopFiltersNoResults object. + * @param getTopFiltersNoResults.index - Index name. + * @param getTopFiltersNoResults.search - Search query. + * @param getTopFiltersNoResults.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getTopFiltersNoResults.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getTopFiltersNoResults.limit - Number of items to return. + * @param getTopFiltersNoResults.offset - Position of the first item to return. + * @param getTopFiltersNoResults.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getTopFiltersNoResults( + { index, search, startDate, endDate, limit, offset, tags }: GetTopFiltersNoResultsProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getTopFiltersNoResults`.'); + } + + const requestPath = '/2/filters/noResults'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (search !== undefined) { + queryParameters['search'] = search.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (limit !== undefined) { + queryParameters['limit'] = limit.toString(); + } + + if (offset !== undefined) { + queryParameters['offset'] = offset.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the object IDs of the 1,000 most frequent search results. If you set the `clickAnalytics` query parameter to true, the response also includes: - Tracked searches count. Tracked searches are Search API requests with the `clickAnalytics` parameter set to `true`. This differs from the response\'s `count`, which shows the overall number of searches, including those where `clickAnalytics` is `false`. - Click count - Click-through rate (CTR) - Conversion count - Conversion rate (CR) - Average click position If you set the `revenueAnalytics` parameter to `true`, the response also includes: - Add-to-cart count - Add-to-cart rate (ATCR) - Purchase count - Purchase rate - Revenue details for each currency **There\'s a difference between 0% rates and null rates:** - **Null** means there were no queries: since Algolia didn\'t receive any events, the rates (CTR, CR, ATCR, purchase rate) are null. - **0% rates** mean there _were_ queries but no [click or conversion events](https://www.algolia.com/doc/guides/sending-events/getting-started/) were received. + * + * Required API Key ACLs: + * - analytics + * @param getTopHits - The getTopHits object. + * @param getTopHits.index - Index name. + * @param getTopHits.search - Search query. + * @param getTopHits.clickAnalytics - Whether to include metrics related to click and conversion events in the response. + * @param getTopHits.revenueAnalytics - Whether to include metrics related to revenue events in the response. + * @param getTopHits.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getTopHits.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getTopHits.limit - Number of items to return. + * @param getTopHits.offset - Position of the first item to return. + * @param getTopHits.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getTopHits( + { index, search, clickAnalytics, revenueAnalytics, startDate, endDate, limit, offset, tags }: GetTopHitsProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getTopHits`.'); + } + + const requestPath = '/2/hits'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (search !== undefined) { + queryParameters['search'] = search.toString(); + } + + if (clickAnalytics !== undefined) { + queryParameters['clickAnalytics'] = clickAnalytics.toString(); + } + + if (revenueAnalytics !== undefined) { + queryParameters['revenueAnalytics'] = revenueAnalytics.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (limit !== undefined) { + queryParameters['limit'] = limit.toString(); + } + + if (offset !== undefined) { + queryParameters['offset'] = offset.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Returns the most popular searches. For each search, it also includes the average number of hits. If you set the `clickAnalytics` query parameter to `true`, the response also includes - Tracked searches count. Tracked searches are Search API requests with the `clickAnalytics` parameter set to `true`. This differs from the response\'s `count`, which shows the overall number of searches, including those where `clickAnalytics` is `false`. - Click count - Click-through rate (CTR) - Conversion count - Conversion rate (CR) - Average click position If you set the `revenueAnalytics` query parameter to `true`, the response also includes: - Add-to-cart count - Add-to-cart rate (ATCR) - Purchase count - Purchase rate - Revenue details for each currency **There\'s a difference between 0% rates and null rates:** - **Null** means there were no queries: since Algolia didn\'t receive any events, the rates (CTR, CR, ATCR, purchase rate) are null. - **0% rates** mean there _were_ queries but no [click or conversion events](https://www.algolia.com/doc/guides/sending-events/getting-started/) were received. + * + * Required API Key ACLs: + * - analytics + * @param getTopSearches - The getTopSearches object. + * @param getTopSearches.index - Index name. + * @param getTopSearches.clickAnalytics - Whether to include metrics related to click and conversion events in the response. + * @param getTopSearches.revenueAnalytics - Whether to include metrics related to revenue events in the response. + * @param getTopSearches.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getTopSearches.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getTopSearches.orderBy - Attribute by which to order the response items. If the `clickAnalytics` parameter is false, only `searchCount` is available. + * @param getTopSearches.direction - Sorting direction of the results: ascending or descending. + * @param getTopSearches.limit - Number of items to return. + * @param getTopSearches.offset - Position of the first item to return. + * @param getTopSearches.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getTopSearches( + { + index, + clickAnalytics, + revenueAnalytics, + startDate, + endDate, + orderBy, + direction, + limit, + offset, + tags, + }: GetTopSearchesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getTopSearches`.'); + } + + const requestPath = '/2/searches'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (clickAnalytics !== undefined) { + queryParameters['clickAnalytics'] = clickAnalytics.toString(); + } + + if (revenueAnalytics !== undefined) { + queryParameters['revenueAnalytics'] = revenueAnalytics.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (orderBy !== undefined) { + queryParameters['orderBy'] = orderBy.toString(); + } + + if (direction !== undefined) { + queryParameters['direction'] = direction.toString(); + } + + if (limit !== undefined) { + queryParameters['limit'] = limit.toString(); + } + + if (offset !== undefined) { + queryParameters['offset'] = offset.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the number of unique users within a time range, including a daily breakdown. Since it returns the number of unique users, the sum of the daily values might be different from the total number. By default: - Algolia distinguishes search users by their IP address, _unless_ you include a pseudonymous user identifier in your search requests with the `userToken` API parameter or `x-algolia-usertoken` request header. - The analyzed period includes the last eight days including the current day. + * + * Required API Key ACLs: + * - analytics + * @param getUsersCount - The getUsersCount object. + * @param getUsersCount.index - Index name. + * @param getUsersCount.startDate - Start date of the period to analyze, in `YYYY-MM-DD` format. + * @param getUsersCount.endDate - End date of the period to analyze, in `YYYY-MM-DD` format. + * @param getUsersCount.tags - Tags by which to segment the analytics. You can combine multiple tags with `OR` and `AND`. Tags must be URL-encoded. For more information, see [Segment your analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getUsersCount( + { index, startDate, endDate, tags }: GetUsersCountProps, + requestOptions?: RequestOptions, + ): Promise { + if (!index) { + throw new Error('Parameter `index` is required when calling `getUsersCount`.'); + } + + const requestPath = '/2/users/count'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (index !== undefined) { + queryParameters['index'] = index.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + if (tags !== undefined) { + queryParameters['tags'] = tags.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + }; +} diff --git a/packages/client-analytics/src/createAnalyticsClient.ts b/packages/client-analytics/src/createAnalyticsClient.ts deleted file mode 100644 index f946c33f5..000000000 --- a/packages/client-analytics/src/createAnalyticsClient.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { - addMethods, - AuthMode, - ClientTransporterOptions, - createAuth, - CreateClient, -} from '@algolia/client-common'; -import { createTransporter } from '@algolia/transporter'; - -import { AnalyticsClient, AnalyticsClientOptions } from '.'; - -export const createAnalyticsClient: CreateClient< - AnalyticsClient, - AnalyticsClientOptions & ClientTransporterOptions -> = options => { - const region = options.region || 'us'; - const auth = createAuth(AuthMode.WithinHeaders, options.appId, options.apiKey); - - const transporter = createTransporter({ - hosts: [{ url: `analytics.${region}.algolia.com` }], - ...options, - headers: { - ...auth.headers(), - ...{ 'content-type': 'application/json' }, - ...options.headers, - }, - - queryParameters: { - ...auth.queryParameters(), - ...options.queryParameters, - }, - }); - - const appId = options.appId; - - return addMethods({ appId, transporter }, options.methods); -}; diff --git a/packages/client-analytics/src/index.ts b/packages/client-analytics/src/index.ts deleted file mode 100644 index a9612b550..000000000 --- a/packages/client-analytics/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createAnalyticsClient'; -export * from './methods/index'; -export * from './types/index'; diff --git a/packages/client-analytics/src/methods/addABTest.ts b/packages/client-analytics/src/methods/addABTest.ts deleted file mode 100644 index d061f1ce8..000000000 --- a/packages/client-analytics/src/methods/addABTest.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { ABTest, AddABTestResponse, AnalyticsClient } from '..'; - -export const addABTest = (base: AnalyticsClient) => { - return ( - abTest: ABTest, - requestOptions?: RequestOptions - ): Readonly> => { - return base.transporter.write( - { - method: MethodEnum.Post, - path: '2/abtests', - data: abTest, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-analytics/src/methods/deleteABTest.ts b/packages/client-analytics/src/methods/deleteABTest.ts deleted file mode 100644 index c0dca1286..000000000 --- a/packages/client-analytics/src/methods/deleteABTest.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { AnalyticsClient, DeleteABTestResponse } from '..'; - -export const deleteABTest = (base: AnalyticsClient) => { - return ( - abTestID: number, - requestOptions?: RequestOptions - ): Readonly> => { - return base.transporter.write( - { - method: MethodEnum.Delete, - path: encode('2/abtests/%s', abTestID), - }, - requestOptions - ); - }; -}; diff --git a/packages/client-analytics/src/methods/getABTest.ts b/packages/client-analytics/src/methods/getABTest.ts deleted file mode 100644 index 5714fd4e7..000000000 --- a/packages/client-analytics/src/methods/getABTest.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { AnalyticsClient, GetABTestResponse } from '..'; - -export const getABTest = (base: AnalyticsClient) => { - return ( - abTestID: number, - requestOptions?: RequestOptions - ): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: encode('2/abtests/%s', abTestID), - }, - requestOptions - ); - }; -}; diff --git a/packages/client-analytics/src/methods/getABTests.ts b/packages/client-analytics/src/methods/getABTests.ts deleted file mode 100644 index 0fee5ac20..000000000 --- a/packages/client-analytics/src/methods/getABTests.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { AnalyticsClient, GetABTestsOptions, GetABTestsResponse } from '..'; - -export const getABTests = (base: AnalyticsClient) => { - return ( - requestOptions?: RequestOptions & GetABTestsOptions - ): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: '2/abtests', - }, - requestOptions - ); - }; -}; diff --git a/packages/client-analytics/src/methods/index.ts b/packages/client-analytics/src/methods/index.ts deleted file mode 100644 index de10338c1..000000000 --- a/packages/client-analytics/src/methods/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './addABTest'; -export * from './deleteABTest'; -export * from './getABTest'; -export * from './getABTests'; -export * from './stopABTest'; diff --git a/packages/client-analytics/src/methods/stopABTest.ts b/packages/client-analytics/src/methods/stopABTest.ts deleted file mode 100644 index f26098de8..000000000 --- a/packages/client-analytics/src/methods/stopABTest.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { AnalyticsClient, StopABTestResponse } from '..'; - -export const stopABTest = (base: AnalyticsClient) => { - return ( - abTestID: number, - requestOptions?: RequestOptions - ): Readonly> => { - return base.transporter.write( - { - method: MethodEnum.Post, - path: encode('2/abtests/%s/stop', abTestID), - }, - requestOptions - ); - }; -}; diff --git a/packages/client-analytics/src/types/ABTest.ts b/packages/client-analytics/src/types/ABTest.ts deleted file mode 100644 index c07fe41a2..000000000 --- a/packages/client-analytics/src/types/ABTest.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Variant } from '.'; - -export type ABTest = { - /** - * The ab test name. - */ - readonly name: string; - - /** - * The ab test list of variants. - */ - readonly variants: readonly Variant[]; - - /** - * The ab test end date, if any. - */ - readonly endAt: string; -}; diff --git a/packages/client-analytics/src/types/AddABTestResponse.ts b/packages/client-analytics/src/types/AddABTestResponse.ts deleted file mode 100644 index 4bee4bb3b..000000000 --- a/packages/client-analytics/src/types/AddABTestResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type AddABTestResponse = { - /** - * The ab test unique identifier. - */ - abTestID: number; - - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; - - /** - * The index name where the ab test is attached to. - */ - index: string; -}; diff --git a/packages/client-analytics/src/types/AnalyticsClient.ts b/packages/client-analytics/src/types/AnalyticsClient.ts deleted file mode 100644 index eee908b6e..000000000 --- a/packages/client-analytics/src/types/AnalyticsClient.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Transporter } from '@algolia/transporter'; - -export type AnalyticsClient = { - /** - * The application id. - */ - readonly appId: string; - - /** - * The underlying transporter. - */ - readonly transporter: Transporter; -}; diff --git a/packages/client-analytics/src/types/AnalyticsClientOptions.ts b/packages/client-analytics/src/types/AnalyticsClientOptions.ts deleted file mode 100644 index 4df6eb551..000000000 --- a/packages/client-analytics/src/types/AnalyticsClientOptions.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type AnalyticsClientOptions = { - /** - * The application id. - */ - readonly appId: string; - - /** - * The api key. - */ - readonly apiKey: string; - - /** - * The prefered region. - */ - readonly region?: 'de' | 'us'; -}; diff --git a/packages/client-analytics/src/types/DeleteABTestResponse.ts b/packages/client-analytics/src/types/DeleteABTestResponse.ts deleted file mode 100644 index ea2e9b4a1..000000000 --- a/packages/client-analytics/src/types/DeleteABTestResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type DeleteABTestResponse = { - /** - * The ab test unique identifier. - */ - abTestID: number; - - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; - - /** - * The index name where the ab test was attached to. - */ - index: string; -}; diff --git a/packages/client-analytics/src/types/GetABTestResponse.ts b/packages/client-analytics/src/types/GetABTestResponse.ts deleted file mode 100644 index 88e435998..000000000 --- a/packages/client-analytics/src/types/GetABTestResponse.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { VariantResponse } from '.'; - -export type GetABTestResponse = { - /** - * The ab test name. - */ - name: string; - - /** - * The ab test status. - */ - status: string; - - /** - * The ab test list of variants. - */ - variants: VariantResponse[]; - - /** - * The ab test end date, if any. - */ - endAt: string; - - /** - * The ab test created date, if any. - */ - createdAt: string; - - /** - * The ab test updated date. - */ - updatedAt: string; - - /** - * The ab test unique identifier. - */ - abTestID: number; - - /** - * The ab test significance based on click data. Should be higher than 0.95 to be considered significant - no matter which variant is winning. - */ - clickSignificance: number; - - /** - * - * The ab test significance based on conversion data. Should be higher than 0.95 to be considered significant - no matter which variant is winning. - */ - conversionSignificance: number; -}; diff --git a/packages/client-analytics/src/types/GetABTestsOptions.ts b/packages/client-analytics/src/types/GetABTestsOptions.ts deleted file mode 100644 index 1b80b5b38..000000000 --- a/packages/client-analytics/src/types/GetABTestsOptions.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type GetABTestsOptions = { - /** - * The number of ab tests to skip from the biginning of the list. - */ - readonly offset?: number; - - /** - * The limit of the number of ab tests returned. - */ - readonly limit?: number; -}; diff --git a/packages/client-analytics/src/types/GetABTestsResponse.ts b/packages/client-analytics/src/types/GetABTestsResponse.ts deleted file mode 100644 index 6e8be6b94..000000000 --- a/packages/client-analytics/src/types/GetABTestsResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { GetABTestResponse } from '.'; - -export type GetABTestsResponse = { - /** - * The number of ab tests within this response. - */ - count: number; - - /** - * The total of ab tests. - */ - total: number; - - /** - * The list of ab tests. - */ - abtests: GetABTestResponse[] | null; -}; diff --git a/packages/client-analytics/src/types/StopABTestResponse.ts b/packages/client-analytics/src/types/StopABTestResponse.ts deleted file mode 100644 index 8480a540a..000000000 --- a/packages/client-analytics/src/types/StopABTestResponse.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type StopABTestResponse = { - /** - * The ab test unique identifier. - */ - abTestID: number; - - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; - - /** - * The index name where the ab test is attached to. - */ - index: string; -}; diff --git a/packages/client-analytics/src/types/Variant.ts b/packages/client-analytics/src/types/Variant.ts deleted file mode 100644 index 53a381c0d..000000000 --- a/packages/client-analytics/src/types/Variant.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { SearchOptions } from '@algolia/client-search'; - -export type Variant = { - /** - * The index name. - */ - readonly index: string; - - /** - * Description of the variant. Useful when seing the results in the dashboard or via the API. - */ - readonly description?: string; - - /** - * Percentage of the traffic that should be going to the variant. The sum of the percentage should be equal to 100. - */ - readonly trafficPercentage: number; - - // @todo Handle this search options type. - /** - * The search parameters. - */ - readonly customSearchParameters?: SearchOptions; -}; diff --git a/packages/client-analytics/src/types/VariantResponse.ts b/packages/client-analytics/src/types/VariantResponse.ts deleted file mode 100644 index 7826dcf0e..000000000 --- a/packages/client-analytics/src/types/VariantResponse.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { SearchOptions } from '@algolia/client-search'; - -import { Variant } from './Variant'; - -export type VariantResponse = Variant & { - /** - * Average click position for the variant. - */ - averageClickPosition?: number; - - /** - * Distinct click count for the variant. - */ - clickCount?: number; - - /** - * Click through rate for the variant. - */ - clickThroughRate?: number; - - /** - * Click through rate for the variant. - */ - conversionCount?: number; - - /** - * Distinct conversion count for the variant. - */ - conversionRate?: number; - - /** - * No result count. - */ - noResultCount?: number; - - /** - * Tracked search count. - */ - trackedSearchCount?: number; - - /** - * Search count. - */ - searchCount?: number; - - /** - * User count. - */ - userCount?: number; - - // @todo Handle this search options type. - /** - * The search parameters. - */ - customSearchParameters?: SearchOptions; -}; diff --git a/packages/client-analytics/src/types/index.ts b/packages/client-analytics/src/types/index.ts deleted file mode 100644 index 4457e4ade..000000000 --- a/packages/client-analytics/src/types/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './ABTest'; -export * from './AddABTestResponse'; -export * from './AnalyticsClient'; -export * from './AnalyticsClientOptions'; -export * from './DeleteABTestResponse'; -export * from './GetABTestResponse'; -export * from './GetABTestsOptions'; -export * from './GetABTestsResponse'; -export * from './StopABTestResponse'; -export * from './Variant'; -export * from './VariantResponse'; diff --git a/packages/client-analytics/tsconfig.json b/packages/client-analytics/tsconfig.json new file mode 100644 index 000000000..444e8bb64 --- /dev/null +++ b/packages/client-analytics/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src", "model", "builds"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/client-analytics/tsup.config.ts b/packages/client-analytics/tsup.config.ts new file mode 100644 index 000000000..03ae24ee8 --- /dev/null +++ b/packages/client-analytics/tsup.config.ts @@ -0,0 +1,67 @@ +import type { Options } from 'tsup'; +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions, getDependencies } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +const nodeOptions: Options = { + ...getBaseNodeOptions(pkg, __dirname), + dts: { entry: { node: 'builds/node.ts' } }, + entry: ['builds/node.ts', 'src/*.ts'], +}; + +const nodeConfigs: Options[] = [ + { + ...nodeOptions, + format: 'cjs', + name: `node ${pkg.name} cjs`, + }, + { + ...nodeOptions, + format: 'esm', + name: `node ${pkg.name} esm`, + }, + { + ...nodeOptions, + format: 'esm', + name: `fetch ${pkg.name} esm`, + dts: { entry: { fetch: 'builds/fetch.ts' } }, + external: getDependencies(pkg, 'fetch'), + entry: ['builds/fetch.ts', 'src/*.ts'], + }, + { + ...nodeOptions, + format: 'esm', + name: `worker ${pkg.name} esm`, + dts: { entry: { worker: 'builds/worker.ts' } }, + external: getDependencies(pkg, 'worker'), + entry: ['builds/worker.ts', 'src/*.ts'], + }, +]; + +const browserOptions: Options = { + ...getBaseBrowserOptions(pkg, __dirname), + globalName: 'analyticsClient', +}; + +const browserConfigs: Options[] = [ + { + ...browserOptions, + minify: false, + name: `browser ${pkg.name} esm`, + dts: { entry: { browser: 'builds/browser.ts' } }, + entry: ['builds/browser.ts', 'src/*.ts'], + }, + { + ...browserOptions, + dts: false, + minify: true, + name: `browser ${pkg.name} min esm`, + entry: { 'builds/browser.min': 'builds/browser.ts' }, + external: [], + noExternal: getDependencies(pkg, 'xhr'), + }, +]; + +export default defineConfig([...nodeConfigs, ...browserConfigs]); diff --git a/packages/client-common/api-extractor.json b/packages/client-common/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/client-common/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/client-common/index.d.ts b/packages/client-common/index.d.ts new file mode 100644 index 000000000..28986bfc5 --- /dev/null +++ b/packages/client-common/index.d.ts @@ -0,0 +1 @@ +export * from './dist/common'; diff --git a/packages/client-common/index.js b/packages/client-common/index.js index ddbe0e4dc..4c570e1f7 100644 --- a/packages/client-common/index.js +++ b/packages/client-common/index.js @@ -1,2 +1 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/client-common.cjs.js'); +module.exports = require('./dist/common.cjs'); diff --git a/packages/client-common/package.json b/packages/client-common/package.json index d1b2982b4..16f159fbc 100644 --- a/packages/client-common/package.json +++ b/packages/client-common/package.json @@ -1,22 +1,50 @@ { "name": "@algolia/client-common", - "version": "4.13.1", - "private": false, + "version": "5.23.3", + "description": "Common package for the Algolia JavaScript API client.", "repository": { "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript#readme", "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/client-common.esm.js", - "types": "dist/client-common.d.ts", + "author": "Algolia", + "type": "module", "files": [ + "dist", "index.js", - "dist" + "index.d.ts" ], - "dependencies": { - "@algolia/requester-common": "4.13.1", - "@algolia/transporter": "4.13.1" + "exports": { + ".": { + "types": { + "import": "./dist/common.d.ts", + "module": "./dist/common.d.ts", + "require": "./dist/common.d.cts" + }, + "import": "./dist/common.js", + "module": "./dist/common.js", + "require": "./dist/common.cjs" + }, + "./src/*": "./src/*.ts" + }, + "scripts": { + "build": "yarn clean && yarn tsup", + "clean": "rm -rf ./dist || true", + "test": "tsc --noEmit && vitest --run", + "test:bundle": "publint . && attw --pack ." + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "jsdom": "26.0.0", + "publint": "0.3.10", + "ts-node": "10.9.2", + "tsup": "8.4.0", + "typescript": "5.8.3", + "vitest": "3.1.1" + }, + "engines": { + "node": ">= 14.0.0" } } diff --git a/packages/client-common/src/__tests__/TestSuite.ts b/packages/client-common/src/__tests__/TestSuite.ts deleted file mode 100644 index b33f3a79b..000000000 --- a/packages/client-common/src/__tests__/TestSuite.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { - deleteIndex, - findObject, - getObjectPosition, - multipleBatch, - multipleGetObjects, - saveObjects, - setSettings, -} from '@algolia/client-search'; - -import { addMethods } from '..'; -import algoliasearchForBrowser from '../../../algoliasearch/src/builds/browser'; -import algoliasearchForBrowserLite from '../../../algoliasearch/src/builds/browserLite'; -import algoliasearchForNode from '../../../algoliasearch/src/builds/node'; -import recommendForBrowser from '../../../recommend/src/builds/browser'; -import recommendForNode from '../../../recommend/src/builds/node'; - -/* eslint functional/no-class: 0 */ -export class TestSuite { - public readonly testName: string; - - public readonly isBrowserLite: boolean = testing.isBrowserLite(); - - public readonly isBrowser: boolean = testing.isBrowser(); - - // @ts-ignore - // eslint-disable-next-line no-nested-ternary - public readonly algoliasearch: typeof algoliasearchForNode = this.isBrowserLite - ? algoliasearchForBrowserLite - : this.isBrowser - ? algoliasearchForBrowser - : algoliasearchForNode; - - // @ts-ignore `destroy` only exists on the Node build - public readonly recommend: typeof recommendForNode = this.isBrowser - ? recommendForBrowser - : recommendForNode; - - public indicesCount = 0; - - public constructor(testName?: string) { - this.ensureEnvironmentVariables(); - - this.testName = testName || ''; - } - - public makeSearchClient( - appIdEnv: string = 'ALGOLIA_APPLICATION_ID_1', - apiKeyEnv: string = 'ALGOLIA_ADMIN_KEY_1' - ) { - const client = this.algoliasearch(`${process.env[appIdEnv]}`, `${process.env[apiKeyEnv]}`); - - // To ensure `Consistency` during the Common Test Suite, we - // force the transporter to work with a single host in the - // list: { dsn:read, dsn:write, host-1, host-2, host-3 } - client.transporter.hosts = [client.transporter.hosts[2]]; - - // Also, since we are targeting always the same host, the - // server may take a little more than expected to answer. - // To avoid timeouts we increase the timeouts duration - // @ts-ignore - client.transporter.timeouts = { - connect: 30, - read: 30, - write: 30, - }; - - if (testing.isBrowserLite()) { - return addMethods(client, { - multipleBatch, - multipleGetObjects, - }); - } - - return client; - } - - public makeIndex(indexName?: string) { - const index = this.makeSearchClient().initIndex(indexName || this.makeIndexName()); - - if (testing.isBrowserLite()) { - return addMethods(index, { - saveObjects, - setSettings, - delete: deleteIndex, - findObject, - getObjectPosition, - }); - } - - return index; - } - - public makeIndexName(): string { - this.indicesCount++; - - const instanceName = this.makeInstanceName(); - const dateTime = this.makeDateTime(); - - return `javascript_${dateTime}_${instanceName}_${this.testName}_${this.indicesCount}`; - } - - public makeDateTime(): string { - const now = new Date(); - - const makeTwoDigitsString = function(n: number): string { - return `0${n}`.slice(-2); - }; - - const date = - `${now.getFullYear()}-` + - `${makeTwoDigitsString(now.getMonth() + 1)}-` + - `${makeTwoDigitsString(now.getDate())}`; - - const time = - `${makeTwoDigitsString(now.getHours())}:` + - `${makeTwoDigitsString(now.getMinutes())}:` + - `${makeTwoDigitsString(now.getSeconds())}`; - - return `${date}-${time}`; - } - - public makeInstanceName(): string { - const environment = testing.environment(); - const nodeVersion = process.versions.node; - const jobNumber = process.env.CIRCLE_BUILD_NUM; - const user = process.env.USER; - - if (jobNumber) { - return `${environment}_${nodeVersion}_${jobNumber}`; - } else if (user) { - return `${environment}_${nodeVersion}_${user.substring(0, 5)}`; - } - - return `${environment}_${nodeVersion}_unknown`; - } - - private ensureEnvironmentVariables(): void { - const envs = [ - 'ALGOLIA_APPLICATION_ID_1', - 'ALGOLIA_APPLICATION_ID_2', - 'ALGOLIA_ADMIN_KEY_1', - 'ALGOLIA_ADMIN_KEY_2', - 'ALGOLIA_APPLICATION_ID_MCM', - 'ALGOLIA_ADMIN_KEY_MCM', - 'ALGOLIA_SEARCH_KEY_1', - ]; - - envs.forEach(env => { - if (process.env[env] === undefined) { - throw new Error(`Missing '${env}' environment variable.`); - } - }); - } -} diff --git a/packages/client-common/src/__tests__/cache/browser-local-storage-cache.test.ts b/packages/client-common/src/__tests__/cache/browser-local-storage-cache.test.ts new file mode 100644 index 000000000..f35c28dc6 --- /dev/null +++ b/packages/client-common/src/__tests__/cache/browser-local-storage-cache.test.ts @@ -0,0 +1,171 @@ +import { beforeEach, describe, expect, test, vi } from 'vitest'; + +import { createBrowserLocalStorageCache } from '../../cache'; + +const version = 'foobar'; +const notAvailableStorage = new Proxy(window.localStorage, { + get() { + return (): void => { + throw new Error('Component is not available'); + }; + }, +}); + +type DefaultValue = Promise<{ bar: number }>; + +describe('browser local storage cache', () => { + const missMock = vi.fn(); + const events = { + miss: (): Promise => Promise.resolve(missMock()), + }; + + beforeEach(() => { + window.localStorage.clear(); + vi.clearAllMocks(); + }); + + test('sets/gets values', async () => { + const cache = createBrowserLocalStorageCache({ key: version }); + const defaultValue = (): DefaultValue => Promise.resolve({ bar: 1 }); + + expect(await cache.get({ key: 'foo' }, defaultValue, events)).toMatchObject({ bar: 1 }); + expect(missMock.mock.calls.length).toBe(1); + + await cache.set({ key: 'foo' }, { foo: 2 }); + + expect(await cache.get({ key: 'foo' }, defaultValue, events)).toMatchObject({ foo: 2 }); + expect(missMock.mock.calls.length).toBe(1); + }); + + test('reads unexpired timeToLive keys', async () => { + const cache = createBrowserLocalStorageCache({ + key: version, + timeToLive: 5, + }); + await cache.set({ key: 'foo' }, { bar: 1 }); + + const defaultValue = (): DefaultValue => Promise.resolve({ bar: 2 }); + + expect( + await cache.get({ key: 'foo' }, defaultValue, { + miss: () => Promise.resolve(missMock()), + }), + ).toMatchObject({ bar: 1 }); + + expect(missMock.mock.calls.length).toBe(0); + }); + + test('deletes keys', async () => { + const cache = createBrowserLocalStorageCache({ key: version }); + + await cache.set({ key: 'foo' }, { bar: 1 }); + await cache.delete({ key: 'foo' }); + + const defaultValue = (): DefaultValue => Promise.resolve({ bar: 2 }); + + expect(await cache.get({ key: 'foo' }, defaultValue, events)).toMatchObject({ bar: 2 }); + expect(missMock.mock.calls.length).toBe(1); + }); + + test('deletes expired keys', async () => { + const cache = createBrowserLocalStorageCache({ + key: version, + timeToLive: -1, + }); + await cache.set({ key: 'foo' }, { bar: 1 }); + + const defaultValue = (): DefaultValue => Promise.resolve({ bar: 2 }); + + expect( + await cache.get({ key: 'foo' }, defaultValue, { + miss: () => Promise.resolve(missMock()), + }), + ).toMatchObject({ bar: 2 }); + + expect(missMock.mock.calls.length).toBe(1); + }); + + test('can be cleared', async () => { + const cache = createBrowserLocalStorageCache({ key: version }); + await cache.set({ key: 'foo' }, { bar: 1 }); + + await cache.clear(); + + const defaultValue = (): Promise<{ bar: number }> => Promise.resolve({ bar: 2 }); + + expect(localStorage.length).toBe(0); + + expect( + await cache.get({ key: 'foo' }, defaultValue, { + miss: () => Promise.resolve(missMock()), + }), + ).toMatchObject({ bar: 2 }); + + expect(missMock.mock.calls.length).toBe(1); + + expect(localStorage.getItem(`algolia-client-js-${version}`)).toEqual('{}'); + }); + + test('do throws localstorage exceptions on access', async () => { + const message = "Failed to read the 'localStorage' property from 'Window': Access is denied for this document."; + const cache = createBrowserLocalStorageCache( + new Proxy( + { key: 'foo' }, + { + get(_, key): DOMException | string { + if (key === 'key') { + return 'foo'; + } + + // Simulates a window.localStorage access. + throw new DOMException(message); + }, + }, + ), + ); + const key = { foo: 'bar' }; + const value = 'foo'; + const fallback = 'bar'; + + await expect(cache.delete(key)).rejects.toEqual(new DOMException(message)); + await expect(cache.set(key, value)).rejects.toEqual(new DOMException(message)); + await expect(cache.get(key, () => Promise.resolve(fallback))).rejects.toEqual(new DOMException(message)); + }); + + test('do throws localstorage exceptions after access', async () => { + const cache = createBrowserLocalStorageCache({ + key: version, + localStorage: notAvailableStorage, + }); + const key = { foo: 'bar' }; + const value = 'foo'; + const fallback = 'bar'; + const message = 'Component is not available'; + + await expect(cache.delete(key)).rejects.toEqual(new Error(message)); + await expect(cache.set(key, value)).rejects.toEqual(new Error(message)); + await expect(cache.get(key, () => Promise.resolve(fallback))).rejects.toEqual(new Error(message)); + }); + + test('creates a namespace within local storage', async () => { + const cache = createBrowserLocalStorageCache({ + key: version, + }); + const key = { foo: 'bar' }; + const value = 'foo'; + expect(localStorage.getItem(`algolia-client-js-${version}`)).toBeNull(); + + await cache.set(key, value); + + const expectedValue = expect.objectContaining({ + [JSON.stringify(key)]: { + timestamp: expect.any(Number), + value, + }, + }); + + const localStorageValue = localStorage.getItem(`algolia-client-js-${version}`); + + expect(JSON.parse(localStorageValue ? localStorageValue : '{}')).toEqual(expectedValue); + }); +}); diff --git a/packages/client-common/src/__tests__/cache/fallbackable-cache.test.ts b/packages/client-common/src/__tests__/cache/fallbackable-cache.test.ts new file mode 100644 index 000000000..ec4a22ee7 --- /dev/null +++ b/packages/client-common/src/__tests__/cache/fallbackable-cache.test.ts @@ -0,0 +1,126 @@ +import { describe, expect, test } from 'vitest'; + +import { + createBrowserLocalStorageCache, + createFallbackableCache, + createMemoryCache, + createNullCache, +} from '../../cache'; + +const version = 'foobar'; +const notAvailableStorage = new Proxy(window.localStorage, { + get() { + return (): void => { + throw new Error('Component is not available'); + }; + }, +}); + +type DefaultValue = Promise>; + +describe('fallbackable cache', () => { + const key = { 1: 2 }; + const value = { 3: 4 }; + const defaultValue = (): DefaultValue => Promise.resolve({ 5: 6 }); + + test('always fallback in null cache', async () => { + const cache = createFallbackableCache({ caches: [] }); + + await cache.set(key, value); + expect(await cache.get(key, defaultValue)).toEqual({ + 5: 6, + }); + }); + + describe('order', () => { + test('use memory cache', async () => { + const cache = createFallbackableCache({ + caches: [createMemoryCache()], + }); + + await cache.set(key, value); + + expect(await cache.get(key, defaultValue)).toEqual({ + 3: 4, + }); + }); + + test('use null cache first', async () => { + const cache = createFallbackableCache({ + caches: [createNullCache(), createMemoryCache()], + }); + + await cache.set(key, value); + + expect(await cache.get(key, defaultValue)).toEqual({ + 5: 6, + }); + }); + }); + + test('fallback to to memory cache', async () => { + const cache = createFallbackableCache({ + caches: [ + createBrowserLocalStorageCache({ + key: version, + // @ts-expect-error this will make the cache fail, and normally we fallback on memory cache + localStorage: {}, + }), + createMemoryCache(), + ], + }); + + await cache.set(key, value); + + expect(await cache.get(key, defaultValue)).toEqual({ + 3: 4, + }); + }); + + test('fallback to null cache', async () => { + const cache = createFallbackableCache({ + caches: [ + createBrowserLocalStorageCache({ + key: version, + // @ts-expect-error this will make the cache fail, and normally we fallback on memory cache + localStorage: {}, + }), + ], + }); + + await cache.set(key, value); + + expect(await cache.get(key, defaultValue)).toEqual({ + 5: 6, + }); + }); + + test('fallback to memory cache', async () => { + const cache = createFallbackableCache({ + caches: [ + createBrowserLocalStorageCache({ + key: version, + // @ts-expect-error this will make the cache fail + localStorage: {}, + }), + createBrowserLocalStorageCache({ + key: version, + localStorage: notAvailableStorage, // this will make the cache fail due localStorage not available + }), + createMemoryCache(), + ], + }); + + await cache.set(key, value); + + expect(await cache.get(key, defaultValue)).toEqual({ + 3: 4, + }); + + await cache.clear(); + + expect(await cache.get(key, defaultValue)).toEqual({ + 5: 6, + }); + }); +}); diff --git a/packages/client-common/src/__tests__/cache/memory-cache.test.ts b/packages/client-common/src/__tests__/cache/memory-cache.test.ts new file mode 100644 index 000000000..63ef1082a --- /dev/null +++ b/packages/client-common/src/__tests__/cache/memory-cache.test.ts @@ -0,0 +1,82 @@ +import { beforeEach, describe, expect, test, vi } from 'vitest'; + +import { createMemoryCache } from '../../cache'; + +type DefaultValue = Promise<{ bar: number }>; + +describe('memory cache', () => { + const missMock = vi.fn(); + const events = { + miss: (): Promise => Promise.resolve(missMock()), + }; + + beforeEach(() => { + vi.clearAllMocks(); + }); + + test('sets/gets values', async () => { + const cache = createMemoryCache(); + const defaultValue = (): DefaultValue => Promise.resolve({ bar: 1 }); + + expect(await cache.get({ key: 'foo' }, defaultValue, events)).toMatchObject({ + bar: 1, + }); + + await cache.set({ key: 'foo' }, { foo: 2 }); + + expect(missMock.mock.calls.length).toBe(1); + expect(await cache.get({ key: 'foo' }, defaultValue, events)).toMatchObject({ foo: 2 }); + expect(missMock.mock.calls.length).toBe(1); + }); + + test('getted values do not have references to the value on cache', async () => { + const cache = createMemoryCache(); + const key = { foo: 'bar' }; + const obj = { 1: { 2: 'bar' } }; + const defaultObj = { 1: { 2: 'too' } }; + + await cache.set(key, obj); + const gettedValue = await cache.get(key, () => Promise.resolve(defaultObj)); + gettedValue[1][2] = 'foo'; + + expect(await cache.get(key, () => Promise.resolve(defaultObj))).toEqual({ + 1: { 2: 'bar' }, + }); + }); + + test('deletes keys', async () => { + const cache = createMemoryCache(); + + await cache.set({ key: 'foo' }, { bar: 1 }); + await cache.delete({ key: 'foo' }); + + const defaultValue = (): DefaultValue => Promise.resolve({ bar: 2 }); + + expect(await cache.get({ key: 'foo' }, defaultValue, events)).toMatchObject({ bar: 2 }); + expect(missMock.mock.calls.length).toBe(1); + }); + + test('can be cleared', async () => { + const cache = createMemoryCache(); + + await cache.set({ key: 'foo' }, { bar: 1 }); + await cache.clear(); + + const defaultValue = (): DefaultValue => Promise.resolve({ bar: 2 }); + + expect(await cache.get({ key: 'foo' }, defaultValue, events)).toMatchObject({ bar: 2 }); + expect(missMock.mock.calls.length).toBe(1); + }); + + test('do not force promise based api for clearing cache', async () => { + const cache = createMemoryCache(); + + cache.set({ key: 'foo' }, { bar: 1 }); + cache.clear(); + + const defaultValue = (): DefaultValue => Promise.resolve({ bar: 2 }); + + expect(await cache.get({ key: 'foo' }, defaultValue, events)).toMatchObject({ bar: 2 }); + expect(missMock.mock.calls.length).toBe(1); + }); +}); diff --git a/packages/client-common/src/__tests__/cache/null-cache.test.ts b/packages/client-common/src/__tests__/cache/null-cache.test.ts new file mode 100644 index 000000000..ab3dafab6 --- /dev/null +++ b/packages/client-common/src/__tests__/cache/null-cache.test.ts @@ -0,0 +1,47 @@ +import { beforeEach, describe, expect, test, vi } from 'vitest'; + +import { createNullCache } from '../../cache'; + +type DefaultValue = Promise<{ bar: number }>; + +describe('null cache', () => { + const cache = createNullCache(); + const missMock = vi.fn(); + const events = { + miss: (): Promise => Promise.resolve(missMock()), + }; + + beforeEach(() => { + vi.clearAllMocks(); + }); + + test('does not set value', async () => { + const defaultValue = (): DefaultValue => Promise.resolve({ bar: 12 }); + + await cache.set({ key: 'key' }, { foo: 10 }); + + expect(await cache.get({ key: 'key' }, defaultValue, events)).toMatchObject({ + bar: 12, + }); + + expect(missMock.mock.calls.length).toBe(1); + }); + + test('returns default value', async () => { + const defaultValue = (): DefaultValue => Promise.resolve({ bar: 12 }); + + expect(await cache.get({ foo: 'foo' }, defaultValue, events)).toMatchObject({ + bar: 12, + }); + + expect(missMock.mock.calls.length).toBe(1); + }); + + test('can be deleted', () => { + expect(async () => await cache.delete('foo')).not.toThrowError(); + }); + + test('can be cleared', () => { + expect(async () => await cache.clear()).not.toThrowError(); + }); +}); diff --git a/packages/client-common/src/__tests__/create-iterable-promise.test.ts b/packages/client-common/src/__tests__/create-iterable-promise.test.ts new file mode 100644 index 000000000..404311586 --- /dev/null +++ b/packages/client-common/src/__tests__/create-iterable-promise.test.ts @@ -0,0 +1,256 @@ +import { describe, expect, test } from 'vitest'; + +import { createIterablePromise } from '../createIterablePromise'; + +describe('createIterablePromise', () => { + describe('func', () => { + test('provides the `previousResponse` parameter', async () => { + const responses: Array = []; + const promise = createIterablePromise({ + func: (previousResponse) => { + return new Promise((resolve) => { + resolve(previousResponse === undefined ? 'yes' : 'no'); + }); + }, + validate: () => responses.length === 3, + aggregator: (response) => responses.push(response), + }); + + await expect(promise).resolves.toEqual('no'); + expect(responses).toEqual(['yes', 'no', 'no']); + }); + }); + + describe('validate', () => { + test('iterates on a `func` until `validate` is met', async () => { + let calls = 0; + const promise = createIterablePromise({ + func: () => { + return new Promise((resolve) => { + calls += 1; + resolve(`success #${calls}`); + }); + }, + validate: () => calls >= 3, + }); + + await expect(promise).resolves.toEqual('success #3'); + expect(calls).toBe(3); + }); + + test('forward the response of the `func`', async () => { + let calls = 0; + const promise = createIterablePromise({ + func: () => { + return new Promise((resolve) => { + calls += 1; + resolve(calls); + }); + }, + validate: (response) => response >= 3, + }); + + await expect(promise).resolves.toEqual(3); + expect(calls).toBe(3); + }); + + test('allow async function', async () => { + createIterablePromise({ + func: () => { + return Promise.resolve({ + hits: [], + cursor: '', + }); + }, + validate: async () => { + return await Promise.resolve(true); + }, + aggregator: async (res) => { + return await Promise.resolve(res); + }, + timeout: async () => { + return await Promise.resolve(1000); + }, + }); + }); + }); + + describe('aggregator', () => { + test('is called before iterating', async () => { + let calls = 0; + let count = 0; + const promise = createIterablePromise({ + func: () => { + return new Promise((resolve) => { + calls += 1; + resolve(`success #${calls}`); + }); + }, + validate: () => calls >= 3, + aggregator: () => (count += 3), + }); + + await expect(promise).resolves.toEqual('success #3'); + expect(calls).toBe(3); + expect(count).toBe(3 * 3); + }); + + test('forward the response of the `func`', async () => { + let calls = 0; + const responses: string[] = []; + const promise = createIterablePromise({ + func: () => { + return new Promise((resolve) => { + calls += 1; + resolve(`success #${calls}`); + }); + }, + validate: () => calls >= 3, + aggregator: (response) => { + responses.push(response); + }, + }); + + await expect(promise).resolves.toEqual('success #3'); + expect(calls).toBe(3); + expect(responses).toEqual(['success #1', 'success #2', 'success #3']); + }); + }); + + describe('timeout', () => { + test('defaults to no timeout (0)', async () => { + let calls = 0; + const before = Date.now(); + const promise = createIterablePromise({ + func: () => { + return new Promise((resolve) => { + calls += 1; + resolve(`success #${calls}`); + }); + }, + validate: () => calls >= 2, + }); + + await expect(promise).resolves.toEqual('success #2'); + + expect(Date.now() - before).toBeGreaterThanOrEqual(0); + expect(Date.now() - before).toBeLessThanOrEqual(20); + expect(calls).toBe(2); + }); + + test('waits before calling the `func` again', async () => { + let calls = 0; + const before = Date.now(); + const promise = createIterablePromise({ + func: () => { + return new Promise((resolve) => { + calls += 1; + resolve(`success #${calls}`); + }); + }, + validate: () => calls >= 2, + timeout: () => 2000, + }); + + await expect(promise).resolves.toEqual('success #2'); + + expect(Date.now() - before).toBeGreaterThanOrEqual(2000); + expect(Date.now() - before).toBeLessThanOrEqual(2020); + expect(calls).toBe(2); + }); + }); + + describe('error', () => { + test('gets the rejection of the given promise via reject', async () => { + let calls = 0; + + const promise = createIterablePromise({ + func: () => { + return new Promise((resolve, reject) => { + calls += 1; + if (calls <= 3) { + resolve('okay'); + } else { + reject(new Error('nope')); + } + }); + }, + validate: () => false, + }); + + await expect(promise).rejects.toEqual(expect.objectContaining({ message: 'nope' })); + }); + + test('gets the rejection of the given promise via throw', async () => { + let calls = 0; + + const promise = createIterablePromise({ + func: () => { + return new Promise((resolve) => { + calls += 1; + if (calls <= 3) { + resolve('okay'); + } else { + throw new Error('nope'); + } + }); + }, + validate: () => false, + }); + + await expect(promise).rejects.toEqual(expect.objectContaining({ message: 'nope' })); + }); + + test('rejects with the given `message` when `validate` hits', async () => { + const MAX_RETRIES = 3; + let calls = 0; + + const promise = createIterablePromise({ + func: () => { + return new Promise((resolve) => { + calls += 1; + resolve('okay'); + }); + }, + validate: () => false, + error: { + validate: () => calls >= MAX_RETRIES, + message: () => `Error is thrown: ${calls}/${MAX_RETRIES}`, + }, + }); + + await expect(promise).rejects.toEqual( + expect.objectContaining({ + message: 'Error is thrown: 3/3', + }), + ); + expect(calls).toBe(MAX_RETRIES); + }); + + test('forward the response of the `func`', async () => { + const MAX_RETRIES = 3; + let calls = 0; + + const promise = createIterablePromise({ + func: () => { + return new Promise((resolve) => { + calls += 1; + resolve(calls); + }); + }, + validate: () => false, + error: { + validate: (response) => response >= MAX_RETRIES, + message: (response) => `Error is thrown: ${response}/${MAX_RETRIES}`, + }, + }); + + await expect(promise).rejects.toEqual( + expect.objectContaining({ + message: 'Error is thrown: 3/3', + }), + ); + expect(calls).toBe(MAX_RETRIES); + }); + }); +}); diff --git a/packages/client-common/src/__tests__/createFaker.ts b/packages/client-common/src/__tests__/createFaker.ts deleted file mode 100644 index 1e1fe3b86..000000000 --- a/packages/client-common/src/__tests__/createFaker.ts +++ /dev/null @@ -1,28 +0,0 @@ -export function createFaker() { - return { - object(objectID?: string): Record { - let obj = { - name: Math.random() - .toString(36) - .substring(2, 15), - age: Math.floor(Math.random() * Math.floor(100)), - }; - - if (objectID !== undefined) { - obj = Object.assign(obj, { objectID }); - } - - return obj; - }, - - objects(number: number): readonly object[] { - const objects = []; - - for (let index = 0; index < number; index++) { - objects.push(this.object(index.toString())); - } - - return objects; - }, - }; -} diff --git a/packages/client-common/src/__tests__/helpers.ts b/packages/client-common/src/__tests__/helpers.ts deleted file mode 100644 index 494d4c3c4..000000000 --- a/packages/client-common/src/__tests__/helpers.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { WaitablePromise } from '..'; - -export function waitResponses(responses: Array>>) { - return Promise.all(responses.map(response => response.wait())); -} - -export type KeysOfType = { - [TKey in keyof TType]: TType[TKey] extends TRequiredType ? TKey : never; -}[keyof TType]; -export type RequiredKeys = Exclude< - KeysOfType>, - undefined ->; diff --git a/packages/client-common/src/__tests__/logger/null-logger.test.ts b/packages/client-common/src/__tests__/logger/null-logger.test.ts new file mode 100644 index 000000000..b43f2ad73 --- /dev/null +++ b/packages/client-common/src/__tests__/logger/null-logger.test.ts @@ -0,0 +1,22 @@ +import { describe, expect, test, vi } from 'vitest'; + +import { createNullLogger } from '../../logger'; + +describe('null logger', () => { + test('has a null behavior', async () => { + vi.resetAllMocks(); + vi.spyOn(console, 'debug'); + vi.spyOn(console, 'info'); + vi.spyOn(console, 'error'); + + const logger = createNullLogger(); + + await logger.debug('foo', {}); + await logger.info('foo', {}); + await logger.error('foo', {}); + + expect(console.debug).toHaveBeenCalledTimes(0); + expect(console.info).toHaveBeenCalledTimes(0); + expect(console.error).toHaveBeenCalledTimes(0); + }); +}); diff --git a/packages/client-common/src/__tests__/unit/helpers.test.ts b/packages/client-common/src/__tests__/unit/helpers.test.ts deleted file mode 100644 index 14c267b0d..000000000 --- a/packages/client-common/src/__tests__/unit/helpers.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { addMethods, encode } from '../..'; - -describe('helpers', () => { - it('encodes url', () => { - expect(encode('')).toBe(''); - - expect(encode('/1/indexes/test/settings')).toBe('/1/indexes/test/settings'); - - expect(encode('/1/indexes/test/task/%s', 123)).toBe('/1/indexes/test/task/123'); - - expect(encode('/1/indexes/%s/task/%s', 'index#name', 1234)).toBe( - '/1/indexes/index%23name/task/1234' - ); - - expect(encode('/1/indexes/%s/batch', '#index name_42#%23')).toBe( - '/1/indexes/%23index%20name_42%23%2523/batch' - ); - }); - - it('adds objects', () => { - const client = { - foo: 'bar', - }; - - const getFoo = (base: typeof client) => { - return (): string => base.foo; - }; - - const setFoo = (base: typeof client) => { - return (value: string): void => { - // eslint-disable-next-line no-param-reassign - base.foo = value; - }; - }; - - const obj = addMethods(client, { setFoo, getFoo }); - - expect(Object.getOwnPropertyNames(obj)).toEqual(['foo', 'setFoo', 'getFoo']); - }); -}); diff --git a/packages/client-common/src/__tests__/unit/retryable-promise.test.ts b/packages/client-common/src/__tests__/unit/retryable-promise.test.ts deleted file mode 100644 index 4cde27807..000000000 --- a/packages/client-common/src/__tests__/unit/retryable-promise.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { createRetryablePromise } from '../..'; - -const fooError = { - message: 'Bar not found', -}; - -describe('retryable promise', () => { - it('resolves promise after some retries', async () => { - let calls = 0; - - const response = await createRetryablePromise(retry => { - calls++; - - if (calls < 3) { - return retry(); - } - - return Promise.resolve(); - }); - expect(calls).toBe(3); - expect(response).toBe(undefined); - }); - - it('gets the rejection of the given promise from the callback', async () => { - let calls = 0; - - const promise = createRetryablePromise(retry => { - return new Promise(resolve => { - calls++; - - if (calls > 2) { - throw fooError; - } - - resolve(retry()); - }); - }); - - await expect(promise).rejects.toEqual({ message: 'Bar not found' }); - }); -}); diff --git a/packages/client-common/src/__tests__/unit/waitable-promise.test.ts b/packages/client-common/src/__tests__/unit/waitable-promise.test.ts deleted file mode 100644 index f4a77599c..000000000 --- a/packages/client-common/src/__tests__/unit/waitable-promise.test.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { createWaitablePromise } from '../..'; - -const original = { foo: 'bar' }; - -const fooError = { - message: 'Bar not found', -}; - -describe('awaitable promise', () => { - it('resolves the original response without wait', async () => { - const response = new Promise(resolve => resolve(original)); - const waitablePromise = createWaitablePromise(response); - await expect(waitablePromise).resolves.toBe(original); - }); - - it('resolves the original response after wait', async () => { - const response = new Promise(resolve => resolve(original)); - const waitablePromise = createWaitablePromise(response); - await expect(waitablePromise.wait()).resolves.toBe(original); - }); - - it('gets the rejection of the original promise', async () => { - const response = new Promise(() => { - throw fooError; - }); - const waitablePromise = createWaitablePromise(response); - await expect(waitablePromise).rejects.toEqual({ message: 'Bar not found' }); - }); - - it('gets the rejection of the wait promise', async () => { - const response = new Promise(resolve => resolve(original)); - const waitablePromise = createWaitablePromise(response, () => { - throw fooError; - }); - await expect(waitablePromise.wait()).rejects.toEqual({ message: 'Bar not found' }); - }); -}); diff --git a/packages/client-common/src/cache/createBrowserLocalStorageCache.ts b/packages/client-common/src/cache/createBrowserLocalStorageCache.ts new file mode 100644 index 000000000..5035ac2a9 --- /dev/null +++ b/packages/client-common/src/cache/createBrowserLocalStorageCache.ts @@ -0,0 +1,106 @@ +import type { BrowserLocalStorageCacheItem, BrowserLocalStorageOptions, Cache, CacheEvents } from '../types'; + +export function createBrowserLocalStorageCache(options: BrowserLocalStorageOptions): Cache { + let storage: Storage; + // We've changed the namespace to avoid conflicts with v4, as this version is a huge breaking change + const namespaceKey = `algolia-client-js-${options.key}`; + + function getStorage(): Storage { + if (storage === undefined) { + storage = options.localStorage || window.localStorage; + } + + return storage; + } + + function getNamespace(): Record { + return JSON.parse(getStorage().getItem(namespaceKey) || '{}'); + } + + function setNamespace(namespace: Record): void { + getStorage().setItem(namespaceKey, JSON.stringify(namespace)); + } + + function removeOutdatedCacheItems(): void { + const timeToLive = options.timeToLive ? options.timeToLive * 1000 : null; + const namespace = getNamespace(); + + const filteredNamespaceWithoutOldFormattedCacheItems = Object.fromEntries( + Object.entries(namespace).filter(([, cacheItem]) => { + return cacheItem.timestamp !== undefined; + }), + ); + + setNamespace(filteredNamespaceWithoutOldFormattedCacheItems); + + if (!timeToLive) { + return; + } + + const filteredNamespaceWithoutExpiredItems = Object.fromEntries( + Object.entries(filteredNamespaceWithoutOldFormattedCacheItems).filter(([, cacheItem]) => { + const currentTimestamp = new Date().getTime(); + const isExpired = cacheItem.timestamp + timeToLive < currentTimestamp; + + return !isExpired; + }), + ); + + setNamespace(filteredNamespaceWithoutExpiredItems); + } + + return { + get( + key: Record | string, + defaultValue: () => Promise, + events: CacheEvents = { + miss: () => Promise.resolve(), + }, + ): Promise { + return Promise.resolve() + .then(() => { + removeOutdatedCacheItems(); + + return getNamespace>()[JSON.stringify(key)]; + }) + .then((value) => { + return Promise.all([value ? value.value : defaultValue(), value !== undefined]); + }) + .then(([value, exists]) => { + return Promise.all([value, exists || events.miss(value)]); + }) + .then(([value]) => value); + }, + + set(key: Record | string, value: TValue): Promise { + return Promise.resolve().then(() => { + const namespace = getNamespace(); + + namespace[JSON.stringify(key)] = { + timestamp: new Date().getTime(), + value, + }; + + getStorage().setItem(namespaceKey, JSON.stringify(namespace)); + + return value; + }); + }, + + delete(key: Record | string): Promise { + return Promise.resolve().then(() => { + const namespace = getNamespace(); + + delete namespace[JSON.stringify(key)]; + + getStorage().setItem(namespaceKey, JSON.stringify(namespace)); + }); + }, + + clear(): Promise { + return Promise.resolve().then(() => { + getStorage().removeItem(namespaceKey); + }); + }, + }; +} diff --git a/packages/client-common/src/cache/createFallbackableCache.ts b/packages/client-common/src/cache/createFallbackableCache.ts new file mode 100644 index 000000000..8e34cefdb --- /dev/null +++ b/packages/client-common/src/cache/createFallbackableCache.ts @@ -0,0 +1,43 @@ +import type { Cache, CacheEvents, FallbackableCacheOptions } from '../types'; +import { createNullCache } from './createNullCache'; + +export function createFallbackableCache(options: FallbackableCacheOptions): Cache { + const caches = [...options.caches]; + const current = caches.shift(); + + if (current === undefined) { + return createNullCache(); + } + + return { + get( + key: Record | string, + defaultValue: () => Promise, + events: CacheEvents = { + miss: (): Promise => Promise.resolve(), + }, + ): Promise { + return current.get(key, defaultValue, events).catch(() => { + return createFallbackableCache({ caches }).get(key, defaultValue, events); + }); + }, + + set(key: Record | string, value: TValue): Promise { + return current.set(key, value).catch(() => { + return createFallbackableCache({ caches }).set(key, value); + }); + }, + + delete(key: Record | string): Promise { + return current.delete(key).catch(() => { + return createFallbackableCache({ caches }).delete(key); + }); + }, + + clear(): Promise { + return current.clear().catch(() => { + return createFallbackableCache({ caches }).clear(); + }); + }, + }; +} diff --git a/packages/client-common/src/cache/createMemoryCache.ts b/packages/client-common/src/cache/createMemoryCache.ts new file mode 100644 index 000000000..8c0c89f9b --- /dev/null +++ b/packages/client-common/src/cache/createMemoryCache.ts @@ -0,0 +1,43 @@ +import type { Cache, CacheEvents, MemoryCacheOptions } from '../types'; + +export function createMemoryCache(options: MemoryCacheOptions = { serializable: true }): Cache { + let cache: Record = {}; + + return { + get( + key: Record | string, + defaultValue: () => Promise, + events: CacheEvents = { + miss: (): Promise => Promise.resolve(), + }, + ): Promise { + const keyAsString = JSON.stringify(key); + + if (keyAsString in cache) { + return Promise.resolve(options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString]); + } + + const promise = defaultValue(); + + return promise.then((value: TValue) => events.miss(value)).then(() => promise); + }, + + set(key: Record | string, value: TValue): Promise { + cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value; + + return Promise.resolve(value); + }, + + delete(key: Record | string): Promise { + delete cache[JSON.stringify(key)]; + + return Promise.resolve(); + }, + + clear(): Promise { + cache = {}; + + return Promise.resolve(); + }, + }; +} diff --git a/packages/client-common/src/cache/createNullCache.ts b/packages/client-common/src/cache/createNullCache.ts new file mode 100644 index 000000000..1a950eb0a --- /dev/null +++ b/packages/client-common/src/cache/createNullCache.ts @@ -0,0 +1,29 @@ +import type { Cache, CacheEvents } from '../types'; + +export function createNullCache(): Cache { + return { + get( + _key: Record | string, + defaultValue: () => Promise, + events: CacheEvents = { + miss: (): Promise => Promise.resolve(), + }, + ): Promise { + const value = defaultValue(); + + return value.then((result) => Promise.all([result, events.miss(result)])).then(([result]) => result); + }, + + set(_key: Record | string, value: TValue): Promise { + return Promise.resolve(value); + }, + + delete(_key: Record | string): Promise { + return Promise.resolve(); + }, + + clear(): Promise { + return Promise.resolve(); + }, + }; +} diff --git a/packages/client-common/src/cache/index.ts b/packages/client-common/src/cache/index.ts new file mode 100644 index 000000000..ecb01b386 --- /dev/null +++ b/packages/client-common/src/cache/index.ts @@ -0,0 +1,4 @@ +export * from './createBrowserLocalStorageCache'; +export * from './createFallbackableCache'; +export * from './createMemoryCache'; +export * from './createNullCache'; diff --git a/packages/client-common/src/constants.ts b/packages/client-common/src/constants.ts new file mode 100644 index 000000000..7a875bced --- /dev/null +++ b/packages/client-common/src/constants.ts @@ -0,0 +1,7 @@ +export const DEFAULT_CONNECT_TIMEOUT_BROWSER = 1000; +export const DEFAULT_READ_TIMEOUT_BROWSER = 2000; +export const DEFAULT_WRITE_TIMEOUT_BROWSER = 30000; + +export const DEFAULT_CONNECT_TIMEOUT_NODE = 2000; +export const DEFAULT_READ_TIMEOUT_NODE = 5000; +export const DEFAULT_WRITE_TIMEOUT_NODE = 30000; diff --git a/packages/client-common/src/createAlgoliaAgent.ts b/packages/client-common/src/createAlgoliaAgent.ts new file mode 100644 index 000000000..5283054d8 --- /dev/null +++ b/packages/client-common/src/createAlgoliaAgent.ts @@ -0,0 +1,18 @@ +import type { AlgoliaAgent, AlgoliaAgentOptions } from './types'; + +export function createAlgoliaAgent(version: string): AlgoliaAgent { + const algoliaAgent = { + value: `Algolia for JavaScript (${version})`, + add(options: AlgoliaAgentOptions): AlgoliaAgent { + const addedAlgoliaAgent = `; ${options.segment}${options.version !== undefined ? ` (${options.version})` : ''}`; + + if (algoliaAgent.value.indexOf(addedAlgoliaAgent) === -1) { + algoliaAgent.value = `${algoliaAgent.value}${addedAlgoliaAgent}`; + } + + return algoliaAgent; + }, + }; + + return algoliaAgent; +} diff --git a/packages/client-common/src/createAuth.ts b/packages/client-common/src/createAuth.ts index 071665aef..67c6c3816 100644 --- a/packages/client-common/src/createAuth.ts +++ b/packages/client-common/src/createAuth.ts @@ -1,18 +1,25 @@ -import { Auth, AuthMode, AuthModeType } from '.'; +import type { AuthMode, Headers, QueryParameters } from './types'; -export function createAuth(authMode: AuthModeType, appId: string, apiKey: string): Auth { +export function createAuth( + appId: string, + apiKey: string, + authMode: AuthMode = 'WithinHeaders', +): { + readonly headers: () => Headers; + readonly queryParameters: () => QueryParameters; +} { const credentials = { 'x-algolia-api-key': apiKey, 'x-algolia-application-id': appId, }; return { - headers(): Readonly> { - return authMode === AuthMode.WithinHeaders ? credentials : {}; + headers(): Headers { + return authMode === 'WithinHeaders' ? credentials : {}; }, - queryParameters(): Readonly> { - return authMode === AuthMode.WithinQueryParameters ? credentials : {}; + queryParameters(): QueryParameters { + return authMode === 'WithinQueryParameters' ? credentials : {}; }, }; } diff --git a/packages/client-common/src/createIterablePromise.ts b/packages/client-common/src/createIterablePromise.ts new file mode 100644 index 000000000..c9ba843d2 --- /dev/null +++ b/packages/client-common/src/createIterablePromise.ts @@ -0,0 +1,50 @@ +import type { CreateIterablePromise } from './types/createIterablePromise'; + +/** + * Helper: Returns the promise of a given `func` to iterate on, based on a given `validate` condition. + * + * @param createIterator - The createIterator options. + * @param createIterator.func - The function to run, which returns a promise. + * @param createIterator.validate - The validator function. It receives the resolved return of `func`. + * @param createIterator.aggregator - The function that runs right after the `func` method has been executed, allows you to do anything with the response before `validate`. + * @param createIterator.error - The `validate` condition to throw an error, and its message. + * @param createIterator.timeout - The function to decide how long to wait between iterations. + */ +export function createIterablePromise({ + func, + validate, + aggregator, + error, + timeout = (): number => 0, +}: CreateIterablePromise): Promise { + const retry = (previousResponse?: TResponse): Promise => { + return new Promise((resolve, reject) => { + func(previousResponse) + .then(async (response) => { + if (aggregator) { + await aggregator(response); + } + + if (await validate(response)) { + return resolve(response); + } + + if (error && (await error.validate(response))) { + return reject(new Error(await error.message(response))); + } + + return setTimeout( + () => { + retry(response).then(resolve).catch(reject); + }, + await timeout(), + ); + }) + .catch((err) => { + reject(err); + }); + }); + }; + + return retry(); +} diff --git a/packages/client-common/src/createRetryablePromise.ts b/packages/client-common/src/createRetryablePromise.ts deleted file mode 100644 index 0a92eef43..000000000 --- a/packages/client-common/src/createRetryablePromise.ts +++ /dev/null @@ -1,17 +0,0 @@ -export function createRetryablePromise( - callback: (retry: () => Promise) => Promise -): Promise { - let retriesCount = 0; // eslint-disable-line functional/no-let - - const retry = (): Promise => { - retriesCount++; - - return new Promise((resolve: (promise: Promise) => void) => { - setTimeout(() => { - resolve(callback(retry)); - }, Math.min(100 * retriesCount, 1000)); - }); - }; - - return callback(retry); -} diff --git a/packages/client-common/src/createWaitablePromise.ts b/packages/client-common/src/createWaitablePromise.ts deleted file mode 100644 index 92f8affcb..000000000 --- a/packages/client-common/src/createWaitablePromise.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { RequestOptions } from '@algolia/transporter'; - -import { Wait, WaitablePromise } from '.'; - -export function createWaitablePromise( - promise: Readonly>, - wait: Wait = (_response, _requestOptions) => { - return Promise.resolve(); - } -): Readonly> { - // eslint-disable-next-line functional/immutable-data - return Object.assign(promise, { - wait(requestOptions?: RequestOptions): Readonly> { - return createWaitablePromise( - promise - .then(response => Promise.all([wait(response, requestOptions), response])) - .then(promiseResults => promiseResults[1]) - ); - }, - }) as WaitablePromise; -} diff --git a/packages/client-common/src/getAlgoliaAgent.ts b/packages/client-common/src/getAlgoliaAgent.ts new file mode 100644 index 000000000..b60397e94 --- /dev/null +++ b/packages/client-common/src/getAlgoliaAgent.ts @@ -0,0 +1,19 @@ +import { createAlgoliaAgent } from './createAlgoliaAgent'; +import type { AlgoliaAgent, AlgoliaAgentOptions } from './types'; + +export type GetAlgoliaAgent = { + algoliaAgents: AlgoliaAgentOptions[]; + client: string; + version: string; +}; + +export function getAlgoliaAgent({ algoliaAgents, client, version }: GetAlgoliaAgent): AlgoliaAgent { + const defaultAlgoliaAgent = createAlgoliaAgent(version).add({ + segment: client, + version, + }); + + algoliaAgents.forEach((algoliaAgent) => defaultAlgoliaAgent.add(algoliaAgent)); + + return defaultAlgoliaAgent; +} diff --git a/packages/client-common/src/helpers.ts b/packages/client-common/src/helpers.ts deleted file mode 100644 index b3901bc75..000000000 --- a/packages/client-common/src/helpers.ts +++ /dev/null @@ -1,47 +0,0 @@ -// eslint-disable-next-line functional/prefer-readonly-type -export function shuffle(array: TData[]): TData[] { - let c = array.length - 1; // eslint-disable-line functional/no-let - - // eslint-disable-next-line functional/no-loop-statement - for (c; c > 0; c--) { - const b = Math.floor(Math.random() * (c + 1)); - const a = array[c]; - array[c] = array[b]; // eslint-disable-line functional/immutable-data, no-param-reassign - array[b] = a; // eslint-disable-line functional/immutable-data, no-param-reassign - } - - return array; -} - -type Methods = { - // eslint-disable-next-line functional/prefer-readonly-type - readonly [key: string]: (base: TBase) => (...args: any[]) => any; -}; - -type AddedMethods> = TBase & - { - [TKey in keyof TMethods extends string ? keyof TMethods : never]: ReturnType; - }; - -export function addMethods>( - base: TBase, - methods?: TMethods -): AddedMethods { - if (!methods) { - return base as AddedMethods; - } - - Object.keys(methods).forEach(key => { - // eslint-disable-next-line functional/immutable-data, no-param-reassign - (base as any)[key] = methods[key](base); - }); - - return base as AddedMethods; -} - -export function encode(format: string, ...args: readonly any[]): string { - // eslint-disable-next-line functional/no-let - let i = 0; - - return format.replace(/%s/g, () => encodeURIComponent(args[i++])); -} diff --git a/packages/client-common/src/index.ts b/packages/client-common/src/index.ts index 3acb69db0..8e0a62b84 100644 --- a/packages/client-common/src/index.ts +++ b/packages/client-common/src/index.ts @@ -1,11 +1,9 @@ -/** - * @file Automatically generated by barrelsby. - */ - +export * from './cache'; +export * from './constants'; +export * from './createAlgoliaAgent'; export * from './createAuth'; -export * from './createRetryablePromise'; -export * from './createWaitablePromise'; -export * from './helpers'; -export * from './version'; -export * from './methods/index'; -export * from './types/index'; +export * from './createIterablePromise'; +export * from './getAlgoliaAgent'; +export * from './logger'; +export * from './transporter'; +export * from './types'; diff --git a/packages/client-common/src/logger/createNullLogger.ts b/packages/client-common/src/logger/createNullLogger.ts new file mode 100644 index 000000000..68c5f3d76 --- /dev/null +++ b/packages/client-common/src/logger/createNullLogger.ts @@ -0,0 +1,15 @@ +import type { Logger } from '../types/logger'; + +export function createNullLogger(): Logger { + return { + debug(_message: string, _args?: any): Promise { + return Promise.resolve(); + }, + info(_message: string, _args?: any): Promise { + return Promise.resolve(); + }, + error(_message: string, _args?: any): Promise { + return Promise.resolve(); + }, + }; +} diff --git a/packages/client-common/src/logger/index.ts b/packages/client-common/src/logger/index.ts new file mode 100644 index 000000000..d0926d332 --- /dev/null +++ b/packages/client-common/src/logger/index.ts @@ -0,0 +1 @@ +export * from './createNullLogger'; diff --git a/packages/client-common/src/methods/client/destroy.ts b/packages/client-common/src/methods/client/destroy.ts deleted file mode 100644 index 1e629ab3a..000000000 --- a/packages/client-common/src/methods/client/destroy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Destroyable } from '@algolia/requester-common'; -import { Transporter } from '@algolia/transporter'; - -export const destroy = (base: { readonly transporter: Transporter }) => { - return (): Readonly> => { - return ((base.transporter.requester as unknown) as Destroyable).destroy(); - }; -}; diff --git a/packages/client-common/src/methods/client/index.ts b/packages/client-common/src/methods/client/index.ts deleted file mode 100644 index 6d42d5874..000000000 --- a/packages/client-common/src/methods/client/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './destroy'; diff --git a/packages/client-common/src/methods/index.ts b/packages/client-common/src/methods/index.ts deleted file mode 100644 index 32085eb7f..000000000 --- a/packages/client-common/src/methods/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './client/index'; diff --git a/packages/client-common/src/transporter/createStatefulHost.ts b/packages/client-common/src/transporter/createStatefulHost.ts new file mode 100644 index 000000000..d78c5e00a --- /dev/null +++ b/packages/client-common/src/transporter/createStatefulHost.ts @@ -0,0 +1,19 @@ +import type { Host, StatefulHost } from '../types'; + +// By default, API Clients at Algolia have expiration delay of 5 mins. +// In the JavaScript client, we have 2 mins. +const EXPIRATION_DELAY = 2 * 60 * 1000; + +export function createStatefulHost(host: Host, status: StatefulHost['status'] = 'up'): StatefulHost { + const lastUpdate = Date.now(); + + function isUp(): boolean { + return status === 'up' || Date.now() - lastUpdate > EXPIRATION_DELAY; + } + + function isTimedOut(): boolean { + return status === 'timed out' && Date.now() - lastUpdate <= EXPIRATION_DELAY; + } + + return { ...host, status, lastUpdate, isUp, isTimedOut }; +} diff --git a/packages/client-common/src/transporter/createTransporter.ts b/packages/client-common/src/transporter/createTransporter.ts new file mode 100644 index 000000000..300e5f983 --- /dev/null +++ b/packages/client-common/src/transporter/createTransporter.ts @@ -0,0 +1,315 @@ +import type { + EndRequest, + Host, + QueryParameters, + Request, + RequestOptions, + Response, + StackFrame, + Transporter, + TransporterOptions, +} from '../types'; +import { createStatefulHost } from './createStatefulHost'; +import { RetryError } from './errors'; +import { deserializeFailure, deserializeSuccess, serializeData, serializeHeaders, serializeUrl } from './helpers'; +import { isRetryable, isSuccess } from './responses'; +import { stackFrameWithoutCredentials, stackTraceWithoutCredentials } from './stackTrace'; + +type RetryableOptions = { + hosts: Host[]; + getTimeout: (retryCount: number, timeout: number) => number; +}; + +export function createTransporter({ + hosts, + hostsCache, + baseHeaders, + logger, + baseQueryParameters, + algoliaAgent, + timeouts, + requester, + requestsCache, + responsesCache, +}: TransporterOptions): Transporter { + async function createRetryableOptions(compatibleHosts: Host[]): Promise { + const statefulHosts = await Promise.all( + compatibleHosts.map((compatibleHost) => { + return hostsCache.get(compatibleHost, () => { + return Promise.resolve(createStatefulHost(compatibleHost)); + }); + }), + ); + const hostsUp = statefulHosts.filter((host) => host.isUp()); + const hostsTimedOut = statefulHosts.filter((host) => host.isTimedOut()); + + // Note, we put the hosts that previously timed out on the end of the list. + const hostsAvailable = [...hostsUp, ...hostsTimedOut]; + const compatibleHostsAvailable = hostsAvailable.length > 0 ? hostsAvailable : compatibleHosts; + + return { + hosts: compatibleHostsAvailable, + getTimeout(timeoutsCount: number, baseTimeout: number): number { + /** + * Imagine that you have 4 hosts, if timeouts will increase + * on the following way: 1 (timed out) > 4 (timed out) > 5 (200). + * + * Note that, the very next request, we start from the previous timeout. + * + * 5 (timed out) > 6 (timed out) > 7 ... + * + * This strategy may need to be reviewed, but is the strategy on the our + * current v3 version. + */ + const timeoutMultiplier = + hostsTimedOut.length === 0 && timeoutsCount === 0 ? 1 : hostsTimedOut.length + 3 + timeoutsCount; + + return timeoutMultiplier * baseTimeout; + }, + }; + } + + async function retryableRequest( + request: Request, + requestOptions: RequestOptions, + isRead = true, + ): Promise { + const stackTrace: StackFrame[] = []; + + /** + * First we prepare the payload that do not depend from hosts. + */ + const data = serializeData(request, requestOptions); + const headers = serializeHeaders(baseHeaders, request.headers, requestOptions.headers); + + // On `GET`, the data is proxied to query parameters. + const dataQueryParameters: QueryParameters = + request.method === 'GET' + ? { + ...request.data, + ...requestOptions.data, + } + : {}; + + const queryParameters: QueryParameters = { + ...baseQueryParameters, + ...request.queryParameters, + ...dataQueryParameters, + }; + + if (algoliaAgent.value) { + queryParameters['x-algolia-agent'] = algoliaAgent.value; + } + + if (requestOptions && requestOptions.queryParameters) { + for (const key of Object.keys(requestOptions.queryParameters)) { + // We want to keep `undefined` and `null` values, + // but also avoid stringifying `object`s, as they are + // handled in the `serializeUrl` step right after. + if ( + !requestOptions.queryParameters[key] || + Object.prototype.toString.call(requestOptions.queryParameters[key]) === '[object Object]' + ) { + queryParameters[key] = requestOptions.queryParameters[key]; + } else { + queryParameters[key] = requestOptions.queryParameters[key].toString(); + } + } + } + + let timeoutsCount = 0; + + const retry = async ( + retryableHosts: Host[], + getTimeout: (timeoutsCount: number, timeout: number) => number, + ): Promise => { + /** + * We iterate on each host, until there is no host left. + */ + const host = retryableHosts.pop(); + if (host === undefined) { + throw new RetryError(stackTraceWithoutCredentials(stackTrace)); + } + + const timeout = { ...timeouts, ...requestOptions.timeouts }; + + const payload: EndRequest = { + data, + headers, + method: request.method, + url: serializeUrl(host, request.path, queryParameters), + connectTimeout: getTimeout(timeoutsCount, timeout.connect), + responseTimeout: getTimeout(timeoutsCount, isRead ? timeout.read : timeout.write), + }; + + /** + * The stackFrame is pushed to the stackTrace so we + * can have information about onRetry and onFailure + * decisions. + */ + const pushToStackTrace = (response: Response): StackFrame => { + const stackFrame: StackFrame = { + request: payload, + response, + host, + triesLeft: retryableHosts.length, + }; + + stackTrace.push(stackFrame); + + return stackFrame; + }; + + const response = await requester.send(payload); + + if (isRetryable(response)) { + const stackFrame = pushToStackTrace(response); + + // If response is a timeout, we increase the number of timeouts so we can increase the timeout later. + if (response.isTimedOut) { + timeoutsCount++; + } + /** + * Failures are individually sent to the logger, allowing + * the end user to debug / store stack frames even + * when a retry error does not happen. + */ + logger.info('Retryable failure', stackFrameWithoutCredentials(stackFrame)); + + /** + * We also store the state of the host in failure cases. If the host, is + * down it will remain down for the next 2 minutes. In a timeout situation, + * this host will be added end of the list of hosts on the next request. + */ + await hostsCache.set(host, createStatefulHost(host, response.isTimedOut ? 'timed out' : 'down')); + + return retry(retryableHosts, getTimeout); + } + + if (isSuccess(response)) { + return deserializeSuccess(response); + } + + pushToStackTrace(response); + throw deserializeFailure(response, stackTrace); + }; + + /** + * Finally, for each retryable host perform request until we got a non + * retryable response. Some notes here: + * + * 1. The reverse here is applied so we can apply a `pop` later on => more performant. + * 2. We also get from the retryable options a timeout multiplier that is tailored + * for the current context. + */ + const compatibleHosts = hosts.filter( + (host) => host.accept === 'readWrite' || (isRead ? host.accept === 'read' : host.accept === 'write'), + ); + const options = await createRetryableOptions(compatibleHosts); + + return retry([...options.hosts].reverse(), options.getTimeout); + } + + function createRequest(request: Request, requestOptions: RequestOptions = {}): Promise { + /** + * A read request is either a `GET` request, or a request that we make + * via the `read` transporter (e.g. `search`). + */ + const isRead = request.useReadTransporter || request.method === 'GET'; + if (!isRead) { + /** + * On write requests, no cache mechanisms are applied, and we + * proxy the request immediately to the requester. + */ + return retryableRequest(request, requestOptions, isRead); + } + + const createRetryableRequest = (): Promise => { + /** + * Then, we prepare a function factory that contains the construction of + * the retryable request. At this point, we may *not* perform the actual + * request. But we want to have the function factory ready. + */ + return retryableRequest(request, requestOptions); + }; + + /** + * Once we have the function factory ready, we need to determine of the + * request is "cacheable" - should be cached. Note that, once again, + * the user can force this option. + */ + const cacheable = requestOptions.cacheable || request.cacheable; + + /** + * If is not "cacheable", we immediately trigger the retryable request, no + * need to check cache implementations. + */ + if (cacheable !== true) { + return createRetryableRequest(); + } + + /** + * If the request is "cacheable", we need to first compute the key to ask + * the cache implementations if this request is on progress or if the + * response already exists on the cache. + */ + const key = { + request, + requestOptions, + transporter: { + queryParameters: baseQueryParameters, + headers: baseHeaders, + }, + }; + + /** + * With the computed key, we first ask the responses cache + * implementation if this request was been resolved before. + */ + return responsesCache.get( + key, + () => { + /** + * If the request has never resolved before, we actually ask if there + * is a current request with the same key on progress. + */ + return requestsCache.get(key, () => + /** + * Finally, if there is no request in progress with the same key, + * this `createRetryableRequest()` will actually trigger the + * retryable request. + */ + requestsCache + .set(key, createRetryableRequest()) + .then( + (response) => Promise.all([requestsCache.delete(key), response]), + (err) => Promise.all([requestsCache.delete(key), Promise.reject(err)]), + ) + .then(([_, response]) => response), + ); + }, + { + /** + * Of course, once we get this response back from the server, we + * tell response cache to actually store the received response + * to be used later. + */ + miss: (response) => responsesCache.set(key, response), + }, + ); + } + + return { + hostsCache, + requester, + timeouts, + logger, + algoliaAgent, + baseHeaders, + baseQueryParameters, + hosts, + request: createRequest, + requestsCache, + responsesCache, + }; +} diff --git a/packages/client-common/src/transporter/errors.ts b/packages/client-common/src/transporter/errors.ts new file mode 100644 index 000000000..0d2b248f9 --- /dev/null +++ b/packages/client-common/src/transporter/errors.ts @@ -0,0 +1,77 @@ +import type { Response, StackFrame } from '../types'; + +export class AlgoliaError extends Error { + override name: string = 'AlgoliaError'; + + constructor(message: string, name: string) { + super(message); + + if (name) { + this.name = name; + } + } +} + +export class ErrorWithStackTrace extends AlgoliaError { + stackTrace: StackFrame[]; + + constructor(message: string, stackTrace: StackFrame[], name: string) { + super(message, name); + // the array and object should be frozen to reflect the stackTrace at the time of the error + this.stackTrace = stackTrace; + } +} + +export class RetryError extends ErrorWithStackTrace { + constructor(stackTrace: StackFrame[]) { + super( + 'Unreachable hosts - your application id may be incorrect. If the error persists, please reach out to the Algolia Support team: https://alg.li/support.', + stackTrace, + 'RetryError', + ); + } +} + +export class ApiError extends ErrorWithStackTrace { + status: number; + + constructor(message: string, status: number, stackTrace: StackFrame[], name = 'ApiError') { + super(message, stackTrace, name); + this.status = status; + } +} + +export class DeserializationError extends AlgoliaError { + response: Response; + + constructor(message: string, response: Response) { + super(message, 'DeserializationError'); + this.response = response; + } +} + +export type DetailedErrorWithMessage = { + message: string; + label: string; +}; + +export type DetailedErrorWithTypeID = { + id: string; + type: string; + name?: string; +}; + +export type DetailedError = { + code: string; + details?: DetailedErrorWithMessage[] | DetailedErrorWithTypeID[]; +}; + +// DetailedApiError is only used by the ingestion client to return more informative error, other clients will use ApiClient. +export class DetailedApiError extends ApiError { + error: DetailedError; + + constructor(message: string, status: number, error: DetailedError, stackTrace: StackFrame[]) { + super(message, status, stackTrace, 'DetailedApiError'); + this.error = error; + } +} diff --git a/packages/client-common/src/transporter/helpers.ts b/packages/client-common/src/transporter/helpers.ts new file mode 100644 index 000000000..25cd25ae6 --- /dev/null +++ b/packages/client-common/src/transporter/helpers.ts @@ -0,0 +1,96 @@ +import type { Headers, Host, QueryParameters, Request, RequestOptions, Response, StackFrame } from '../types'; +import { ApiError, DeserializationError, DetailedApiError } from './errors'; + +export function shuffle(array: TData[]): TData[] { + const shuffledArray = array; + + for (let c = array.length - 1; c > 0; c--) { + const b = Math.floor(Math.random() * (c + 1)); + const a = array[c]; + + shuffledArray[c] = array[b]; + shuffledArray[b] = a; + } + + return shuffledArray; +} + +export function serializeUrl(host: Host, path: string, queryParameters: QueryParameters): string { + const queryParametersAsString = serializeQueryParameters(queryParameters); + let url = `${host.protocol}://${host.url}${host.port ? `:${host.port}` : ''}/${ + path.charAt(0) === '/' ? path.substring(1) : path + }`; + + if (queryParametersAsString.length) { + url += `?${queryParametersAsString}`; + } + + return url; +} + +export function serializeQueryParameters(parameters: QueryParameters): string { + return Object.keys(parameters) + .filter((key) => parameters[key] !== undefined) + .sort() + .map( + (key) => + `${key}=${encodeURIComponent( + Object.prototype.toString.call(parameters[key]) === '[object Array]' + ? parameters[key].join(',') + : parameters[key], + ).replace(/\+/g, '%20')}`, + ) + .join('&'); +} + +export function serializeData(request: Request, requestOptions: RequestOptions): string | undefined { + if (request.method === 'GET' || (request.data === undefined && requestOptions.data === undefined)) { + return undefined; + } + + const data = Array.isArray(request.data) ? request.data : { ...request.data, ...requestOptions.data }; + + return JSON.stringify(data); +} + +export function serializeHeaders( + baseHeaders: Headers, + requestHeaders: Headers, + requestOptionsHeaders?: Headers, +): Headers { + const headers: Headers = { + Accept: 'application/json', + ...baseHeaders, + ...requestHeaders, + ...requestOptionsHeaders, + }; + const serializedHeaders: Headers = {}; + + Object.keys(headers).forEach((header) => { + const value = headers[header]; + serializedHeaders[header.toLowerCase()] = value; + }); + + return serializedHeaders; +} + +export function deserializeSuccess(response: Response): TObject { + try { + return JSON.parse(response.content); + } catch (e) { + throw new DeserializationError((e as Error).message, response); + } +} + +export function deserializeFailure({ content, status }: Response, stackFrame: StackFrame[]): Error { + try { + const parsed = JSON.parse(content); + if ('error' in parsed) { + return new DetailedApiError(parsed.message, status, parsed.error, stackFrame); + } + return new ApiError(parsed.message, status, stackFrame); + } catch { + // .. + } + return new ApiError(content, status, stackFrame); +} diff --git a/packages/client-common/src/transporter/index.ts b/packages/client-common/src/transporter/index.ts new file mode 100644 index 000000000..4c95ba166 --- /dev/null +++ b/packages/client-common/src/transporter/index.ts @@ -0,0 +1,6 @@ +export * from './createStatefulHost'; +export * from './createTransporter'; +export * from './errors'; +export * from './helpers'; +export * from './responses'; +export * from './stackTrace'; diff --git a/packages/client-common/src/transporter/responses.ts b/packages/client-common/src/transporter/responses.ts new file mode 100644 index 000000000..9159d6525 --- /dev/null +++ b/packages/client-common/src/transporter/responses.ts @@ -0,0 +1,13 @@ +import type { Response } from '../types'; + +export function isNetworkError({ isTimedOut, status }: Omit): boolean { + return !isTimedOut && ~~status === 0; +} + +export function isRetryable({ isTimedOut, status }: Omit): boolean { + return isTimedOut || isNetworkError({ isTimedOut, status }) || (~~(status / 100) !== 2 && ~~(status / 100) !== 4); +} + +export function isSuccess({ status }: Pick): boolean { + return ~~(status / 100) === 2; +} diff --git a/packages/client-common/src/transporter/stackTrace.ts b/packages/client-common/src/transporter/stackTrace.ts new file mode 100644 index 000000000..29c933aa2 --- /dev/null +++ b/packages/client-common/src/transporter/stackTrace.ts @@ -0,0 +1,22 @@ +import type { Headers, StackFrame } from '../types'; + +export function stackTraceWithoutCredentials(stackTrace: StackFrame[]): StackFrame[] { + return stackTrace.map((stackFrame) => stackFrameWithoutCredentials(stackFrame)); +} + +export function stackFrameWithoutCredentials(stackFrame: StackFrame): StackFrame { + const modifiedHeaders: Headers = stackFrame.request.headers['x-algolia-api-key'] + ? { 'x-algolia-api-key': '*****' } + : {}; + + return { + ...stackFrame, + request: { + ...stackFrame.request, + headers: { + ...stackFrame.request.headers, + ...modifiedHeaders, + }, + }, + }; +} diff --git a/packages/client-common/src/types/Auth.ts b/packages/client-common/src/types/Auth.ts deleted file mode 100644 index 05b17cf50..000000000 --- a/packages/client-common/src/types/Auth.ts +++ /dev/null @@ -1,13 +0,0 @@ -export type Auth = { - /** - * Returns the headers related to auth. Should be - * merged to the transporter headers. - */ - readonly headers: () => Readonly>; - - /** - * Returns the query parameters related to auth. Should be - * merged to the query parameters headers. - */ - readonly queryParameters: () => Readonly>; -}; diff --git a/packages/client-common/src/types/AuthModeType.ts b/packages/client-common/src/types/AuthModeType.ts deleted file mode 100644 index eb3ab43b9..000000000 --- a/packages/client-common/src/types/AuthModeType.ts +++ /dev/null @@ -1,13 +0,0 @@ -export const AuthMode: Readonly> = { - /** - * If auth credentials should be in query parameters. - */ - WithinQueryParameters: 0, - - /** - * If auth credentials should be in headers. - */ - WithinHeaders: 1, -}; - -export type AuthModeType = 0 | 1; diff --git a/packages/client-common/src/types/ClientTransporterOptions.ts b/packages/client-common/src/types/ClientTransporterOptions.ts deleted file mode 100644 index 389c80b9b..000000000 --- a/packages/client-common/src/types/ClientTransporterOptions.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Headers, HostOptions, QueryParameters, TransporterOptions } from '@algolia/transporter'; - -export type ClientTransporterOptions = Pick< - TransporterOptions, - Exclude & - Exclude & - Exclude -> & { - /** - * The hosts used by the requester. - */ - readonly hosts?: readonly HostOptions[]; - - /** - * The headers used by the requester. The transporter - * layer may add some extra headers during the request - * for the user agent, and others. - */ - readonly headers?: Headers; - - /** - * The query parameters used by the requester. The transporter - * layer may add some extra headers during the request - * for the user agent, and others. - */ - readonly queryParameters?: QueryParameters; -}; diff --git a/packages/client-common/src/types/CreateClient.ts b/packages/client-common/src/types/CreateClient.ts deleted file mode 100644 index ce0a57da5..000000000 --- a/packages/client-common/src/types/CreateClient.ts +++ /dev/null @@ -1,10 +0,0 @@ -export type CreateClient = < - TMethods extends { - readonly [key: string]: (base: TClient) => (...args: any) => any; - } ->( - options: TOptions & { readonly methods?: TMethods } -) => TClient & - { - [key in keyof TMethods extends string ? keyof TMethods : never]: ReturnType; // eslint-disable-line @typescript-eslint/generic-type-naming - }; diff --git a/packages/client-common/src/types/Wait.ts b/packages/client-common/src/types/Wait.ts deleted file mode 100644 index b89c631d9..000000000 --- a/packages/client-common/src/types/Wait.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { RequestOptions } from '@algolia/transporter'; - -export type Wait = ( - /** - * The original response. - */ - response: TResponse, - - /** - * The custom request options. - */ - requestOptions?: RequestOptions -) => Readonly>; diff --git a/packages/client-common/src/types/WaitablePromise.ts b/packages/client-common/src/types/WaitablePromise.ts deleted file mode 100644 index ac65d895e..000000000 --- a/packages/client-common/src/types/WaitablePromise.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { RequestOptions } from '@algolia/transporter'; - -export type WaitablePromise = Readonly> & { - /** - * Wait for a task to complete before executing the next line of code, to synchronize index updates. - * - * All write operations in Algolia are asynchronous by design. It means that when you add or - * update an object to your index, our servers will reply to your request with a taskID as - * soon as they understood the write operation. The actual insert and indexing will be - * done after replying to your code. - * - * You can wait for a task to complete by using this method. - */ - readonly wait: (requestOptions?: RequestOptions) => Readonly>; -}; diff --git a/packages/client-common/src/types/cache.ts b/packages/client-common/src/types/cache.ts new file mode 100644 index 000000000..6a7e9fff1 --- /dev/null +++ b/packages/client-common/src/types/cache.ts @@ -0,0 +1,75 @@ +export type Cache = { + /** + * Gets the value of the given `key`. + */ + get: ( + key: Record | string, + defaultValue: () => Promise, + events?: CacheEvents, + ) => Promise; + + /** + * Sets the given value with the given `key`. + */ + set: (key: Record | string, value: TValue) => Promise; + + /** + * Deletes the given `key`. + */ + delete: (key: Record | string) => Promise; + + /** + * Clears the cache. + */ + clear: () => Promise; +}; + +export type CacheEvents = { + /** + * The callback when the given `key` is missing from the cache. + */ + miss: (value: TValue) => Promise; +}; + +export type MemoryCacheOptions = { + /** + * If keys and values should be serialized using `JSON.stringify`. + */ + serializable?: boolean; +}; + +export type BrowserLocalStorageOptions = { + /** + * The cache key. + */ + key: string; + + /** + * The time to live for each cached item in seconds. + */ + timeToLive?: number; + + /** + * The native local storage implementation. + */ + localStorage?: Storage; +}; + +export type BrowserLocalStorageCacheItem = { + /** + * The cache item creation timestamp. + */ + timestamp: number; + + /** + * The cache item value. + */ + value: any; +}; + +export type FallbackableCacheOptions = { + /** + * List of caches order by priority. + */ + caches: Cache[]; +}; diff --git a/packages/client-common/src/types/createClient.ts b/packages/client-common/src/types/createClient.ts new file mode 100644 index 000000000..1238b9a08 --- /dev/null +++ b/packages/client-common/src/types/createClient.ts @@ -0,0 +1,15 @@ +import type { AlgoliaAgentOptions, TransporterOptions } from './transporter'; + +export type AuthMode = 'WithinHeaders' | 'WithinQueryParameters'; + +type OverriddenTransporterOptions = 'baseHeaders' | 'baseQueryParameters' | 'hosts'; + +export type CreateClientOptions = Omit & + Partial> & { + appId: string; + apiKey: string; + authMode?: AuthMode; + algoliaAgents: AlgoliaAgentOptions[]; + }; + +export type ClientOptions = Partial>; diff --git a/packages/client-common/src/types/createIterablePromise.ts b/packages/client-common/src/types/createIterablePromise.ts new file mode 100644 index 000000000..62178b9e1 --- /dev/null +++ b/packages/client-common/src/types/createIterablePromise.ts @@ -0,0 +1,40 @@ +export type IterableOptions = Partial<{ + /** + * The function that runs right after the API call has been resolved, allows you to do anything with the response before `validate`. + */ + aggregator: (response: TResponse) => unknown | PromiseLike; + + /** + * The `validate` condition to throw an error and its message. + */ + error: { + /** + * The function to validate the error condition. + */ + validate: (response: TResponse) => boolean | PromiseLike; + + /** + * The error message to throw. + */ + message: (response: TResponse) => string | PromiseLike; + }; + + /** + * The function to decide how long to wait between iterations. + */ + timeout: () => number | PromiseLike; +}>; + +export type CreateIterablePromise = IterableOptions & { + /** + * The function to run, which returns a promise. + * + * The `previousResponse` parameter (`undefined` on the first call) allows you to build your request with incremental logic, to iterate on `page` or `cursor` for example. + */ + func: (previousResponse?: TResponse) => Promise; + + /** + * The validator function. It receive the resolved return of the API call. + */ + validate: (response: TResponse) => boolean | PromiseLike; +}; diff --git a/packages/client-common/src/types/host.ts b/packages/client-common/src/types/host.ts new file mode 100644 index 000000000..ba0ab0524 --- /dev/null +++ b/packages/client-common/src/types/host.ts @@ -0,0 +1,43 @@ +export type Host = { + /** + * The host URL. + */ + url: string; + + /** + * The accepted transporter. + */ + accept: 'read' | 'readWrite' | 'write'; + + /** + * The protocol of the host URL. + */ + protocol: 'http' | 'https'; + + /** + * The port of the host URL. + */ + port?: number; +}; + +export type StatefulHost = Host & { + /** + * The status of the host. + */ + status: 'down' | 'timed out' | 'up'; + + /** + * The last update of the host status, used to compare with the expiration delay. + */ + lastUpdate: number; + + /** + * Returns whether the host is up or not. + */ + isUp: () => boolean; + + /** + * Returns whether the host is timed out or not. + */ + isTimedOut: () => boolean; +}; diff --git a/packages/client-common/src/types/index.ts b/packages/client-common/src/types/index.ts index 7b899c6d9..8873a101c 100644 --- a/packages/client-common/src/types/index.ts +++ b/packages/client-common/src/types/index.ts @@ -1,10 +1,7 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './Auth'; -export * from './AuthModeType'; -export * from './ClientTransporterOptions'; -export * from './CreateClient'; -export * from './Wait'; -export * from './WaitablePromise'; +export * from './cache'; +export * from './createClient'; +export * from './createIterablePromise'; +export * from './host'; +export * from './logger'; +export * from './requester'; +export * from './transporter'; diff --git a/packages/client-common/src/types/logger.ts b/packages/client-common/src/types/logger.ts new file mode 100644 index 000000000..77e866392 --- /dev/null +++ b/packages/client-common/src/types/logger.ts @@ -0,0 +1,24 @@ +export const LogLevelEnum: Readonly> = { + Debug: 1, + Info: 2, + Error: 3, +}; + +export type LogLevelType = 1 | 2 | 3; + +export type Logger = { + /** + * Logs debug messages. + */ + debug: (message: string, args?: any) => Promise; + + /** + * Logs info messages. + */ + info: (message: string, args?: any) => Promise; + + /** + * Logs error messages. + */ + error: (message: string, args?: any) => Promise; +}; diff --git a/packages/client-common/src/types/requester.ts b/packages/client-common/src/types/requester.ts new file mode 100644 index 000000000..ae8ce160d --- /dev/null +++ b/packages/client-common/src/types/requester.ts @@ -0,0 +1,67 @@ +export type Headers = Record; + +export type QueryParameters = Record; + +/** + * The method of the request. + */ +export type Method = 'DELETE' | 'GET' | 'PATCH' | 'POST' | 'PUT'; + +export type Request = { + method: Method; + /** + * The path of the REST API to send the request to. + */ + path: string; + queryParameters: QueryParameters; + data?: Array> | Record; + headers: Headers; + /** + * If the given request should persist on the cache. Keep in mind, + * that some methods may have this option enabled by default. + */ + cacheable?: boolean; + /** + * Some POST methods in the Algolia REST API uses the `read` transporter. + * This information is defined at the spec level. + */ + useReadTransporter?: boolean; +}; + +export type EndRequest = Pick & { + /** + * The full URL of the REST API. + */ + url: string; + /** + * The connection timeout, in milliseconds. + */ + connectTimeout: number; + /** + * The response timeout, in milliseconds. + */ + responseTimeout: number; + data?: string; +}; + +export type Response = { + /** + * The body of the response. + */ + content: string; + /** + * Whether the API call is timed out or not. + */ + isTimedOut: boolean; + /** + * The HTTP status code of the response. + */ + status: number; +}; + +export type Requester = { + /** + * Sends the given `request` to the server. + */ + send: (request: EndRequest) => Promise; +}; diff --git a/packages/client-common/src/types/transporter.ts b/packages/client-common/src/types/transporter.ts new file mode 100644 index 000000000..b0614f58e --- /dev/null +++ b/packages/client-common/src/types/transporter.ts @@ -0,0 +1,153 @@ +import type { Cache } from './cache'; +import type { Host } from './host'; +import type { Logger } from './logger'; +import type { EndRequest, Headers, QueryParameters, Request, Requester, Response } from './requester'; + +export type RequestOptions = Pick & { + /** + * Custom timeout for the request. Note that, in normal situations + * the given timeout will be applied. But the transporter layer may + * increase this timeout if there is need for it. + */ + timeouts?: Partial; + + /** + * Custom headers for the request. This headers are + * going to be merged the transporter headers. + */ + headers?: Headers; + + /** + * Custom query parameters for the request. This query parameters are + * going to be merged the transporter query parameters. + */ + queryParameters?: QueryParameters; + + /** + * Custom data for the request. This data is + * going to be merged the transporter data. + */ + data?: Array> | Record; +}; + +export type StackFrame = { + request: EndRequest; + response: Response; + host: Host; + triesLeft: number; +}; + +export type AlgoliaAgentOptions = { + /** + * The segment. Usually the integration name. + */ + segment: string; + + /** + * The version. Usually the integration version. + */ + version?: string; +}; + +export type AlgoliaAgent = { + /** + * The raw value of the user agent. + */ + value: string; + + /** + * Mutates the current user agent adding the given user agent options. + */ + add: (options: AlgoliaAgentOptions) => AlgoliaAgent; +}; + +export type Timeouts = { + /** + * Timeout in milliseconds before the connection is established. + */ + connect: number; + + /** + * Timeout in milliseconds before reading the response on a read request. + */ + read: number; + + /** + * Timeout in milliseconds before reading the response on a write request. + */ + write: number; +}; + +export type TransporterOptions = { + /** + * The cache of the hosts. Usually used to persist + * the state of the host when its down. + */ + hostsCache: Cache; + + /** + * The logger instance to send events of the transporter. + */ + logger: Logger; + + /** + * The underlying requester used. Should differ + * depending of the environment where the client + * will be used. + */ + requester: Requester; + + /** + * The cache of the requests. When requests are + * `cacheable`, the returned promised persists + * in this cache to shared in similar requests + * before being resolved. + */ + requestsCache: Cache; + + /** + * The cache of the responses. When requests are + * `cacheable`, the returned responses persists + * in this cache to shared in similar requests. + */ + responsesCache: Cache; + + /** + * The timeouts used by the requester. The transporter + * layer may increase this timeouts as defined on the + * retry strategy. + */ + timeouts: Timeouts; + + /** + * The hosts used by the requester. + */ + hosts: Host[]; + + /** + * The headers used by the requester. The transporter + * layer may add some extra headers during the request + * for the user agent, and others. + */ + baseHeaders: Headers; + + /** + * The query parameters used by the requester. The transporter + * layer may add some extra headers during the request + * for the user agent, and others. + */ + baseQueryParameters: QueryParameters; + + /** + * The user agent used. Sent on query parameters. + */ + algoliaAgent: AlgoliaAgent; +}; + +export type Transporter = TransporterOptions & { + /** + * Performs a request. + * The `baseRequest` and `baseRequestOptions` will be merged accordingly. + */ + request: (baseRequest: Request, baseRequestOptions?: RequestOptions) => Promise; +}; diff --git a/packages/client-common/src/version.ts b/packages/client-common/src/version.ts deleted file mode 100644 index c797c69ca..000000000 --- a/packages/client-common/src/version.ts +++ /dev/null @@ -1 +0,0 @@ -export const version = '4.13.1'; diff --git a/packages/client-common/tsconfig.json b/packages/client-common/tsconfig.json new file mode 100644 index 000000000..f6efa8845 --- /dev/null +++ b/packages/client-common/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "types": ["node", "vitest/globals"], + "outDir": "dist", + "skipLibCheck": true + }, + "include": ["src"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/client-common/tsup.config.ts b/packages/client-common/tsup.config.ts new file mode 100644 index 000000000..0ed79023d --- /dev/null +++ b/packages/client-common/tsup.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from 'tsup'; + +import { getBaseNodeOptions } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +export default defineConfig([ + { + ...getBaseNodeOptions(pkg, __dirname), + format: 'cjs', + dts: { entry: { common: 'src/index.ts' } }, + entry: { common: 'src/index.ts' }, + }, + { + ...getBaseNodeOptions(pkg, __dirname), + format: 'esm', + dts: { entry: { common: 'src/index.ts' } }, + entry: { common: 'src/index.ts' }, + }, +]); diff --git a/packages/client-common/vitest.workspace.ts b/packages/client-common/vitest.workspace.ts new file mode 100644 index 000000000..a64ac3b8e --- /dev/null +++ b/packages/client-common/vitest.workspace.ts @@ -0,0 +1,29 @@ +import { defineWorkspace } from 'vitest/config'; + +export default defineWorkspace([ + { + test: { + include: [ + 'src/__tests__/cache/null-cache.test.ts', + 'src/__tests__/cache/memory-cache.test.ts', + 'src/__tests__/create-iterable-promise.test.ts', + 'src/__tests__/logger/null-logger.test.ts', + ], + name: 'node', + environment: 'node', + }, + }, + { + test: { + include: [ + 'src/__tests__/cache/browser-local-storage-cache.test.ts', + 'src/__tests__/cache/fallbackable-cache.test.ts', + 'src/__tests__/cache/null-cache.test.ts', + 'src/__tests__/create-iterable-promise.test.ts', + 'src/__tests__/logger/null-logger.test.ts', + ], + name: 'jsdom', + environment: 'jsdom', + }, + }, +]); diff --git a/packages/client-composition/LICENSE b/packages/client-composition/LICENSE new file mode 100644 index 000000000..fddf416f9 --- /dev/null +++ b/packages/client-composition/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-Present Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/client-composition/README.md b/packages/client-composition/README.md new file mode 100644 index 000000000..ce47a605f --- /dev/null +++ b/packages/client-composition/README.md @@ -0,0 +1,77 @@ +

+ + Algolia for JavaScript + + +

The perfect starting point to integrate Algolia within your JavaScript project

+ +

+ NPM version + NPM downloads + jsDelivr Downloads + License +

+

+ +

+ Documentation • + InstantSearch • + Community Forum • + Stack Overflow • + Report a bug • + FAQ • + Support +

+ +## ✨ Features + +- Thin & **minimal low-level HTTP client** to interact with Algolia's API +- Works both on the **browser** and **node.js** +- **UMD and ESM compatible**, you can use it with any module loader +- Built with TypeScript + +## 💡 Getting Started + +> [!TIP] +> This API client is already a dependency of [the algoliasearch client](https://www.npmjs.com/package/algoliasearch), you don't need to manually install `@algolia/client-composition` if you already have `algoliasearch` installed. + +To get started, you first need to install @algolia/client-composition (or any other available API client package). +All of our clients comes with type definition, and are available for both browser and node environments. + +### With a package manager + +```bash +yarn add @algolia/client-composition@0.0.1-alpha.20 +# or +npm install @algolia/client-composition@0.0.1-alpha.20 +# or +pnpm add @algolia/client-composition@0.0.1-alpha.20 +``` + +### Without a package manager + +Add the following JavaScript snippet to the of your website: + +```html + +``` + +### Usage + +You can now import the Algolia API client in your project and play with it. + +```js +import { compositionClient } from '@algolia/client-composition'; + +const client = compositionClient('YOUR_APP_ID', 'YOUR_API_KEY'); +``` + +For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/javascript/v5/methods/composition-full/)**. + +## ❓ Troubleshooting + +Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/libraries/javascript/v5/) where you will find answers for the most common issues and gotchas with the client. You can also open [a GitHub issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=&projects=&template=Bug_report.md) + +## 📄 License + +The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). diff --git a/packages/client-composition/builds/browser.ts b/packages/client-composition/builds/browser.ts new file mode 100644 index 000000000..933a90d96 --- /dev/null +++ b/packages/client-composition/builds/browser.ts @@ -0,0 +1,50 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import { createXhrRequester } from '@algolia/requester-browser-xhr'; + +import { + createBrowserLocalStorageCache, + createFallbackableCache, + createMemoryCache, + createNullLogger, +} from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { apiClientVersion, createCompositionClient } from '../src/compositionFullClient'; + +export { apiClientVersion } from '../src/compositionFullClient'; + +export * from '../model'; + +export function compositionClient(appId: string, apiKey: string, options?: ClientOptions): CompositionClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return createCompositionClient({ + appId, + apiKey, + timeouts: { + connect: 1000, + read: 2000, + write: 30000, + }, + logger: createNullLogger(), + requester: createXhrRequester(), + algoliaAgents: [{ segment: 'Browser' }], + authMode: 'WithinHeaders', + responsesCache: createMemoryCache(), + requestsCache: createMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], + }), + ...options, + }); +} + +export type CompositionClient = ReturnType; diff --git a/packages/client-composition/builds/fetch.ts b/packages/client-composition/builds/fetch.ts new file mode 100644 index 000000000..55992207f --- /dev/null +++ b/packages/client-composition/builds/fetch.ts @@ -0,0 +1,43 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type CompositionClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createCompositionClient } from '../src/compositionFullClient'; + +export { apiClientVersion } from '../src/compositionFullClient'; + +export * from '../model'; + +export function compositionClient(appId: string, apiKey: string, options?: ClientOptions): CompositionClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createCompositionClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Fetch' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-composition/builds/node.ts b/packages/client-composition/builds/node.ts new file mode 100644 index 000000000..3590107d6 --- /dev/null +++ b/packages/client-composition/builds/node.ts @@ -0,0 +1,44 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type CompositionClient = ReturnType; + +import { createHttpRequester } from '@algolia/requester-node-http'; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createCompositionClient } from '../src/compositionFullClient'; + +export { apiClientVersion } from '../src/compositionFullClient'; + +export * from '../model'; + +export function compositionClient(appId: string, apiKey: string, options?: ClientOptions): CompositionClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createCompositionClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createHttpRequester(), + algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-composition/builds/worker.ts b/packages/client-composition/builds/worker.ts new file mode 100644 index 000000000..500df27b0 --- /dev/null +++ b/packages/client-composition/builds/worker.ts @@ -0,0 +1,43 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type CompositionClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createCompositionClient } from '../src/compositionFullClient'; + +export { apiClientVersion } from '../src/compositionFullClient'; + +export * from '../model'; + +export function compositionClient(appId: string, apiKey: string, options?: ClientOptions): CompositionClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createCompositionClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Worker' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-composition/index.d.ts b/packages/client-composition/index.d.ts new file mode 100644 index 000000000..e81a1cd3e --- /dev/null +++ b/packages/client-composition/index.d.ts @@ -0,0 +1 @@ +export * from './dist/node'; diff --git a/packages/client-composition/index.js b/packages/client-composition/index.js new file mode 100644 index 000000000..21e26aad3 --- /dev/null +++ b/packages/client-composition/index.js @@ -0,0 +1 @@ +module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/client-composition/model/action.ts b/packages/client-composition/model/action.ts new file mode 100644 index 000000000..f00b21c4b --- /dev/null +++ b/packages/client-composition/model/action.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Type of Composition Batch operation. + */ +export type Action = 'upsert' | 'delete'; diff --git a/packages/client-composition/model/advancedSyntaxFeatures.ts b/packages/client-composition/model/advancedSyntaxFeatures.ts new file mode 100644 index 000000000..61e577d48 --- /dev/null +++ b/packages/client-composition/model/advancedSyntaxFeatures.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AdvancedSyntaxFeatures = 'exactPhrase' | 'excludeWords'; diff --git a/packages/client-composition/model/alternativesAsExact.ts b/packages/client-composition/model/alternativesAsExact.ts new file mode 100644 index 000000000..b4d50c7a5 --- /dev/null +++ b/packages/client-composition/model/alternativesAsExact.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AlternativesAsExact = 'ignorePlurals' | 'singleWordSynonym' | 'multiWordsSynonym' | 'ignoreConjugations'; diff --git a/packages/client-composition/model/anchoring.ts b/packages/client-composition/model/anchoring.ts new file mode 100644 index 000000000..9effad076 --- /dev/null +++ b/packages/client-composition/model/anchoring.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Which part of the search query the pattern should match: - `startsWith`. The pattern must match the beginning of the query. - `endsWith`. The pattern must match the end of the query. - `is`. The pattern must match the query exactly. - `contains`. The pattern must match anywhere in the query. Empty queries are only allowed as patterns with `anchoring: is`. + */ +export type Anchoring = 'is' | 'startsWith' | 'endsWith' | 'contains'; diff --git a/packages/client-composition/model/aroundPrecision.ts b/packages/client-composition/model/aroundPrecision.ts new file mode 100644 index 000000000..79ff0cd59 --- /dev/null +++ b/packages/client-composition/model/aroundPrecision.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Range } from './range'; + +/** + * Precision of a coordinate-based search in meters to group results with similar distances. The Geo ranking criterion considers all matches within the same range of distances to be equal. + */ +export type AroundPrecision = number | Array; diff --git a/packages/client-composition/model/aroundRadius.ts b/packages/client-composition/model/aroundRadius.ts new file mode 100644 index 000000000..8198f1e75 --- /dev/null +++ b/packages/client-composition/model/aroundRadius.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AroundRadiusAll } from './aroundRadiusAll'; + +/** + * Maximum radius for a search around a central location. This parameter works in combination with the `aroundLatLng` and `aroundLatLngViaIP` parameters. By default, the search radius is determined automatically from the density of hits around the central location. The search radius is small if there are many hits close to the central coordinates. + */ +export type AroundRadius = number | AroundRadiusAll; diff --git a/packages/client-composition/model/aroundRadiusAll.ts b/packages/client-composition/model/aroundRadiusAll.ts new file mode 100644 index 000000000..e5f107060 --- /dev/null +++ b/packages/client-composition/model/aroundRadiusAll.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Return all records with a valid `_geoloc` attribute. Don\'t filter by distance. + */ +export type AroundRadiusAll = 'all'; diff --git a/packages/client-composition/model/banner.ts b/packages/client-composition/model/banner.ts new file mode 100644 index 000000000..793feec15 --- /dev/null +++ b/packages/client-composition/model/banner.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BannerImage } from './bannerImage'; +import type { BannerLink } from './bannerLink'; + +/** + * Banner with image and link to redirect users. + */ +export type Banner = { + image?: BannerImage; + + link?: BannerLink; +}; diff --git a/packages/client-composition/model/bannerImage.ts b/packages/client-composition/model/bannerImage.ts new file mode 100644 index 000000000..a0988168e --- /dev/null +++ b/packages/client-composition/model/bannerImage.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BannerImageUrl } from './bannerImageUrl'; + +/** + * Image to show inside a banner. + */ +export type BannerImage = { + urls?: Array; + + title?: string; +}; diff --git a/packages/client-composition/model/bannerImageUrl.ts b/packages/client-composition/model/bannerImageUrl.ts new file mode 100644 index 000000000..6be2b3efd --- /dev/null +++ b/packages/client-composition/model/bannerImageUrl.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * URL for an image to show inside a banner. + */ +export type BannerImageUrl = { + url?: string; +}; diff --git a/packages/client-composition/model/bannerLink.ts b/packages/client-composition/model/bannerLink.ts new file mode 100644 index 000000000..52800a208 --- /dev/null +++ b/packages/client-composition/model/bannerLink.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Link for a banner defined in the Merchandising Studio. + */ +export type BannerLink = { + url?: string; +}; diff --git a/packages/client-composition/model/baseSearchResponse.ts b/packages/client-composition/model/baseSearchResponse.ts new file mode 100644 index 000000000..066ecc865 --- /dev/null +++ b/packages/client-composition/model/baseSearchResponse.ts @@ -0,0 +1,129 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Exhaustive } from './exhaustive'; +import type { FacetStats } from './facetStats'; +import type { Redirect } from './redirect'; +import type { RenderingContent } from './renderingContent'; + +export type BaseSearchResponse = Record & { + /** + * A/B test ID. This is only included in the response for indices that are part of an A/B test. + */ + abTestID?: number; + + /** + * Variant ID. This is only included in the response for indices that are part of an A/B test. + */ + abTestVariantID?: number; + + /** + * Computed geographical location. + */ + aroundLatLng?: string; + + /** + * Distance from a central coordinate provided by `aroundLatLng`. + */ + automaticRadius?: string; + + exhaustive?: Exhaustive; + + /** + * Rules applied to the query. + */ + appliedRules?: Array>; + + /** + * See the `facetsCount` field of the `exhaustive` object in the response. + */ + exhaustiveFacetsCount?: boolean; + + /** + * See the `nbHits` field of the `exhaustive` object in the response. + */ + exhaustiveNbHits?: boolean; + + /** + * See the `typo` field of the `exhaustive` object in the response. + */ + exhaustiveTypo?: boolean; + + /** + * Facet counts. + */ + facets?: { [key: string]: { [key: string]: number } }; + + /** + * Statistics for numerical facets. + */ + facets_stats?: { [key: string]: FacetStats }; + + /** + * Index name used for the query. + */ + index?: string; + + /** + * Index name used for the query. During A/B testing, the targeted index isn\'t always the index used by the query. + */ + indexUsed?: string; + + /** + * Warnings about the query. + */ + message?: string; + + /** + * Number of hits selected and sorted by the relevant sort algorithm. + */ + nbSortedHits?: number; + + /** + * Post-[normalization](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/#what-does-normalization-mean) query string that will be searched. + */ + parsedQuery?: string; + + /** + * Time the server took to process the request, in milliseconds. + */ + processingTimeMS: number; + + /** + * Experimental. List of processing steps and their times, in milliseconds. You can use this list to investigate performance issues. + */ + processingTimingsMS?: Record; + + /** + * Markup text indicating which parts of the original query have been removed to retrieve a non-empty result set. + */ + queryAfterRemoval?: string; + + redirect?: Redirect; + + renderingContent?: RenderingContent; + + /** + * Time the server took to process the request, in milliseconds. + */ + serverTimeMS?: number; + + /** + * Host name of the server that processed the request. + */ + serverUsed?: string; + + /** + * An object with custom data. You can store up to 32kB as custom data. + */ + userData?: any | null; + + /** + * Unique identifier for the query. This is used for [click analytics](https://www.algolia.com/doc/guides/analytics/click-analytics/). + */ + queryID?: string; + + /** + * Whether automatic events collection is enabled for the application. + */ + _automaticInsights?: boolean; +}; diff --git a/packages/client-composition/model/batchCompositionAction.ts b/packages/client-composition/model/batchCompositionAction.ts new file mode 100644 index 000000000..7b9fd6979 --- /dev/null +++ b/packages/client-composition/model/batchCompositionAction.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Composition } from './composition'; + +import type { DeleteCompositionAction } from './deleteCompositionAction'; + +export type BatchCompositionAction = Composition | DeleteCompositionAction; diff --git a/packages/client-composition/model/batchParams.ts b/packages/client-composition/model/batchParams.ts new file mode 100644 index 000000000..9ab9e4a92 --- /dev/null +++ b/packages/client-composition/model/batchParams.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MultipleBatchRequest } from './multipleBatchRequest'; + +/** + * Batch parameters. + */ +export type BatchParams = { + requests: Array; +}; diff --git a/packages/client-composition/model/booleanString.ts b/packages/client-composition/model/booleanString.ts new file mode 100644 index 000000000..4cf1fb196 --- /dev/null +++ b/packages/client-composition/model/booleanString.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BooleanString = 'true' | 'false'; diff --git a/packages/client-composition/model/clientMethodProps.ts b/packages/client-composition/model/clientMethodProps.ts new file mode 100644 index 000000000..05f28c4f1 --- /dev/null +++ b/packages/client-composition/model/clientMethodProps.ts @@ -0,0 +1,195 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionRulesBatchParams } from '../model/compositionRulesBatchParams'; + +import type { RequestBody } from '../model/requestBody'; + +import type { SearchCompositionRulesParams } from '../model/searchCompositionRulesParams'; + +import type { SearchForFacetValuesRequest } from '../model/searchForFacetValuesRequest'; + +/** + * Properties for the `customDelete` method. + */ +export type CustomDeleteProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customGet` method. + */ +export type CustomGetProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customPost` method. + */ +export type CustomPostProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `customPut` method. + */ +export type CustomPutProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `getComposition` method. + */ +export type GetCompositionProps = { + /** + * Unique Composition ObjectID. + */ + compositionID: string; +}; + +/** + * Properties for the `getRule` method. + */ +export type GetRuleProps = { + /** + * Unique Composition ObjectID. + */ + compositionID: string; + /** + * Unique identifier of a rule object. + */ + objectID: string; +}; + +/** + * Properties for the `getTask` method. + */ +export type GetTaskProps = { + /** + * Unique Composition ObjectID. + */ + compositionID: string; + /** + * Unique task identifier. + */ + taskID: number; +}; + +/** + * Properties for the `listCompositions` method. + */ +export type ListCompositionsProps = { + /** + * Requested page of the API response. If `null`, the API response is not paginated. + */ + page?: number; + /** + * Number of hits per page. + */ + hitsPerPage?: number; +}; + +/** + * Properties for the `saveRules` method. + */ +export type SaveRulesProps = { + /** + * Unique Composition ObjectID. + */ + compositionID: string; + rules: CompositionRulesBatchParams; +}; + +/** + * Properties for the `search` method. + */ +export type SearchProps = { + /** + * Unique Composition ObjectID. + */ + compositionID: string; + requestBody: RequestBody; +}; + +/** + * Properties for the `searchCompositionRules` method. + */ +export type SearchCompositionRulesProps = { + /** + * Unique Composition ObjectID. + */ + compositionID: string; + searchCompositionRulesParams?: SearchCompositionRulesParams; +}; + +/** + * Properties for the `searchForFacetValues` method. + */ +export type SearchForFacetValuesProps = { + /** + * Unique Composition ObjectID. + */ + compositionID: string; + /** + * Facet attribute in which to search for values. This attribute must be included in the `attributesForFaceting` index setting with the `searchable()` modifier. + */ + facetName: string; + searchForFacetValuesRequest?: SearchForFacetValuesRequest; +}; + +export type WaitForCompositionTaskOptions = { + /** + * The maximum number of retries. 50 by default. + */ + maxRetries?: number; + + /** + * The function to decide how long to wait between retries. + */ + timeout?: (retryCount: number) => number; + + /** + * The `taskID` returned by the method response. + */ + + taskID: number; + /** + * The `compositionID` where the operation was performed. + */ + compositionID: string; +}; diff --git a/packages/client-composition/model/composition.ts b/packages/client-composition/model/composition.ts new file mode 100644 index 000000000..10481a005 --- /dev/null +++ b/packages/client-composition/model/composition.ts @@ -0,0 +1,22 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionBehavior } from './compositionBehavior'; + +export type Composition = { + /** + * Unique record identifier. + */ + objectID: string; + + /** + * Composition name. + */ + name: string; + + /** + * Composition description. + */ + description?: string; + + behavior: CompositionBehavior; +}; diff --git a/packages/client-composition/model/compositionBaseSearchResponse.ts b/packages/client-composition/model/compositionBaseSearchResponse.ts new file mode 100644 index 000000000..93ff89037 --- /dev/null +++ b/packages/client-composition/model/compositionBaseSearchResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionsSearchResponse } from './compositionsSearchResponse'; + +export type CompositionBaseSearchResponse = Record & { + compositions?: CompositionsSearchResponse; +}; diff --git a/packages/client-composition/model/compositionBehavior.ts b/packages/client-composition/model/compositionBehavior.ts new file mode 100644 index 000000000..a858153a2 --- /dev/null +++ b/packages/client-composition/model/compositionBehavior.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Injection } from './injection'; + +export type CompositionBehavior = { + injection: Injection; +}; diff --git a/packages/client-composition/model/compositionIdRankingInfo.ts b/packages/client-composition/model/compositionIdRankingInfo.ts new file mode 100644 index 000000000..76095fe08 --- /dev/null +++ b/packages/client-composition/model/compositionIdRankingInfo.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type CompositionIdRankingInfo = { + index: string; + + injectedItemKey: string; +}; diff --git a/packages/client-composition/model/compositionRankingInfo.ts b/packages/client-composition/model/compositionRankingInfo.ts new file mode 100644 index 000000000..8a76969a4 --- /dev/null +++ b/packages/client-composition/model/compositionRankingInfo.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionIdRankingInfo } from './compositionIdRankingInfo'; + +export type CompositionRankingInfo = { + composed?: { [key: string]: CompositionIdRankingInfo }; +}; diff --git a/packages/client-composition/model/compositionRule.ts b/packages/client-composition/model/compositionRule.ts new file mode 100644 index 000000000..b3fb3b2d0 --- /dev/null +++ b/packages/client-composition/model/compositionRule.ts @@ -0,0 +1,34 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionRuleConsequence } from './compositionRuleConsequence'; +import type { Condition } from './condition'; +import type { TimeRange } from './timeRange'; + +export type CompositionRule = { + /** + * Unique record identifier. + */ + objectID: string; + + /** + * Conditions that trigger a composition rule. + */ + conditions: Array; + + consequence: CompositionRuleConsequence; + + /** + * Description of the rule\'s purpose to help you distinguish between different rules. + */ + description?: string; + + /** + * Whether the rule is active. + */ + enabled?: boolean; + + /** + * Time periods when the rule is active. + */ + validity?: Array; +}; diff --git a/packages/client-composition/model/compositionRuleConsequence.ts b/packages/client-composition/model/compositionRuleConsequence.ts new file mode 100644 index 000000000..51e26567b --- /dev/null +++ b/packages/client-composition/model/compositionRuleConsequence.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionBehavior } from './compositionBehavior'; + +/** + * Effect of the rule. + */ +export type CompositionRuleConsequence = { + behavior: CompositionBehavior; +}; diff --git a/packages/client-composition/model/compositionRulesBatchParams.ts b/packages/client-composition/model/compositionRulesBatchParams.ts new file mode 100644 index 000000000..55ed11cab --- /dev/null +++ b/packages/client-composition/model/compositionRulesBatchParams.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RulesMultipleBatchRequest } from './rulesMultipleBatchRequest'; + +/** + * Composition rules batch parameters. + */ +export type CompositionRulesBatchParams = { + requests?: Array; +}; diff --git a/packages/client-composition/model/compositionRunAppliedRules.ts b/packages/client-composition/model/compositionRunAppliedRules.ts new file mode 100644 index 000000000..6a101f1d1 --- /dev/null +++ b/packages/client-composition/model/compositionRunAppliedRules.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type CompositionRunAppliedRules = { + /** + * Unique record identifier. + */ + objectID: string; +}; diff --git a/packages/client-composition/model/compositionRunSearchResponse.ts b/packages/client-composition/model/compositionRunSearchResponse.ts new file mode 100644 index 000000000..477ffd2d9 --- /dev/null +++ b/packages/client-composition/model/compositionRunSearchResponse.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionRunAppliedRules } from './compositionRunAppliedRules'; + +export type CompositionRunSearchResponse = Record & { + /** + * Unique record identifier. + */ + objectID: string; + + appliedRules?: Array; +}; diff --git a/packages/client-composition/model/compositionSource.ts b/packages/client-composition/model/compositionSource.ts new file mode 100644 index 000000000..5ecc29688 --- /dev/null +++ b/packages/client-composition/model/compositionSource.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionSourceSearch } from './compositionSourceSearch'; + +export type CompositionSource = { + search: CompositionSourceSearch; +}; diff --git a/packages/client-composition/model/compositionSourceSearch.ts b/packages/client-composition/model/compositionSourceSearch.ts new file mode 100644 index 000000000..0731661e8 --- /dev/null +++ b/packages/client-composition/model/compositionSourceSearch.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MainInjectionQueryParameters } from './mainInjectionQueryParameters'; + +export type CompositionSourceSearch = { + /** + * Composition Main Index name. + */ + index: string; + + params?: MainInjectionQueryParameters; +}; diff --git a/packages/client-composition/model/compositionsSearchResponse.ts b/packages/client-composition/model/compositionsSearchResponse.ts new file mode 100644 index 000000000..1db7f3852 --- /dev/null +++ b/packages/client-composition/model/compositionsSearchResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionRunSearchResponse } from './compositionRunSearchResponse'; + +export type CompositionsSearchResponse = Record & { + run: Array; +}; diff --git a/packages/client-composition/model/condition.ts b/packages/client-composition/model/condition.ts new file mode 100644 index 000000000..fea1e6776 --- /dev/null +++ b/packages/client-composition/model/condition.ts @@ -0,0 +1,27 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Anchoring } from './anchoring'; + +export type Condition = { + /** + * Query pattern that triggers the rule. You can use either a literal string, or a special pattern `{facet:ATTRIBUTE}`, where `ATTRIBUTE` is a facet name. The rule is triggered if the query matches the literal string or a value of the specified facet. For example, with `pattern: {facet:genre}`, the rule is triggered when users search for a genre, such as \"comedy\". + */ + pattern?: string; + + anchoring?: Anchoring; + + /** + * Whether the pattern should match plurals, synonyms, and typos. + */ + alternatives?: boolean; + + /** + * An additional restriction that only triggers the rule, when the search has the same value as `ruleContexts` parameter. For example, if `context: mobile`, the rule is only triggered when the search request has a matching `ruleContexts: mobile`. A rule context must only contain alphanumeric characters. + */ + context?: string; + + /** + * Filters that trigger the rule. You can add add filters using the syntax `facet:value` so that the rule is triggered, when the specific filter is selected. You can use `filters` on its own or combine it with the `pattern` parameter. + */ + filters?: string; +}; diff --git a/packages/client-composition/model/deleteCompositionAction.ts b/packages/client-composition/model/deleteCompositionAction.ts new file mode 100644 index 000000000..a1b76df20 --- /dev/null +++ b/packages/client-composition/model/deleteCompositionAction.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Operation arguments when deleting. + */ +export type DeleteCompositionAction = { + /** + * Unique record identifier. + */ + objectID: string; +}; diff --git a/packages/client-composition/model/deleteCompositionRuleAction.ts b/packages/client-composition/model/deleteCompositionRuleAction.ts new file mode 100644 index 000000000..6d1defcd5 --- /dev/null +++ b/packages/client-composition/model/deleteCompositionRuleAction.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Operation arguments when deleting. + */ +export type DeleteCompositionRuleAction = { + /** + * Unique record identifier. + */ + objectID: string; +}; diff --git a/packages/client-composition/model/distinct.ts b/packages/client-composition/model/distinct.ts new file mode 100644 index 000000000..dc87dfb00 --- /dev/null +++ b/packages/client-composition/model/distinct.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Determines how many records of a group are included in the search results. Records with the same value for the `attributeForDistinct` attribute are considered a group. The `distinct` setting controls how many members of the group are returned. This is useful for [deduplication and grouping](https://www.algolia.com/doc/guides/managing-results/refine-results/grouping/#introducing-algolias-distinct-feature). The `distinct` setting is ignored if `attributeForDistinct` is not set. + */ +export type Distinct = boolean | number; diff --git a/packages/client-composition/model/errorBase.ts b/packages/client-composition/model/errorBase.ts new file mode 100644 index 000000000..960e509cb --- /dev/null +++ b/packages/client-composition/model/errorBase.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Error. + */ +export type ErrorBase = Record & { + message?: string; +}; diff --git a/packages/client-composition/model/exactOnSingleWordQuery.ts b/packages/client-composition/model/exactOnSingleWordQuery.ts new file mode 100644 index 000000000..d01b358f6 --- /dev/null +++ b/packages/client-composition/model/exactOnSingleWordQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Determines how the [Exact ranking criterion](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/adjust-exact-settings/#turn-off-exact-for-some-attributes) is computed when the search query has only one word. - `attribute`. The Exact ranking criterion is 1 if the query word and attribute value are the same. For example, a search for \"road\" will match the value \"road\", but not \"road trip\". - `none`. The Exact ranking criterion is ignored on single-word searches. - `word`. The Exact ranking criterion is 1 if the query word is found in the attribute value. The query word must have at least 3 characters and must not be a stop word. Only exact matches will be highlighted, partial and prefix matches won\'t. + */ +export type ExactOnSingleWordQuery = 'attribute' | 'none' | 'word'; diff --git a/packages/client-composition/model/exhaustive.ts b/packages/client-composition/model/exhaustive.ts new file mode 100644 index 000000000..6e578adf1 --- /dev/null +++ b/packages/client-composition/model/exhaustive.ts @@ -0,0 +1,31 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Whether certain properties of the search response are calculated exhaustive (exact) or approximated. + */ +export type Exhaustive = { + /** + * Whether the facet count is exhaustive (`true`) or approximate (`false`). See the [related discussion](https://support.algolia.com/hc/en-us/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate-). + */ + facetsCount?: boolean; + + /** + * The value is `false` if not all facet values are retrieved. + */ + facetValues?: boolean; + + /** + * Whether the `nbHits` is exhaustive (`true`) or approximate (`false`). When the query takes more than 50ms to be processed, the engine makes an approximation. This can happen when using complex filters on millions of records, when typo-tolerance was not exhaustive, or when enough hits have been retrieved (for example, after the engine finds 10,000 exact matches). `nbHits` is reported as non-exhaustive whenever an approximation is made, even if the approximation didn’t, in the end, impact the exhaustivity of the query. + */ + nbHits?: boolean; + + /** + * Rules matching exhaustivity. The value is `false` if rules were enable for this query, and could not be fully processed due a timeout. This is generally caused by the number of alternatives (such as typos) which is too large. + */ + rulesMatch?: boolean; + + /** + * Whether the typo search was exhaustive (`true`) or approximate (`false`). An approximation is done when the typo search query part takes more than 10% of the query budget (ie. 5ms by default) to be processed (this can happen when a lot of typo alternatives exist for the query). This field will not be included when typo-tolerance is entirely disabled. + */ + typo?: boolean; +}; diff --git a/packages/client-composition/model/facetFilters.ts b/packages/client-composition/model/facetFilters.ts new file mode 100644 index 000000000..0dc5e336e --- /dev/null +++ b/packages/client-composition/model/facetFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter the search by facet values, so that only records with the same facet values are retrieved. **Prefer using the `filters` parameter, which supports all filter types and combinations with boolean operators.** - `[filter1, filter2]` is interpreted as `filter1 AND filter2`. - `[[filter1, filter2], filter3]` is interpreted as `filter1 OR filter2 AND filter3`. - `facet:-value` is interpreted as `NOT facet:value`. While it\'s best to avoid attributes that start with a `-`, you can still filter them by escaping with a backslash: `facet:\\-value`. + */ +export type FacetFilters = Array | string; diff --git a/packages/client-composition/model/facetHits.ts b/packages/client-composition/model/facetHits.ts new file mode 100644 index 000000000..bd205a61e --- /dev/null +++ b/packages/client-composition/model/facetHits.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type FacetHits = { + /** + * Facet value. + */ + value: string; + + /** + * Highlighted attribute value, including HTML tags. + */ + highlighted: string; + + /** + * Number of records with this facet value. [The count may be approximated](https://support.algolia.com/hc/en-us/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate-). + */ + count: number; +}; diff --git a/packages/client-composition/model/facetOrdering.ts b/packages/client-composition/model/facetOrdering.ts new file mode 100644 index 000000000..18b84be27 --- /dev/null +++ b/packages/client-composition/model/facetOrdering.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Facets } from './facets'; +import type { Value } from './value'; + +/** + * Order of facet names and facet values in your UI. + */ +export type FacetOrdering = { + facets?: Facets; + + /** + * Order of facet values. One object for each facet. + */ + values?: { [key: string]: Value }; +}; diff --git a/packages/client-composition/model/facetStats.ts b/packages/client-composition/model/facetStats.ts new file mode 100644 index 000000000..f8bb276a8 --- /dev/null +++ b/packages/client-composition/model/facetStats.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type FacetStats = { + /** + * Minimum value in the results. + */ + min?: number; + + /** + * Maximum value in the results. + */ + max?: number; + + /** + * Average facet value in the results. + */ + avg?: number; + + /** + * Sum of all values in the results. + */ + sum?: number; +}; diff --git a/packages/client-composition/model/facets.ts b/packages/client-composition/model/facets.ts new file mode 100644 index 000000000..d99f83ff2 --- /dev/null +++ b/packages/client-composition/model/facets.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Order of facet names. + */ +export type Facets = { + /** + * Explicit order of facets or facet values. This setting lets you always show specific facets or facet values at the top of the list. + */ + order?: Array; +}; diff --git a/packages/client-composition/model/getTaskResponse.ts b/packages/client-composition/model/getTaskResponse.ts new file mode 100644 index 000000000..b8a4c6b85 --- /dev/null +++ b/packages/client-composition/model/getTaskResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TaskStatus } from './taskStatus'; + +export type GetTaskResponse = { + status: TaskStatus; +}; diff --git a/packages/client-composition/model/highlightResult.ts b/packages/client-composition/model/highlightResult.ts new file mode 100644 index 000000000..102271a17 --- /dev/null +++ b/packages/client-composition/model/highlightResult.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { HighlightResultOption } from './highlightResultOption'; + +export type HighlightResult = HighlightResultOption | { [key: string]: HighlightResult } | Array; diff --git a/packages/client-composition/model/highlightResultOption.ts b/packages/client-composition/model/highlightResultOption.ts new file mode 100644 index 000000000..47ab0b748 --- /dev/null +++ b/packages/client-composition/model/highlightResultOption.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchLevel } from './matchLevel'; + +/** + * Surround words that match the query with HTML tags for highlighting. + */ +export type HighlightResultOption = { + /** + * Highlighted attribute value, including HTML tags. + */ + value: string; + + matchLevel: MatchLevel; + + /** + * List of matched words from the search query. + */ + matchedWords: Array; + + /** + * Whether the entire attribute value is highlighted. + */ + fullyHighlighted?: boolean; +}; diff --git a/packages/client-composition/model/hit.ts b/packages/client-composition/model/hit.ts new file mode 100644 index 000000000..a7d56b6c2 --- /dev/null +++ b/packages/client-composition/model/hit.ts @@ -0,0 +1,29 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { HighlightResult } from './highlightResult'; +import type { HitRankingInfo } from './hitRankingInfo'; +import type { SnippetResult } from './snippetResult'; + +/** + * Search result. A hit is a record from your index, augmented with special attributes for highlighting, snippeting, and ranking. + */ +export type Hit> = T & { + /** + * Unique record identifier. + */ + objectID: string; + + /** + * Surround words that match the query with HTML tags for highlighting. + */ + _highlightResult?: { [key: string]: HighlightResult }; + + /** + * Snippets that show the context around a matching search query. + */ + _snippetResult?: { [key: string]: SnippetResult }; + + _rankingInfo?: HitRankingInfo; + + _distinctSeqID?: number; +}; diff --git a/packages/client-composition/model/hitRankingInfo.ts b/packages/client-composition/model/hitRankingInfo.ts new file mode 100644 index 000000000..7f1379c9a --- /dev/null +++ b/packages/client-composition/model/hitRankingInfo.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionRankingInfo } from './compositionRankingInfo'; +import type { RankingInfo } from './rankingInfo'; + +export type HitRankingInfo = RankingInfo & CompositionRankingInfo; diff --git a/packages/client-composition/model/ignorePlurals.ts b/packages/client-composition/model/ignorePlurals.ts new file mode 100644 index 000000000..5e4ac00cb --- /dev/null +++ b/packages/client-composition/model/ignorePlurals.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BooleanString } from './booleanString'; +import type { SupportedLanguage } from './supportedLanguage'; + +/** + * Treat singular, plurals, and other forms of declensions as equivalent. You should only use this feature for the languages used in your index. + */ +export type IgnorePlurals = Array | BooleanString | boolean; diff --git a/packages/client-composition/model/index.ts b/packages/client-composition/model/index.ts new file mode 100644 index 000000000..36aac7a6d --- /dev/null +++ b/packages/client-composition/model/index.ts @@ -0,0 +1,106 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export * from './action'; +export * from './advancedSyntaxFeatures'; +export * from './alternativesAsExact'; +export * from './anchoring'; +export * from './aroundPrecision'; +export * from './aroundRadius'; +export * from './aroundRadiusAll'; +export * from './banner'; +export * from './bannerImage'; +export * from './bannerImageUrl'; +export * from './bannerLink'; +export * from './baseSearchResponse'; +export * from './batchCompositionAction'; +export * from './batchParams'; +export * from './booleanString'; +export * from './clientMethodProps'; +export * from './composition'; +export * from './compositionBaseSearchResponse'; +export * from './compositionBehavior'; +export * from './compositionIdRankingInfo'; +export * from './compositionRankingInfo'; +export * from './compositionRule'; +export * from './compositionRuleConsequence'; +export * from './compositionRulesBatchParams'; +export * from './compositionRunAppliedRules'; +export * from './compositionRunSearchResponse'; +export * from './compositionSource'; +export * from './compositionSourceSearch'; +export * from './compositionsSearchResponse'; +export * from './condition'; +export * from './deleteCompositionAction'; +export * from './deleteCompositionRuleAction'; +export * from './distinct'; +export * from './errorBase'; +export * from './exactOnSingleWordQuery'; +export * from './exhaustive'; +export * from './facetFilters'; +export * from './facetHits'; +export * from './facetOrdering'; +export * from './facets'; +export * from './facetStats'; +export * from './getTaskResponse'; +export * from './highlightResult'; +export * from './highlightResultOption'; +export * from './hit'; +export * from './hitRankingInfo'; +export * from './ignorePlurals'; +export * from './injectedItem'; +export * from './injectedItemSource'; +export * from './injectedItemSourceSearch'; +export * from './injectedItemsQueryParameters'; +export * from './injection'; +export * from './insideBoundingBox'; +export * from './listCompositionsResponse'; +export * from './main'; +export * from './mainInjectionQueryParameters'; +export * from './matchedGeoLocation'; +export * from './matchLevel'; +export * from './multipleBatchRequest'; +export * from './multipleBatchResponse'; +export * from './numericFilters'; +export * from './optionalFilters'; +export * from './optionalWords'; +export * from './params'; +export * from './personalization'; +export * from './queryType'; +export * from './range'; +export * from './rankingInfo'; +export * from './redirect'; +export * from './redirectRuleIndexData'; +export * from './redirectRuleIndexMetadata'; +export * from './redirectURL'; +export * from './removeStopWords'; +export * from './removeWordsIfNoResults'; +export * from './renderingContent'; +export * from './requestBody'; +export * from './resultsCompositionInfoResponse'; +export * from './resultsCompositionsResponse'; +export * from './resultsInjectedItemAppliedRulesInfoResponse'; +export * from './resultsInjectedItemInfoResponse'; +export * from './rulesBatchCompositionAction'; +export * from './rulesMultipleBatchRequest'; +export * from './rulesMultipleBatchResponse'; +export * from './searchCompositionRulesParams'; +export * from './searchCompositionRulesResponse'; +export * from './searchForFacetValuesParams'; +export * from './searchForFacetValuesRequest'; +export * from './searchForFacetValuesResponse'; +export * from './searchForFacetValuesResults'; +export * from './searchHits'; +export * from './searchPagination'; +export * from './searchResponse'; +export * from './searchResults'; +export * from './searchResultsItem'; +export * from './snippetResult'; +export * from './snippetResultOption'; +export * from './sortRemainingBy'; +export * from './supportedLanguage'; +export * from './taskStatus'; +export * from './timeRange'; +export * from './typoTolerance'; +export * from './typoToleranceEnum'; +export * from './value'; +export * from './widgets'; diff --git a/packages/client-composition/model/injectedItem.ts b/packages/client-composition/model/injectedItem.ts new file mode 100644 index 000000000..09ae3f003 --- /dev/null +++ b/packages/client-composition/model/injectedItem.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { InjectedItemSource } from './injectedItemSource'; + +export type InjectedItem = { + /** + * injected Item unique identifier. + */ + key: string; + + source: InjectedItemSource; + + position: number; + + length: number; +}; diff --git a/packages/client-composition/model/injectedItemSource.ts b/packages/client-composition/model/injectedItemSource.ts new file mode 100644 index 000000000..dbeb9c2c3 --- /dev/null +++ b/packages/client-composition/model/injectedItemSource.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { InjectedItemSourceSearch } from './injectedItemSourceSearch'; + +export type InjectedItemSource = { + search: InjectedItemSourceSearch; +}; diff --git a/packages/client-composition/model/injectedItemSourceSearch.ts b/packages/client-composition/model/injectedItemSourceSearch.ts new file mode 100644 index 000000000..c35c58f00 --- /dev/null +++ b/packages/client-composition/model/injectedItemSourceSearch.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { InjectedItemsQueryParameters } from './injectedItemsQueryParameters'; + +export type InjectedItemSourceSearch = { + /** + * Composition Main Index name. + */ + index: string; + + params?: InjectedItemsQueryParameters; +}; diff --git a/packages/client-composition/model/injectedItemsQueryParameters.ts b/packages/client-composition/model/injectedItemsQueryParameters.ts new file mode 100644 index 000000000..ccf110422 --- /dev/null +++ b/packages/client-composition/model/injectedItemsQueryParameters.ts @@ -0,0 +1,225 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AdvancedSyntaxFeatures } from './advancedSyntaxFeatures'; +import type { AlternativesAsExact } from './alternativesAsExact'; +import type { Distinct } from './distinct'; +import type { ExactOnSingleWordQuery } from './exactOnSingleWordQuery'; +import type { FacetFilters } from './facetFilters'; +import type { IgnorePlurals } from './ignorePlurals'; +import type { NumericFilters } from './numericFilters'; +import type { OptionalFilters } from './optionalFilters'; +import type { OptionalWords } from './optionalWords'; +import type { QueryType } from './queryType'; +import type { RemoveStopWords } from './removeStopWords'; +import type { RemoveWordsIfNoResults } from './removeWordsIfNoResults'; +import type { SupportedLanguage } from './supportedLanguage'; +import type { TypoTolerance } from './typoTolerance'; + +export type InjectedItemsQueryParameters = { + /** + * Attributes to include in the API response. To reduce the size of your response, you can retrieve only some of the attributes. Attribute names are case-sensitive. - `*` retrieves all attributes, except attributes included in the `customRanking` and `unretrievableAttributes` settings. - To retrieve all attributes except a specific one, prefix the attribute with a dash and combine it with the `*`: `[\"*\", \"-ATTRIBUTE\"]`. - The `objectID` attribute is always included. + */ + attributesToRetrieve?: Array; + + /** + * Restricts a search to a subset of your searchable attributes. Attribute names are case-sensitive. + */ + restrictSearchableAttributes?: Array; + + /** + * Filter expression to only include items that match the filter criteria in the response. You can use these filter expressions: - **Numeric filters.** ` `, where `` is one of `<`, `<=`, `=`, `!=`, `>`, `>=`. - **Ranges.** `: TO ` where `` and `` are the lower and upper limits of the range (inclusive). - **Facet filters.** `:` where `` is a facet attribute (case-sensitive) and `` a facet value. - **Tag filters.** `_tags:` or just `` (case-sensitive). - **Boolean filters.** `: true | false`. You can combine filters with `AND`, `OR`, and `NOT` operators with the following restrictions: - You can only combine filters of the same type with `OR`. **Not supported:** `facet:value OR num > 3`. - You can\'t use `NOT` with combinations of filters. **Not supported:** `NOT(facet:value OR facet:value)` - You can\'t combine conjunctions (`AND`) with `OR`. **Not supported:** `facet:value OR (facet:value AND facet:value)` Use quotes around your filters, if the facet attribute name or facet value has spaces, keywords (`OR`, `AND`, `NOT`), or quotes. If a facet attribute is an array, the filter matches if it matches at least one element of the array. For more information, see [Filters](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/). + */ + filters?: string; + + facetFilters?: FacetFilters; + + optionalFilters?: OptionalFilters; + + numericFilters?: NumericFilters; + + /** + * Attributes to highlight. By default, all searchable attributes are highlighted. Use `*` to highlight all attributes or use an empty array `[]` to turn off highlighting. Attribute names are case-sensitive. With highlighting, strings that match the search query are surrounded by HTML tags defined by `highlightPreTag` and `highlightPostTag`. You can use this to visually highlight matching parts of a search query in your UI. For more information, see [Highlighting and snippeting](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/highlighting-snippeting/js/). + */ + attributesToHighlight?: Array; + + /** + * Attributes for which to enable snippets. Attribute names are case-sensitive. Snippets provide additional context to matched words. If you enable snippets, they include 10 words, including the matched word. The matched word will also be wrapped by HTML tags for highlighting. You can adjust the number of words with the following notation: `ATTRIBUTE:NUMBER`, where `NUMBER` is the number of words to be extracted. + */ + attributesToSnippet?: Array; + + /** + * HTML tag to insert before the highlighted parts in all highlighted results and snippets. + */ + highlightPreTag?: string; + + /** + * HTML tag to insert after the highlighted parts in all highlighted results and snippets. + */ + highlightPostTag?: string; + + /** + * String used as an ellipsis indicator when a snippet is truncated. + */ + snippetEllipsisText?: string; + + /** + * Whether to restrict highlighting and snippeting to items that at least partially matched the search query. By default, all items are highlighted and snippeted. + */ + restrictHighlightAndSnippetArrays?: boolean; + + /** + * Minimum number of characters a word in the search query must contain to accept matches with [one typo](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#configuring-word-length-for-typos). + */ + minWordSizefor1Typo?: number; + + /** + * Minimum number of characters a word in the search query must contain to accept matches with [two typos](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#configuring-word-length-for-typos). + */ + minWordSizefor2Typos?: number; + + typoTolerance?: TypoTolerance; + + /** + * Whether to allow typos on numbers in the search query. Turn off this setting to reduce the number of irrelevant matches when searching in large sets of similar numbers. + */ + allowTyposOnNumericTokens?: boolean; + + /** + * Attributes for which you want to turn off [typo tolerance](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/). Attribute names are case-sensitive. Returning only exact matches can help when: - [Searching in hyphenated attributes](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/how-to/how-to-search-in-hyphenated-attributes/). - Reducing the number of matches when you have too many. This can happen with attributes that are long blocks of text, such as product descriptions. Consider alternatives such as `disableTypoToleranceOnWords` or adding synonyms if your attributes have intentional unusual spellings that might look like typos. + */ + disableTypoToleranceOnAttributes?: Array; + + ignorePlurals?: IgnorePlurals; + + removeStopWords?: RemoveStopWords; + + /** + * Languages for language-specific query processing steps such as plurals, stop-word removal, and word-detection dictionaries. This setting sets a default list of languages used by the `removeStopWords` and `ignorePlurals` settings. This setting also sets a dictionary for word detection in the logogram-based [CJK](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/normalization/#normalization-for-logogram-based-languages-cjk) languages. To support this, you must place the CJK language **first**. **You should always specify a query language.** If you don\'t specify an indexing language, the search engine uses all [supported languages](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/supported-languages/), or the languages you specified with the `ignorePlurals` or `removeStopWords` parameters. This can lead to unexpected search results. For more information, see [Language-specific configuration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/). + */ + queryLanguages?: Array; + + /** + * ISO language codes that adjust settings that are useful for processing natural language queries (as opposed to keyword searches): - Sets `removeStopWords` and `ignorePlurals` to the list of provided languages. - Sets `removeWordsIfNoResults` to `allOptional`. - Adds a `natural_language` attribute to `ruleContexts` and `analyticsTags`. + */ + naturalLanguages?: Array; + + /** + * Whether to split compound words in the query into their building blocks. For more information, see [Word segmentation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/#splitting-compound-words). Word segmentation is supported for these languages: German, Dutch, Finnish, Swedish, and Norwegian. Decompounding doesn\'t work for words with [non-spacing mark Unicode characters](https://www.charactercodes.net/category/non-spacing_mark). For example, `Gartenstühle` won\'t be decompounded if the `ü` consists of `u` (U+0075) and `◌̈` (U+0308). + */ + decompoundQuery?: boolean; + + /** + * Whether to enable rules. + */ + enableRules?: boolean; + + /** + * Assigns a rule context to the search query. [Rule contexts](https://www.algolia.com/doc/guides/managing-results/rules/rules-overview/how-to/customize-search-results-by-platform/#whats-a-context) are strings that you can use to trigger matching rules. + */ + ruleContexts?: Array; + + /** + * Whether to enable Personalization. + */ + enablePersonalization?: boolean; + + /** + * Impact that Personalization should have on this search. The higher this value is, the more Personalization determines the ranking compared to other factors. For more information, see [Understanding Personalization impact](https://www.algolia.com/doc/guides/personalization/personalizing-results/in-depth/configuring-personalization/#understanding-personalization-impact). + */ + personalizationImpact?: number; + + queryType?: QueryType; + + removeWordsIfNoResults?: RemoveWordsIfNoResults; + + /** + * Whether to support phrase matching and excluding words from search queries. Use the `advancedSyntaxFeatures` parameter to control which feature is supported. + */ + advancedSyntax?: boolean; + + optionalWords?: OptionalWords | null; + + /** + * Searchable attributes for which you want to [turn off the Exact ranking criterion](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/adjust-exact-settings/#turn-off-exact-for-some-attributes). Attribute names are case-sensitive. This can be useful for attributes with long values, where the likelihood of an exact match is high, such as product descriptions. Turning off the Exact ranking criterion for these attributes favors exact matching on other attributes. This reduces the impact of individual attributes with a lot of content on ranking. + */ + disableExactOnAttributes?: Array; + + exactOnSingleWordQuery?: ExactOnSingleWordQuery; + + /** + * Determine which plurals and synonyms should be considered an exact matches. By default, Algolia treats singular and plural forms of a word, and single-word synonyms, as [exact](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#exact) matches when searching. For example: - \"swimsuit\" and \"swimsuits\" are treated the same - \"swimsuit\" and \"swimwear\" are treated the same (if they are [synonyms](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/adding-synonyms/#regular-synonyms)). - `ignorePlurals`. Plurals and similar declensions added by the `ignorePlurals` setting are considered exact matches. - `singleWordSynonym`. Single-word synonyms, such as \"NY\" = \"NYC\", are considered exact matches. - `multiWordsSynonym`. Multi-word synonyms, such as \"NY\" = \"New York\", are considered exact matches. + */ + alternativesAsExact?: Array; + + /** + * Advanced search syntax features you want to support. - `exactPhrase`. Phrases in quotes must match exactly. For example, `sparkly blue \"iPhone case\"` only returns records with the exact string \"iPhone case\". - `excludeWords`. Query words prefixed with a `-` must not occur in a record. For example, `search -engine` matches records that contain \"search\" but not \"engine\". This setting only has an effect if `advancedSyntax` is true. + */ + advancedSyntaxFeatures?: Array; + + distinct?: Distinct; + + /** + * Whether the search response should include detailed ranking information. + */ + getRankingInfo?: boolean; + + /** + * Whether to include a `queryID` attribute in the response. The query ID is a unique identifier for a search query and is required for tracking [click and conversion events](https://www.algolia.com/guides/sending-events/getting-started/). + */ + clickAnalytics?: boolean; + + /** + * Whether this search will be included in Analytics. + */ + analytics?: boolean; + + /** + * Tags to apply to the query for [segmenting analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + analyticsTags?: Array; + + /** + * Whether to take into account an index\'s synonyms for this search. + */ + synonyms?: boolean; + + /** + * Whether to replace a highlighted word with the matched synonym. By default, the original words are highlighted even if a synonym matches. For example, with `home` as a synonym for `house` and a search for `home`, records matching either \"home\" or \"house\" are included in the search results, and either \"home\" or \"house\" are highlighted. With `replaceSynonymsInHighlight` set to `true`, a search for `home` still matches the same records, but all occurrences of \"house\" are replaced by \"home\" in the highlighted response. + */ + replaceSynonymsInHighlight?: boolean; + + /** + * Minimum proximity score for two matching words. This adjusts the [Proximity ranking criterion](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#proximity) by equally scoring matches that are farther apart. For example, if `minProximity` is 2, neighboring matches and matches with one word between them would have the same score. + */ + minProximity?: number; + + /** + * Properties to include in the API response of `search` and `browse` requests. By default, all response properties are included. To reduce the response size, you can select, which attributes should be included. You can\'t exclude these properties: `message`, `warning`, `cursor`, `serverUsed`, `indexUsed`, `abTestVariantID`, `parsedQuery`, or any property triggered by the `getRankingInfo` parameter. Don\'t exclude properties that you might need in your search UI. + */ + responseFields?: Array; + + /** + * Maximum number of facet values to return when [searching for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ + maxFacetHits?: number; + + /** + * Whether to include this search when calculating processing-time percentiles. + */ + percentileComputation?: boolean; + + /** + * Whether the best matching attribute should be determined by minimum proximity. This setting only affects ranking if the Attribute ranking criterion comes before Proximity in the `ranking` setting. If true, the best matching attribute is selected based on the minimum proximity of multiple matches. Otherwise, the best matching attribute is determined by the order in the `searchableAttributes` setting. + */ + attributeCriteriaComputedByMinProximity?: boolean; + + /** + * Whether to enable A/B testing for this search. + */ + enableABTest?: boolean; + + /** + * Whether this search will use [Dynamic Re-Ranking](https://www.algolia.com/doc/guides/algolia-ai/re-ranking/). This setting only has an effect if you activated Dynamic Re-Ranking for this index in the Algolia dashboard. + */ + enableReRanking?: boolean; +}; diff --git a/packages/client-composition/model/injection.ts b/packages/client-composition/model/injection.ts new file mode 100644 index 000000000..46a9a4120 --- /dev/null +++ b/packages/client-composition/model/injection.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { InjectedItem } from './injectedItem'; +import type { Main } from './main'; + +export type Injection = { + main: Main; + + /** + * list of injected items of the current Composition. + */ + injectedItems?: Array; +}; diff --git a/packages/client-composition/model/insideBoundingBox.ts b/packages/client-composition/model/insideBoundingBox.ts new file mode 100644 index 000000000..8a498532f --- /dev/null +++ b/packages/client-composition/model/insideBoundingBox.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type InsideBoundingBox = string | Array>; diff --git a/packages/client-composition/model/listCompositionsResponse.ts b/packages/client-composition/model/listCompositionsResponse.ts new file mode 100644 index 000000000..1261a5d37 --- /dev/null +++ b/packages/client-composition/model/listCompositionsResponse.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Composition } from './composition'; + +export type ListCompositionsResponse = { + /** + * All compositions in your Algolia application. + */ + items: Array; + + /** + * Number of pages. + */ + nbPages: number; +}; diff --git a/packages/client-composition/model/main.ts b/packages/client-composition/model/main.ts new file mode 100644 index 000000000..ce0445af6 --- /dev/null +++ b/packages/client-composition/model/main.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionSource } from './compositionSource'; + +export type Main = { + source: CompositionSource; +}; diff --git a/packages/client-composition/model/mainInjectionQueryParameters.ts b/packages/client-composition/model/mainInjectionQueryParameters.ts new file mode 100644 index 000000000..97a8179b7 --- /dev/null +++ b/packages/client-composition/model/mainInjectionQueryParameters.ts @@ -0,0 +1,262 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AdvancedSyntaxFeatures } from './advancedSyntaxFeatures'; +import type { AlternativesAsExact } from './alternativesAsExact'; +import type { Distinct } from './distinct'; +import type { ExactOnSingleWordQuery } from './exactOnSingleWordQuery'; +import type { FacetFilters } from './facetFilters'; +import type { IgnorePlurals } from './ignorePlurals'; +import type { NumericFilters } from './numericFilters'; +import type { OptionalFilters } from './optionalFilters'; +import type { QueryType } from './queryType'; +import type { RemoveStopWords } from './removeStopWords'; +import type { RemoveWordsIfNoResults } from './removeWordsIfNoResults'; +import type { SupportedLanguage } from './supportedLanguage'; +import type { TypoTolerance } from './typoTolerance'; + +export type MainInjectionQueryParameters = { + /** + * Attributes to include in the API response. To reduce the size of your response, you can retrieve only some of the attributes. Attribute names are case-sensitive. - `*` retrieves all attributes, except attributes included in the `customRanking` and `unretrievableAttributes` settings. - To retrieve all attributes except a specific one, prefix the attribute with a dash and combine it with the `*`: `[\"*\", \"-ATTRIBUTE\"]`. - The `objectID` attribute is always included. + */ + attributesToRetrieve?: Array; + + /** + * Restricts a search to a subset of your searchable attributes. Attribute names are case-sensitive. + */ + restrictSearchableAttributes?: Array; + + /** + * Filter expression to only include items that match the filter criteria in the response. You can use these filter expressions: - **Numeric filters.** ` `, where `` is one of `<`, `<=`, `=`, `!=`, `>`, `>=`. - **Ranges.** `: TO ` where `` and `` are the lower and upper limits of the range (inclusive). - **Facet filters.** `:` where `` is a facet attribute (case-sensitive) and `` a facet value. - **Tag filters.** `_tags:` or just `` (case-sensitive). - **Boolean filters.** `: true | false`. You can combine filters with `AND`, `OR`, and `NOT` operators with the following restrictions: - You can only combine filters of the same type with `OR`. **Not supported:** `facet:value OR num > 3`. - You can\'t use `NOT` with combinations of filters. **Not supported:** `NOT(facet:value OR facet:value)` - You can\'t combine conjunctions (`AND`) with `OR`. **Not supported:** `facet:value OR (facet:value AND facet:value)` Use quotes around your filters, if the facet attribute name or facet value has spaces, keywords (`OR`, `AND`, `NOT`), or quotes. If a facet attribute is an array, the filter matches if it matches at least one element of the array. For more information, see [Filters](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/). + */ + filters?: string; + + facetFilters?: FacetFilters; + + optionalFilters?: OptionalFilters; + + numericFilters?: NumericFilters; + + /** + * Whether to sum all filter scores. If true, all filter scores are summed. Otherwise, the maximum filter score is kept. For more information, see [filter scores](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/in-depth/filter-scoring/#accumulating-scores-with-sumorfiltersscores). + */ + sumOrFiltersScores?: boolean; + + /** + * Facets for which to retrieve facet values that match the search criteria and the number of matching facet values. To retrieve all facets, use the wildcard character `*`. For more information, see [facets](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#contextual-facet-values-and-counts). + */ + facets?: Array; + + /** + * Maximum number of facet values to return for each facet. + */ + maxValuesPerFacet?: number; + + /** + * Whether faceting should be applied after deduplication with `distinct`. This leads to accurate facet counts when using faceting in combination with `distinct`. It\'s usually better to use `afterDistinct` modifiers in the `attributesForFaceting` setting, as `facetingAfterDistinct` only computes correct facet counts if all records have the same facet values for the `attributeForDistinct`. + */ + facetingAfterDistinct?: boolean; + + /** + * Order in which to retrieve facet values. - `count`. Facet values are retrieved by decreasing count. The count is the number of matching records containing this facet value. - `alpha`. Retrieve facet values alphabetically. This setting doesn\'t influence how facet values are displayed in your UI (see `renderingContent`). For more information, see [facet value display](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/facet-display/js/). + */ + sortFacetValuesBy?: string; + + /** + * Attributes to highlight. By default, all searchable attributes are highlighted. Use `*` to highlight all attributes or use an empty array `[]` to turn off highlighting. Attribute names are case-sensitive. With highlighting, strings that match the search query are surrounded by HTML tags defined by `highlightPreTag` and `highlightPostTag`. You can use this to visually highlight matching parts of a search query in your UI. For more information, see [Highlighting and snippeting](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/highlighting-snippeting/js/). + */ + attributesToHighlight?: Array; + + /** + * Attributes for which to enable snippets. Attribute names are case-sensitive. Snippets provide additional context to matched words. If you enable snippets, they include 10 words, including the matched word. The matched word will also be wrapped by HTML tags for highlighting. You can adjust the number of words with the following notation: `ATTRIBUTE:NUMBER`, where `NUMBER` is the number of words to be extracted. + */ + attributesToSnippet?: Array; + + /** + * HTML tag to insert before the highlighted parts in all highlighted results and snippets. + */ + highlightPreTag?: string; + + /** + * HTML tag to insert after the highlighted parts in all highlighted results and snippets. + */ + highlightPostTag?: string; + + /** + * String used as an ellipsis indicator when a snippet is truncated. + */ + snippetEllipsisText?: string; + + /** + * Whether to restrict highlighting and snippeting to items that at least partially matched the search query. By default, all items are highlighted and snippeted. + */ + restrictHighlightAndSnippetArrays?: boolean; + + /** + * Number of hits per page. + */ + hitsPerPage?: number; + + /** + * Number of hits to retrieve (used in combination with `offset`). + */ + length?: number; + + /** + * Minimum number of characters a word in the search query must contain to accept matches with [one typo](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#configuring-word-length-for-typos). + */ + minWordSizefor1Typo?: number; + + /** + * Minimum number of characters a word in the search query must contain to accept matches with [two typos](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#configuring-word-length-for-typos). + */ + minWordSizefor2Typos?: number; + + typoTolerance?: TypoTolerance; + + /** + * Whether to allow typos on numbers in the search query. Turn off this setting to reduce the number of irrelevant matches when searching in large sets of similar numbers. + */ + allowTyposOnNumericTokens?: boolean; + + /** + * Attributes for which you want to turn off [typo tolerance](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/). Attribute names are case-sensitive. Returning only exact matches can help when: - [Searching in hyphenated attributes](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/how-to/how-to-search-in-hyphenated-attributes/). - Reducing the number of matches when you have too many. This can happen with attributes that are long blocks of text, such as product descriptions. Consider alternatives such as `disableTypoToleranceOnWords` or adding synonyms if your attributes have intentional unusual spellings that might look like typos. + */ + disableTypoToleranceOnAttributes?: Array; + + ignorePlurals?: IgnorePlurals; + + removeStopWords?: RemoveStopWords; + + /** + * Languages for language-specific query processing steps such as plurals, stop-word removal, and word-detection dictionaries. This setting sets a default list of languages used by the `removeStopWords` and `ignorePlurals` settings. This setting also sets a dictionary for word detection in the logogram-based [CJK](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/normalization/#normalization-for-logogram-based-languages-cjk) languages. To support this, you must place the CJK language **first**. **You should always specify a query language.** If you don\'t specify an indexing language, the search engine uses all [supported languages](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/supported-languages/), or the languages you specified with the `ignorePlurals` or `removeStopWords` parameters. This can lead to unexpected search results. For more information, see [Language-specific configuration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/). + */ + queryLanguages?: Array; + + /** + * ISO language codes that adjust settings that are useful for processing natural language queries (as opposed to keyword searches): - Sets `removeStopWords` and `ignorePlurals` to the list of provided languages. - Sets `removeWordsIfNoResults` to `allOptional`. - Adds a `natural_language` attribute to `ruleContexts` and `analyticsTags`. + */ + naturalLanguages?: Array; + + /** + * Whether to split compound words in the query into their building blocks. For more information, see [Word segmentation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/#splitting-compound-words). Word segmentation is supported for these languages: German, Dutch, Finnish, Swedish, and Norwegian. Decompounding doesn\'t work for words with [non-spacing mark Unicode characters](https://www.charactercodes.net/category/non-spacing_mark). For example, `Gartenstühle` won\'t be decompounded if the `ü` consists of `u` (U+0075) and `◌̈` (U+0308). + */ + decompoundQuery?: boolean; + + /** + * Whether to enable rules. + */ + enableRules?: boolean; + + /** + * Assigns a rule context to the search query. [Rule contexts](https://www.algolia.com/doc/guides/managing-results/rules/rules-overview/how-to/customize-search-results-by-platform/#whats-a-context) are strings that you can use to trigger matching rules. + */ + ruleContexts?: Array; + + /** + * Whether to enable Personalization. + */ + enablePersonalization?: boolean; + + /** + * Impact that Personalization should have on this search. The higher this value is, the more Personalization determines the ranking compared to other factors. For more information, see [Understanding Personalization impact](https://www.algolia.com/doc/guides/personalization/personalizing-results/in-depth/configuring-personalization/#understanding-personalization-impact). + */ + personalizationImpact?: number; + + queryType?: QueryType; + + removeWordsIfNoResults?: RemoveWordsIfNoResults; + + /** + * Whether to support phrase matching and excluding words from search queries. Use the `advancedSyntaxFeatures` parameter to control which feature is supported. + */ + advancedSyntax?: boolean; + + /** + * Words that should be considered optional when found in the query. By default, records must match all words in the search query to be included in the search results. Adding optional words can help to increase the number of search results by running an additional search query that doesn\'t include the optional words. For example, if the search query is \"action video\" and \"video\" is an optional word, the search engine runs two queries. One for \"action video\" and one for \"action\". Records that match all words are ranked higher. For a search query with 4 or more words **and** all its words are optional, the number of matched words required for a record to be included in the search results increases for every 1,000 records: - If `optionalWords` has less than 10 words, the required number of matched words increases by 1: results 1 to 1,000 require 1 matched word, results 1,001 to 2000 need 2 matched words. - If `optionalWords` has 10 or more words, the number of required matched words increases by the number of optional words divided by 5 (rounded down). For example, with 18 optional words: results 1 to 1,000 require 1 matched word, results 1,001 to 2000 need 4 matched words. For more information, see [Optional words](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/empty-or-insufficient-results/#creating-a-list-of-optional-words). + */ + optionalWords?: Array; + + /** + * Searchable attributes for which you want to [turn off the Exact ranking criterion](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/adjust-exact-settings/#turn-off-exact-for-some-attributes). Attribute names are case-sensitive. This can be useful for attributes with long values, where the likelihood of an exact match is high, such as product descriptions. Turning off the Exact ranking criterion for these attributes favors exact matching on other attributes. This reduces the impact of individual attributes with a lot of content on ranking. + */ + disableExactOnAttributes?: Array; + + exactOnSingleWordQuery?: ExactOnSingleWordQuery; + + /** + * Determine which plurals and synonyms should be considered an exact matches. By default, Algolia treats singular and plural forms of a word, and single-word synonyms, as [exact](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#exact) matches when searching. For example: - \"swimsuit\" and \"swimsuits\" are treated the same - \"swimsuit\" and \"swimwear\" are treated the same (if they are [synonyms](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/adding-synonyms/#regular-synonyms)). - `ignorePlurals`. Plurals and similar declensions added by the `ignorePlurals` setting are considered exact matches. - `singleWordSynonym`. Single-word synonyms, such as \"NY\" = \"NYC\", are considered exact matches. - `multiWordsSynonym`. Multi-word synonyms, such as \"NY\" = \"New York\", are considered exact matches. + */ + alternativesAsExact?: Array; + + /** + * Advanced search syntax features you want to support. - `exactPhrase`. Phrases in quotes must match exactly. For example, `sparkly blue \"iPhone case\"` only returns records with the exact string \"iPhone case\". - `excludeWords`. Query words prefixed with a `-` must not occur in a record. For example, `search -engine` matches records that contain \"search\" but not \"engine\". This setting only has an effect if `advancedSyntax` is true. + */ + advancedSyntaxFeatures?: Array; + + distinct?: Distinct; + + /** + * Whether the search response should include detailed ranking information. + */ + getRankingInfo?: boolean; + + /** + * Whether to include a `queryID` attribute in the response. The query ID is a unique identifier for a search query and is required for tracking [click and conversion events](https://www.algolia.com/guides/sending-events/getting-started/). + */ + clickAnalytics?: boolean; + + /** + * Whether this search will be included in Analytics. + */ + analytics?: boolean; + + /** + * Tags to apply to the query for [segmenting analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + analyticsTags?: Array; + + /** + * Whether to take into account an index\'s synonyms for this search. + */ + synonyms?: boolean; + + /** + * Whether to replace a highlighted word with the matched synonym. By default, the original words are highlighted even if a synonym matches. For example, with `home` as a synonym for `house` and a search for `home`, records matching either \"home\" or \"house\" are included in the search results, and either \"home\" or \"house\" are highlighted. With `replaceSynonymsInHighlight` set to `true`, a search for `home` still matches the same records, but all occurrences of \"house\" are replaced by \"home\" in the highlighted response. + */ + replaceSynonymsInHighlight?: boolean; + + /** + * Minimum proximity score for two matching words. This adjusts the [Proximity ranking criterion](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#proximity) by equally scoring matches that are farther apart. For example, if `minProximity` is 2, neighboring matches and matches with one word between them would have the same score. + */ + minProximity?: number; + + /** + * Properties to include in the API response of `search` and `browse` requests. By default, all response properties are included. To reduce the response size, you can select, which attributes should be included. You can\'t exclude these properties: `message`, `warning`, `cursor`, `serverUsed`, `indexUsed`, `abTestVariantID`, `parsedQuery`, or any property triggered by the `getRankingInfo` parameter. Don\'t exclude properties that you might need in your search UI. + */ + responseFields?: Array; + + /** + * Maximum number of facet values to return when [searching for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ + maxFacetHits?: number; + + /** + * Whether to include this search when calculating processing-time percentiles. + */ + percentileComputation?: boolean; + + /** + * Whether the best matching attribute should be determined by minimum proximity. This setting only affects ranking if the Attribute ranking criterion comes before Proximity in the `ranking` setting. If true, the best matching attribute is selected based on the minimum proximity of multiple matches. Otherwise, the best matching attribute is determined by the order in the `searchableAttributes` setting. + */ + attributeCriteriaComputedByMinProximity?: boolean; + + /** + * Whether to enable A/B testing for this search. + */ + enableABTest?: boolean; + + /** + * Whether this search will use [Dynamic Re-Ranking](https://www.algolia.com/doc/guides/algolia-ai/re-ranking/). This setting only has an effect if you activated Dynamic Re-Ranking for this index in the Algolia dashboard. + */ + enableReRanking?: boolean; +}; diff --git a/packages/client-composition/model/matchLevel.ts b/packages/client-composition/model/matchLevel.ts new file mode 100644 index 000000000..2cb9f4d21 --- /dev/null +++ b/packages/client-composition/model/matchLevel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Whether the whole query string matches or only a part. + */ +export type MatchLevel = 'none' | 'partial' | 'full'; diff --git a/packages/client-composition/model/matchedGeoLocation.ts b/packages/client-composition/model/matchedGeoLocation.ts new file mode 100644 index 000000000..018634191 --- /dev/null +++ b/packages/client-composition/model/matchedGeoLocation.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type MatchedGeoLocation = { + /** + * Latitude of the matched location. + */ + lat?: number; + + /** + * Longitude of the matched location. + */ + lng?: number; + + /** + * Distance between the matched location and the search location (in meters). + */ + distance?: number; +}; diff --git a/packages/client-composition/model/multipleBatchRequest.ts b/packages/client-composition/model/multipleBatchRequest.ts new file mode 100644 index 000000000..857bdca1e --- /dev/null +++ b/packages/client-composition/model/multipleBatchRequest.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Action } from './action'; +import type { BatchCompositionAction } from './batchCompositionAction'; + +export type MultipleBatchRequest = { + action: Action; + + body: BatchCompositionAction; +}; diff --git a/packages/client-composition/model/multipleBatchResponse.ts b/packages/client-composition/model/multipleBatchResponse.ts new file mode 100644 index 000000000..a5fa74e64 --- /dev/null +++ b/packages/client-composition/model/multipleBatchResponse.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type MultipleBatchResponse = { + /** + * Task IDs. One for each index. + */ + taskID: { [key: string]: number }; +}; diff --git a/packages/client-composition/model/numericFilters.ts b/packages/client-composition/model/numericFilters.ts new file mode 100644 index 000000000..6129dc5d3 --- /dev/null +++ b/packages/client-composition/model/numericFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter by numeric facets. **Prefer using the `filters` parameter, which supports all filter types and combinations with boolean operators.** You can use numeric comparison operators: `<`, `<=`, `=`, `!=`, `>`, `>=`. Comparisons are precise up to 3 decimals. You can also provide ranges: `facet: TO `. The range includes the lower and upper boundaries. The same combination rules apply as for `facetFilters`. + */ +export type NumericFilters = Array | string; diff --git a/packages/client-composition/model/optionalFilters.ts b/packages/client-composition/model/optionalFilters.ts new file mode 100644 index 000000000..677b9239c --- /dev/null +++ b/packages/client-composition/model/optionalFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filters to promote or demote records in the search results. Optional filters work like facet filters, but they don\'t exclude records from the search results. Records that match the optional filter rank before records that don\'t match. If you\'re using a negative filter `facet:-value`, matching records rank after records that don\'t match. - Optional filters don\'t work on virtual replicas. - Optional filters are applied _after_ sort-by attributes. - Optional filters are applied _before_ custom ranking attributes (in the default [ranking](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/)). - Optional filters don\'t work with numeric attributes. + */ +export type OptionalFilters = Array | string; diff --git a/packages/client-composition/model/optionalWords.ts b/packages/client-composition/model/optionalWords.ts new file mode 100644 index 000000000..2eed87ef2 --- /dev/null +++ b/packages/client-composition/model/optionalWords.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Words that should be considered optional when found in the query. By default, records must match all words in the search query to be included in the search results. Adding optional words can help to increase the number of search results by running an additional search query that doesn\'t include the optional words. For example, if the search query is \"action video\" and \"video\" is an optional word, the search engine runs two queries. One for \"action video\" and one for \"action\". Records that match all words are ranked higher. For a search query with 4 or more words **and** all its words are optional, the number of matched words required for a record to be included in the search results increases for every 1,000 records: - If `optionalWords` has less than 10 words, the required number of matched words increases by 1: results 1 to 1,000 require 1 matched word, results 1,001 to 2000 need 2 matched words. - If `optionalWords` has 10 or more words, the number of required matched words increases by the number of optional words divided by 5 (rounded down). For example, with 18 optional words: results 1 to 1,000 require 1 matched word, results 1,001 to 2000 need 4 matched words. For more information, see [Optional words](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/empty-or-insufficient-results/#creating-a-list-of-optional-words). + */ +export type OptionalWords = string | Array; diff --git a/packages/client-composition/model/params.ts b/packages/client-composition/model/params.ts new file mode 100644 index 000000000..013907f5c --- /dev/null +++ b/packages/client-composition/model/params.ts @@ -0,0 +1,120 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AroundPrecision } from './aroundPrecision'; +import type { AroundRadius } from './aroundRadius'; +import type { FacetFilters } from './facetFilters'; +import type { InsideBoundingBox } from './insideBoundingBox'; +import type { NumericFilters } from './numericFilters'; +import type { OptionalFilters } from './optionalFilters'; +import type { SupportedLanguage } from './supportedLanguage'; + +export type Params = { + /** + * Search query. + */ + query?: string; + + /** + * Filter expression to only include items that match the filter criteria in the response. You can use these filter expressions: - **Numeric filters.** ` `, where `` is one of `<`, `<=`, `=`, `!=`, `>`, `>=`. - **Ranges.** `: TO ` where `` and `` are the lower and upper limits of the range (inclusive). - **Facet filters.** `:` where `` is a facet attribute (case-sensitive) and `` a facet value. - **Tag filters.** `_tags:` or just `` (case-sensitive). - **Boolean filters.** `: true | false`. You can combine filters with `AND`, `OR`, and `NOT` operators with the following restrictions: - You can only combine filters of the same type with `OR`. **Not supported:** `facet:value OR num > 3`. - You can\'t use `NOT` with combinations of filters. **Not supported:** `NOT(facet:value OR facet:value)` - You can\'t combine conjunctions (`AND`) with `OR`. **Not supported:** `facet:value OR (facet:value AND facet:value)` Use quotes around your filters, if the facet attribute name or facet value has spaces, keywords (`OR`, `AND`, `NOT`), or quotes. If a facet attribute is an array, the filter matches if it matches at least one element of the array. For more information, see [Filters](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/). + */ + filters?: string; + + /** + * Page of search results to retrieve. + */ + page?: number; + + /** + * Whether the search response should include detailed ranking information. + */ + getRankingInfo?: boolean; + + relevancyStrictness?: number; + + facetFilters?: FacetFilters; + + optionalFilters?: OptionalFilters; + + numericFilters?: NumericFilters; + + /** + * Number of hits per page. + */ + hitsPerPage?: number; + + /** + * Coordinates for the center of a circle, expressed as a comma-separated string of latitude and longitude. Only records included within a circle around this central location are included in the results. The radius of the circle is determined by the `aroundRadius` and `minimumAroundRadius` settings. This parameter is ignored if you also specify `insidePolygon` or `insideBoundingBox`. + */ + aroundLatLng?: string; + + /** + * Whether to obtain the coordinates from the request\'s IP address. + */ + aroundLatLngViaIP?: boolean; + + aroundRadius?: AroundRadius; + + aroundPrecision?: AroundPrecision; + + /** + * Minimum radius (in meters) for a search around a location when `aroundRadius` isn\'t set. + */ + minimumAroundRadius?: number; + + insideBoundingBox?: InsideBoundingBox | null; + + /** + * Coordinates of a polygon in which to search. Polygons are defined by 3 to 10,000 points. Each point is represented by its latitude and longitude. Provide multiple polygons as nested arrays. For more information, see [filtering inside polygons](https://www.algolia.com/doc/guides/managing-results/refine-results/geolocation/#filtering-inside-rectangular-or-polygonal-areas). This parameter is ignored if you also specify `insideBoundingBox`. + */ + insidePolygon?: Array>; + + /** + * Languages for language-specific query processing steps such as plurals, stop-word removal, and word-detection dictionaries. This setting sets a default list of languages used by the `removeStopWords` and `ignorePlurals` settings. This setting also sets a dictionary for word detection in the logogram-based [CJK](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/normalization/#normalization-for-logogram-based-languages-cjk) languages. To support this, you must place the CJK language **first**. **You should always specify a query language.** If you don\'t specify an indexing language, the search engine uses all [supported languages](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/supported-languages/), or the languages you specified with the `ignorePlurals` or `removeStopWords` parameters. This can lead to unexpected search results. For more information, see [Language-specific configuration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/). + */ + queryLanguages?: Array; + + /** + * ISO language codes that adjust settings that are useful for processing natural language queries (as opposed to keyword searches): - Sets `removeStopWords` and `ignorePlurals` to the list of provided languages. - Sets `removeWordsIfNoResults` to `allOptional`. - Adds a `natural_language` attribute to `ruleContexts` and `analyticsTags`. + */ + naturalLanguages?: Array; + + /** + * Whether to enable rules. + */ + enableRules?: boolean; + + /** + * Assigns a rule context to the search query. [Rule contexts](https://www.algolia.com/doc/guides/managing-results/rules/rules-overview/how-to/customize-search-results-by-platform/#whats-a-context) are strings that you can use to trigger matching rules. + */ + ruleContexts?: Array; + + /** + * Unique pseudonymous or anonymous user identifier. This helps with analytics and click and conversion events. For more information, see [user token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken?: string; + + /** + * Whether to include a `queryID` attribute in the response. The query ID is a unique identifier for a search query and is required for tracking [click and conversion events](https://www.algolia.com/guides/sending-events/getting-started/). + */ + clickAnalytics?: boolean; + + /** + * Whether this search will be included in Analytics. + */ + analytics?: boolean; + + /** + * Tags to apply to the query for [segmenting analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + analyticsTags?: Array; + + /** + * Whether to enable A/B testing for this search. + */ + enableABTest?: boolean; + + /** + * Whether this search will use [Dynamic Re-Ranking](https://www.algolia.com/doc/guides/algolia-ai/re-ranking/). This setting only has an effect if you activated Dynamic Re-Ranking for this index in the Algolia dashboard. + */ + enableReRanking?: boolean; +}; diff --git a/packages/client-composition/model/personalization.ts b/packages/client-composition/model/personalization.ts new file mode 100644 index 000000000..c8efd58b1 --- /dev/null +++ b/packages/client-composition/model/personalization.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Personalization = { + /** + * The score of the filters. + */ + filtersScore?: number; + + /** + * The score of the ranking. + */ + rankingScore?: number; + + /** + * The score of the event. + */ + score?: number; +}; diff --git a/packages/client-composition/model/queryType.ts b/packages/client-composition/model/queryType.ts new file mode 100644 index 000000000..b16a40de3 --- /dev/null +++ b/packages/client-composition/model/queryType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Determines if and how query words are interpreted as prefixes. By default, only the last query word is treated as a prefix (`prefixLast`). To turn off prefix search, use `prefixNone`. Avoid `prefixAll`, which treats all query words as prefixes. This might lead to counterintuitive results and makes your search slower. For more information, see [Prefix searching](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/prefix-searching/). + */ +export type QueryType = 'prefixLast' | 'prefixAll' | 'prefixNone'; diff --git a/packages/client-composition/model/range.ts b/packages/client-composition/model/range.ts new file mode 100644 index 000000000..780b75be7 --- /dev/null +++ b/packages/client-composition/model/range.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Range object with lower and upper values in meters to define custom ranges. + */ +export type Range = { + /** + * Lower boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. + */ + from?: number; + + /** + * Upper boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. + */ + value?: number; +}; diff --git a/packages/client-composition/model/rankingInfo.ts b/packages/client-composition/model/rankingInfo.ts new file mode 100644 index 000000000..50c5a3058 --- /dev/null +++ b/packages/client-composition/model/rankingInfo.ts @@ -0,0 +1,68 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchedGeoLocation } from './matchedGeoLocation'; +import type { Personalization } from './personalization'; + +/** + * Object with detailed information about the record\'s ranking. + */ +export type RankingInfo = { + /** + * Whether a filter matched the query. + */ + filters?: number; + + /** + * Position of the first matched word in the best matching attribute of the record. + */ + firstMatchedWord: number; + + /** + * Distance between the geo location in the search query and the best matching geo location in the record, divided by the geo precision (in meters). + */ + geoDistance: number; + + /** + * Precision used when computing the geo distance, in meters. + */ + geoPrecision?: number; + + matchedGeoLocation?: MatchedGeoLocation; + + personalization?: Personalization; + + /** + * Number of exactly matched words. + */ + nbExactWords: number; + + /** + * Number of typos encountered when matching the record. + */ + nbTypos: number; + + /** + * Whether the record was promoted by a rule. + */ + promoted?: boolean; + + /** + * Number of words between multiple matches in the query plus 1. For single word queries, `proximityDistance` is 0. + */ + proximityDistance?: number; + + /** + * Overall ranking of the record, expressed as a single integer. This attribute is internal. + */ + userScore: number; + + /** + * Number of matched words. + */ + words?: number; + + /** + * Whether the record is re-ranked. + */ + promotedByReRanking?: boolean; +}; diff --git a/packages/client-composition/model/redirect.ts b/packages/client-composition/model/redirect.ts new file mode 100644 index 000000000..fa3ea30ff --- /dev/null +++ b/packages/client-composition/model/redirect.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RedirectRuleIndexMetadata } from './redirectRuleIndexMetadata'; + +/** + * [Redirect results to a URL](https://www.algolia.com/doc/guides/managing-results/rules/merchandising-and-promoting/how-to/redirects/), this this parameter is for internal use only. + */ +export type Redirect = { + index?: Array; +}; diff --git a/packages/client-composition/model/redirectRuleIndexData.ts b/packages/client-composition/model/redirectRuleIndexData.ts new file mode 100644 index 000000000..fbb7ea140 --- /dev/null +++ b/packages/client-composition/model/redirectRuleIndexData.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Redirect rule data. + */ +export type RedirectRuleIndexData = { + ruleObjectID: string; +}; diff --git a/packages/client-composition/model/redirectRuleIndexMetadata.ts b/packages/client-composition/model/redirectRuleIndexMetadata.ts new file mode 100644 index 000000000..33802fc69 --- /dev/null +++ b/packages/client-composition/model/redirectRuleIndexMetadata.ts @@ -0,0 +1,27 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RedirectRuleIndexData } from './redirectRuleIndexData'; + +export type RedirectRuleIndexMetadata = { + /** + * Source index for the redirect rule. + */ + source: string; + + /** + * Destination index for the redirect rule. + */ + dest: string; + + /** + * Reason for the redirect rule. + */ + reason: string; + + /** + * Redirect rule status. + */ + succeed: boolean; + + data: RedirectRuleIndexData; +}; diff --git a/packages/client-composition/model/redirectURL.ts b/packages/client-composition/model/redirectURL.ts new file mode 100644 index 000000000..8f66f7ee2 --- /dev/null +++ b/packages/client-composition/model/redirectURL.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * The redirect rule container. + */ +export type RedirectURL = { + url?: string; +}; diff --git a/packages/client-composition/model/removeStopWords.ts b/packages/client-composition/model/removeStopWords.ts new file mode 100644 index 000000000..263ad1184 --- /dev/null +++ b/packages/client-composition/model/removeStopWords.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SupportedLanguage } from './supportedLanguage'; + +/** + * Removes stop words from the search query. Stop words are common words like articles, conjunctions, prepositions, or pronouns that have little or no meaning on their own. In English, \"the\", \"a\", or \"and\" are stop words. You should only use this feature for the languages used in your index. + */ +export type RemoveStopWords = Array | boolean; diff --git a/packages/client-composition/model/removeWordsIfNoResults.ts b/packages/client-composition/model/removeWordsIfNoResults.ts new file mode 100644 index 000000000..3b61da6d8 --- /dev/null +++ b/packages/client-composition/model/removeWordsIfNoResults.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Strategy for removing words from the query when it doesn\'t return any results. This helps to avoid returning empty search results. - `none`. No words are removed when a query doesn\'t return results. - `lastWords`. Treat the last (then second to last, then third to last) word as optional, until there are results or at most 5 words have been removed. - `firstWords`. Treat the first (then second, then third) word as optional, until there are results or at most 5 words have been removed. - `allOptional`. Treat all words as optional. For more information, see [Remove words to improve results](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/empty-or-insufficient-results/in-depth/why-use-remove-words-if-no-results/). + */ +export type RemoveWordsIfNoResults = 'none' | 'lastWords' | 'firstWords' | 'allOptional'; diff --git a/packages/client-composition/model/renderingContent.ts b/packages/client-composition/model/renderingContent.ts new file mode 100644 index 000000000..ddb01bde8 --- /dev/null +++ b/packages/client-composition/model/renderingContent.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FacetOrdering } from './facetOrdering'; +import type { RedirectURL } from './redirectURL'; +import type { Widgets } from './widgets'; + +/** + * Extra data that can be used in the search UI. You can use this to control aspects of your search UI, such as the order of facet names and values without changing your frontend code. + */ +export type RenderingContent = { + facetOrdering?: FacetOrdering; + + redirect?: RedirectURL; + + widgets?: Widgets; +}; diff --git a/packages/client-composition/model/requestBody.ts b/packages/client-composition/model/requestBody.ts new file mode 100644 index 000000000..3e936f9eb --- /dev/null +++ b/packages/client-composition/model/requestBody.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Params } from './params'; + +export type RequestBody = { + params?: Params; +}; diff --git a/packages/client-composition/model/resultsCompositionInfoResponse.ts b/packages/client-composition/model/resultsCompositionInfoResponse.ts new file mode 100644 index 000000000..2aa12f6ef --- /dev/null +++ b/packages/client-composition/model/resultsCompositionInfoResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ResultsInjectedItemInfoResponse } from './resultsInjectedItemInfoResponse'; + +export type ResultsCompositionInfoResponse = { + injectedItems: Array; +}; diff --git a/packages/client-composition/model/resultsCompositionsResponse.ts b/packages/client-composition/model/resultsCompositionsResponse.ts new file mode 100644 index 000000000..763a799e2 --- /dev/null +++ b/packages/client-composition/model/resultsCompositionsResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ResultsCompositionInfoResponse } from './resultsCompositionInfoResponse'; + +export type ResultsCompositionsResponse = Record & { + compositions: { [key: string]: ResultsCompositionInfoResponse }; +}; diff --git a/packages/client-composition/model/resultsInjectedItemAppliedRulesInfoResponse.ts b/packages/client-composition/model/resultsInjectedItemAppliedRulesInfoResponse.ts new file mode 100644 index 000000000..b70808f3d --- /dev/null +++ b/packages/client-composition/model/resultsInjectedItemAppliedRulesInfoResponse.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type ResultsInjectedItemAppliedRulesInfoResponse = { + /** + * Unique record identifier. + */ + objectID: string; +}; diff --git a/packages/client-composition/model/resultsInjectedItemInfoResponse.ts b/packages/client-composition/model/resultsInjectedItemInfoResponse.ts new file mode 100644 index 000000000..35a86a467 --- /dev/null +++ b/packages/client-composition/model/resultsInjectedItemInfoResponse.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ResultsInjectedItemAppliedRulesInfoResponse } from './resultsInjectedItemAppliedRulesInfoResponse'; + +export type ResultsInjectedItemInfoResponse = Record & { + key: string; + + appliedRules?: Array; +}; diff --git a/packages/client-composition/model/rulesBatchCompositionAction.ts b/packages/client-composition/model/rulesBatchCompositionAction.ts new file mode 100644 index 000000000..98d4f7b2d --- /dev/null +++ b/packages/client-composition/model/rulesBatchCompositionAction.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionRule } from './compositionRule'; + +import type { DeleteCompositionRuleAction } from './deleteCompositionRuleAction'; + +export type RulesBatchCompositionAction = CompositionRule | DeleteCompositionRuleAction; diff --git a/packages/client-composition/model/rulesMultipleBatchRequest.ts b/packages/client-composition/model/rulesMultipleBatchRequest.ts new file mode 100644 index 000000000..3bbbe20be --- /dev/null +++ b/packages/client-composition/model/rulesMultipleBatchRequest.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Action } from './action'; +import type { RulesBatchCompositionAction } from './rulesBatchCompositionAction'; + +export type RulesMultipleBatchRequest = { + action: Action; + + body: RulesBatchCompositionAction; +}; diff --git a/packages/client-composition/model/rulesMultipleBatchResponse.ts b/packages/client-composition/model/rulesMultipleBatchResponse.ts new file mode 100644 index 000000000..26b97ef67 --- /dev/null +++ b/packages/client-composition/model/rulesMultipleBatchResponse.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type RulesMultipleBatchResponse = { + /** + * Unique identifier of a task. A successful API response means that a task was added to a queue. It might not run immediately. You can check the task\'s progress with the [`task` operation](#tag/Indices/operation/getTask) and this `taskID`. + */ + taskID: number; +}; diff --git a/packages/client-composition/model/searchCompositionRulesParams.ts b/packages/client-composition/model/searchCompositionRulesParams.ts new file mode 100644 index 000000000..51fbc9805 --- /dev/null +++ b/packages/client-composition/model/searchCompositionRulesParams.ts @@ -0,0 +1,35 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Anchoring } from './anchoring'; + +/** + * Composition Rules search parameters. + */ +export type SearchCompositionRulesParams = { + /** + * Search query for rules. + */ + query?: string; + + anchoring?: Anchoring; + + /** + * Only return composition rules that match the context (exact match). + */ + context?: string; + + /** + * Requested page of the API response. Algolia uses `page` and `hitsPerPage` to control how search results are displayed ([paginated](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/pagination/js/)). - `hitsPerPage`: sets the number of search results (_hits_) displayed per page. - `page`: specifies the page number of the search results you want to retrieve. Page numbering starts at 0, so the first page is `page=0`, the second is `page=1`, and so on. For example, to display 10 results per page starting from the third page, set `hitsPerPage` to 10 and `page` to 2. + */ + page?: number; + + /** + * Maximum number of hits per page. Algolia uses `page` and `hitsPerPage` to control how search results are displayed ([paginated](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/pagination/js/)). - `hitsPerPage`: sets the number of search results (_hits_) displayed per page. - `page`: specifies the page number of the search results you want to retrieve. Page numbering starts at 0, so the first page is `page=0`, the second is `page=1`, and so on. For example, to display 10 results per page starting from the third page, set `hitsPerPage` to 10 and `page` to 2. + */ + hitsPerPage?: number; + + /** + * If `true`, return only enabled composition rules. If `false`, return only inactive composition rules. By default, _all_ composition rules are returned. + */ + enabled?: boolean | null; +}; diff --git a/packages/client-composition/model/searchCompositionRulesResponse.ts b/packages/client-composition/model/searchCompositionRulesResponse.ts new file mode 100644 index 000000000..414928cbd --- /dev/null +++ b/packages/client-composition/model/searchCompositionRulesResponse.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionRule } from './compositionRule'; + +export type SearchCompositionRulesResponse = { + /** + * Composition rules that matched the search criteria. + */ + hits: Array; + + /** + * Number of composition rules that matched the search criteria. + */ + nbHits: number; + + /** + * Current page. + */ + page: number; + + /** + * Number of pages. + */ + nbPages: number; +}; diff --git a/packages/client-composition/model/searchForFacetValuesParams.ts b/packages/client-composition/model/searchForFacetValuesParams.ts new file mode 100644 index 000000000..8b57a2e7e --- /dev/null +++ b/packages/client-composition/model/searchForFacetValuesParams.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Params } from './params'; + +export type SearchForFacetValuesParams = { + /** + * Search query. + */ + query?: string; + + /** + * Maximum number of facet values to return when [searching for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ + maxFacetHits?: number; + + searchQuery?: Params; +}; diff --git a/packages/client-composition/model/searchForFacetValuesRequest.ts b/packages/client-composition/model/searchForFacetValuesRequest.ts new file mode 100644 index 000000000..62ac3a2dd --- /dev/null +++ b/packages/client-composition/model/searchForFacetValuesRequest.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchForFacetValuesParams } from './searchForFacetValuesParams'; + +export type SearchForFacetValuesRequest = { + params?: SearchForFacetValuesParams; +}; diff --git a/packages/client-composition/model/searchForFacetValuesResponse.ts b/packages/client-composition/model/searchForFacetValuesResponse.ts new file mode 100644 index 000000000..cbe8e92f7 --- /dev/null +++ b/packages/client-composition/model/searchForFacetValuesResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchForFacetValuesResults } from './searchForFacetValuesResults'; + +export type SearchForFacetValuesResponse = { + /** + * Search for facet values results. + */ + results?: Array; +}; diff --git a/packages/client-composition/model/searchForFacetValuesResults.ts b/packages/client-composition/model/searchForFacetValuesResults.ts new file mode 100644 index 000000000..94960fdee --- /dev/null +++ b/packages/client-composition/model/searchForFacetValuesResults.ts @@ -0,0 +1,22 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FacetHits } from './facetHits'; + +export type SearchForFacetValuesResults = { + indexName: string; + + /** + * Matching facet values. + */ + facetHits: Array; + + /** + * Whether the facet count is exhaustive (true) or approximate (false). For more information, see [Why are my facet and hit counts not accurate](https://support.algolia.com/hc/en-us/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate-). + */ + exhaustiveFacetsCount: boolean; + + /** + * Time the server took to process the request, in milliseconds. + */ + processingTimeMS?: number; +}; diff --git a/packages/client-composition/model/searchHits.ts b/packages/client-composition/model/searchHits.ts new file mode 100644 index 000000000..3e410b8a0 --- /dev/null +++ b/packages/client-composition/model/searchHits.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Hit } from './hit'; + +export type SearchHits> = Record & { + /** + * Search results (hits). Hits are records from your index that match the search criteria, augmented with additional attributes, such as, for highlighting. + */ + hits: Hit[]; + + /** + * Search query. + */ + query: string; + + /** + * URL-encoded string of all search parameters. + */ + params: string; +}; diff --git a/packages/client-composition/model/searchPagination.ts b/packages/client-composition/model/searchPagination.ts new file mode 100644 index 000000000..d5420c628 --- /dev/null +++ b/packages/client-composition/model/searchPagination.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SearchPagination = { + /** + * Page of search results to retrieve. + */ + page: number; + + /** + * Number of results (hits). + */ + nbHits: number; + + /** + * Number of pages of results. + */ + nbPages: number; + + /** + * Number of hits per page. + */ + hitsPerPage: number; +}; diff --git a/packages/client-composition/model/searchResponse.ts b/packages/client-composition/model/searchResponse.ts new file mode 100644 index 000000000..61fd97428 --- /dev/null +++ b/packages/client-composition/model/searchResponse.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionBaseSearchResponse } from './compositionBaseSearchResponse'; +import type { SearchResults } from './searchResults'; + +export type SearchResponse> = CompositionBaseSearchResponse & SearchResults; diff --git a/packages/client-composition/model/searchResults.ts b/packages/client-composition/model/searchResults.ts new file mode 100644 index 000000000..34e9a400a --- /dev/null +++ b/packages/client-composition/model/searchResults.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchResultsItem } from './searchResultsItem'; + +export type SearchResults> = { + /** + * Search results. + */ + results: SearchResultsItem[]; +}; diff --git a/packages/client-composition/model/searchResultsItem.ts b/packages/client-composition/model/searchResultsItem.ts new file mode 100644 index 000000000..7ada04731 --- /dev/null +++ b/packages/client-composition/model/searchResultsItem.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchResponse } from './baseSearchResponse'; +import type { ResultsCompositionsResponse } from './resultsCompositionsResponse'; +import type { SearchHits } from './searchHits'; +import type { SearchPagination } from './searchPagination'; + +export type SearchResultsItem> = BaseSearchResponse & + SearchPagination & + SearchHits & + ResultsCompositionsResponse; diff --git a/packages/client-composition/model/snippetResult.ts b/packages/client-composition/model/snippetResult.ts new file mode 100644 index 000000000..0d9abff48 --- /dev/null +++ b/packages/client-composition/model/snippetResult.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SnippetResultOption } from './snippetResultOption'; + +export type SnippetResult = SnippetResultOption | { [key: string]: SnippetResult } | Array; diff --git a/packages/client-composition/model/snippetResultOption.ts b/packages/client-composition/model/snippetResultOption.ts new file mode 100644 index 000000000..daab65f2d --- /dev/null +++ b/packages/client-composition/model/snippetResultOption.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchLevel } from './matchLevel'; + +/** + * Snippets that show the context around a matching search query. + */ +export type SnippetResultOption = { + /** + * Highlighted attribute value, including HTML tags. + */ + value: string; + + matchLevel: MatchLevel; +}; diff --git a/packages/client-composition/model/sortRemainingBy.ts b/packages/client-composition/model/sortRemainingBy.ts new file mode 100644 index 000000000..85fc5bd88 --- /dev/null +++ b/packages/client-composition/model/sortRemainingBy.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Order of facet values that aren\'t explicitly positioned with the `order` setting. - `count`. Order remaining facet values by decreasing count. The count is the number of matching records containing this facet value. - `alpha`. Sort facet values alphabetically. - `hidden`. Don\'t show facet values that aren\'t explicitly positioned. + */ +export type SortRemainingBy = 'count' | 'alpha' | 'hidden'; diff --git a/packages/client-composition/model/supportedLanguage.ts b/packages/client-composition/model/supportedLanguage.ts new file mode 100644 index 000000000..85f2111cc --- /dev/null +++ b/packages/client-composition/model/supportedLanguage.ts @@ -0,0 +1,74 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * ISO code for a supported language. + */ +export type SupportedLanguage = + | 'af' + | 'ar' + | 'az' + | 'bg' + | 'bn' + | 'ca' + | 'cs' + | 'cy' + | 'da' + | 'de' + | 'el' + | 'en' + | 'eo' + | 'es' + | 'et' + | 'eu' + | 'fa' + | 'fi' + | 'fo' + | 'fr' + | 'ga' + | 'gl' + | 'he' + | 'hi' + | 'hu' + | 'hy' + | 'id' + | 'is' + | 'it' + | 'ja' + | 'ka' + | 'kk' + | 'ko' + | 'ku' + | 'ky' + | 'lt' + | 'lv' + | 'mi' + | 'mn' + | 'mr' + | 'ms' + | 'mt' + | 'nb' + | 'nl' + | 'no' + | 'ns' + | 'pl' + | 'ps' + | 'pt' + | 'pt-br' + | 'qu' + | 'ro' + | 'ru' + | 'sk' + | 'sq' + | 'sv' + | 'sw' + | 'ta' + | 'te' + | 'th' + | 'tl' + | 'tn' + | 'tr' + | 'tt' + | 'uk' + | 'ur' + | 'uz' + | 'zh'; diff --git a/packages/client-composition/model/taskStatus.ts b/packages/client-composition/model/taskStatus.ts new file mode 100644 index 000000000..5b312a99c --- /dev/null +++ b/packages/client-composition/model/taskStatus.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Task status, `published` if the task is completed, `notPublished` otherwise. + */ +export type TaskStatus = 'published' | 'notPublished'; diff --git a/packages/client-composition/model/timeRange.ts b/packages/client-composition/model/timeRange.ts new file mode 100644 index 000000000..dee6043c9 --- /dev/null +++ b/packages/client-composition/model/timeRange.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type TimeRange = { + /** + * When the rule should start to be active, in Unix epoch time. + */ + from: number; + + /** + * When the rule should stop to be active, in Unix epoch time. + */ + until: number; +}; diff --git a/packages/client-composition/model/typoTolerance.ts b/packages/client-composition/model/typoTolerance.ts new file mode 100644 index 000000000..767e63229 --- /dev/null +++ b/packages/client-composition/model/typoTolerance.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TypoToleranceEnum } from './typoToleranceEnum'; + +/** + * Whether [typo tolerance](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/) is enabled and how it is applied. If typo tolerance is true, `min`, or `strict`, [word splitting and concatenation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/splitting-and-concatenation/) are also active. + */ +export type TypoTolerance = boolean | TypoToleranceEnum; diff --git a/packages/client-composition/model/typoToleranceEnum.ts b/packages/client-composition/model/typoToleranceEnum.ts new file mode 100644 index 000000000..a33877b0d --- /dev/null +++ b/packages/client-composition/model/typoToleranceEnum.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * - `min`. Return matches with the lowest number of typos. For example, if you have matches without typos, only include those. But if there are no matches without typos (with 1 typo), include matches with 1 typo (2 typos). - `strict`. Return matches with the two lowest numbers of typos. With `strict`, the Typo ranking criterion is applied first in the `ranking` setting. + */ +export type TypoToleranceEnum = 'min' | 'strict'; diff --git a/packages/client-composition/model/value.ts b/packages/client-composition/model/value.ts new file mode 100644 index 000000000..72cd05add --- /dev/null +++ b/packages/client-composition/model/value.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SortRemainingBy } from './sortRemainingBy'; + +export type Value = { + /** + * Explicit order of facets or facet values. This setting lets you always show specific facets or facet values at the top of the list. + */ + order?: Array; + + sortRemainingBy?: SortRemainingBy; + + /** + * Hide facet values. + */ + hide?: Array; +}; diff --git a/packages/client-composition/model/widgets.ts b/packages/client-composition/model/widgets.ts new file mode 100644 index 000000000..ee0f95779 --- /dev/null +++ b/packages/client-composition/model/widgets.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Banner } from './banner'; + +/** + * Widgets returned from any rules that are applied to the current search. + */ +export type Widgets = { + /** + * Banners defined in the Merchandising Studio for a given search. + */ + banners?: Array; +}; diff --git a/packages/client-composition/package.json b/packages/client-composition/package.json new file mode 100644 index 000000000..6b9e31c53 --- /dev/null +++ b/packages/client-composition/package.json @@ -0,0 +1,68 @@ +{ + "version": "0.0.1-alpha.20", + "repository": { + "type": "git", + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/client-composition#readme", + "type": "module", + "license": "MIT", + "author": "Algolia", + "scripts": { + "build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js", + "clean": "rm -rf ./dist || true", + "test:bundle": "publint . && attw --pack ." + }, + "name": "@algolia/client-composition", + "description": "JavaScript client for client-composition", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/builds/node.js", + "module": "./dist/builds/node.js", + "require": "./dist/builds/node.cjs" + }, + "worker": { + "types": "./dist/worker.d.ts", + "default": "./dist/builds/worker.js" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/builds/browser.js", + "import": "./dist/builds/browser.js", + "default": "./dist/builds/browser.umd.js" + } + }, + "./dist/builds/*": "./dist/builds/*.js" + }, + "jsdelivr": "./dist/builds/browser.umd.js", + "unpkg": "./dist/builds/browser.umd.js", + "react-native": "./dist/builds/browser.js", + "files": [ + "dist", + "index.js", + "index.d.ts" + ], + "dependencies": { + "@algolia/client-common": "5.23.3", + "@algolia/requester-browser-xhr": "5.23.3", + "@algolia/requester-fetch": "5.23.3", + "@algolia/requester-node-http": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "publint": "0.3.10", + "rollup": "4.39.0", + "tsup": "8.4.0", + "typescript": "5.8.3" + }, + "engines": { + "node": ">= 14.0.0" + } +} diff --git a/packages/client-composition/rollup.config.js b/packages/client-composition/rollup.config.js new file mode 100644 index 000000000..a27486cf2 --- /dev/null +++ b/packages/client-composition/rollup.config.js @@ -0,0 +1,17 @@ +export default [ + { + input: 'dist/builds/browser.min.js', + external: ['dom'], + cache: false, + output: { + esModule: false, + file: 'dist/builds/browser.umd.js', + name: '@algolia/client-composition', + format: 'umd', + sourcemap: false, + globals: { + ['compositionClient']: 'compositionClient', + }, + }, + }, +]; diff --git a/packages/client-composition/src/compositionFullClient.ts b/packages/client-composition/src/compositionFullClient.ts new file mode 100644 index 000000000..7183c676c --- /dev/null +++ b/packages/client-composition/src/compositionFullClient.ts @@ -0,0 +1,645 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { + CreateClientOptions, + Headers, + Host, + QueryParameters, + Request, + RequestOptions, +} from '@algolia/client-common'; +import { createAuth, createIterablePromise, createTransporter, getAlgoliaAgent, shuffle } from '@algolia/client-common'; + +import type { BatchParams } from '../model/batchParams'; +import type { Composition } from '../model/composition'; +import type { CompositionRule } from '../model/compositionRule'; + +import type { GetTaskResponse } from '../model/getTaskResponse'; +import type { ListCompositionsResponse } from '../model/listCompositionsResponse'; +import type { MultipleBatchResponse } from '../model/multipleBatchResponse'; + +import type { RulesMultipleBatchResponse } from '../model/rulesMultipleBatchResponse'; + +import type { SearchCompositionRulesResponse } from '../model/searchCompositionRulesResponse'; + +import type { SearchForFacetValuesResponse } from '../model/searchForFacetValuesResponse'; +import type { SearchResponse } from '../model/searchResponse'; + +import type { + CustomDeleteProps, + CustomGetProps, + CustomPostProps, + CustomPutProps, + GetCompositionProps, + GetRuleProps, + GetTaskProps, + ListCompositionsProps, + SaveRulesProps, + SearchCompositionRulesProps, + SearchForFacetValuesProps, + SearchProps, + WaitForCompositionTaskOptions, +} from '../model/clientMethodProps'; + +export const apiClientVersion = '0.0.1-alpha.20'; + +function getDefaultHosts(appId: string): Host[] { + return ( + [ + { + url: `${appId}-dsn.algolia.net`, + accept: 'read', + protocol: 'https', + }, + { + url: `${appId}.algolia.net`, + accept: 'write', + protocol: 'https', + }, + ] as Host[] + ).concat( + shuffle([ + { + url: `${appId}-1.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + { + url: `${appId}-2.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + { + url: `${appId}-3.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + ]), + ); +} + +export function createCompositionClient({ + appId: appIdOption, + apiKey: apiKeyOption, + authMode, + algoliaAgents, + ...options +}: CreateClientOptions) { + const auth = createAuth(appIdOption, apiKeyOption, authMode); + const transporter = createTransporter({ + hosts: getDefaultHosts(appIdOption), + ...options, + algoliaAgent: getAlgoliaAgent({ + algoliaAgents, + client: 'CompositionFull', + version: apiClientVersion, + }), + baseHeaders: { + 'content-type': 'text/plain', + ...auth.headers(), + ...options.baseHeaders, + }, + baseQueryParameters: { + ...auth.queryParameters(), + ...options.baseQueryParameters, + }, + }); + + return { + transporter, + + /** + * The `appId` currently in use. + */ + appId: appIdOption, + + /** + * The `apiKey` currently in use. + */ + apiKey: apiKeyOption, + + /** + * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties. + */ + clearCache(): Promise { + return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => undefined); + }, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return transporter.algoliaAgent.value; + }, + + /** + * Adds a `segment` to the `x-algolia-agent` sent with every requests. + * + * @param segment - The algolia agent (user-agent) segment to add. + * @param version - The version of the agent. + */ + addAlgoliaAgent(segment: string, version?: string): void { + transporter.algoliaAgent.add({ segment, version }); + }, + + /** + * Helper method to switch the API key used to authenticate the requests. + * + * @param params - Method params. + * @param params.apiKey - The new API Key to use. + */ + setClientApiKey({ apiKey }: { apiKey: string }): void { + if (!authMode || authMode === 'WithinHeaders') { + transporter.baseHeaders['x-algolia-api-key'] = apiKey; + } else { + transporter.baseQueryParameters['x-algolia-api-key'] = apiKey; + } + }, + + /** + * Helper: Wait for a composition-level task to be published (completed) for a given `compositionID` and `taskID`. + * + * @summary Helper method that waits for a task to be published (completed). + * @param WaitForCompositionTaskOptions - The `WaitForCompositionTaskOptions` object. + * @param WaitForCompositionTaskOptions.compositionID - The `compositionID` where the operation was performed. + * @param WaitForCompositionTaskOptions.taskID - The `taskID` returned in the method response. + * @param WaitForCompositionTaskOptions.maxRetries - The maximum number of retries. 50 by default. + * @param WaitForCompositionTaskOptions.timeout - The function to decide how long to wait between retries. + * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `getTask` method and merged with the transporter requestOptions. + */ + waitForCompositionTask( + { + compositionID, + taskID, + maxRetries = 50, + timeout = (retryCount: number): number => Math.min(retryCount * 200, 5000), + }: WaitForCompositionTaskOptions, + requestOptions?: RequestOptions, + ): Promise { + let retryCount = 0; + + return createIterablePromise({ + func: () => this.getTask({ compositionID, taskID }, requestOptions), + validate: (response) => response.status === 'published', + aggregator: () => (retryCount += 1), + error: { + validate: () => retryCount >= maxRetries, + message: () => `The maximum number of retries exceeded. (${retryCount}/${maxRetries})`, + }, + timeout: () => timeout(retryCount), + }); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customDelete - The customDelete object. + * @param customDelete.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customDelete.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customDelete( + { path, parameters }: CustomDeleteProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customDelete`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customGet - The customGet object. + * @param customGet.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customGet.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customGet({ path, parameters }: CustomGetProps, requestOptions?: RequestOptions): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customGet`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPost - The customPost object. + * @param customPost.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPost.parameters - Query parameters to apply to the current query. + * @param customPost.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPost( + { path, parameters, body }: CustomPostProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPost`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPut - The customPut object. + * @param customPut.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPut.parameters - Query parameters to apply to the current query. + * @param customPut.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPut( + { path, parameters, body }: CustomPutProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPut`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieve a single composition in the current Algolia application. + * + * Required API Key ACLs: + * - editSettings + * - settings + * @param getComposition - The getComposition object. + * @param getComposition.compositionID - Unique Composition ObjectID. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getComposition({ compositionID }: GetCompositionProps, requestOptions?: RequestOptions): Promise { + if (!compositionID) { + throw new Error('Parameter `compositionID` is required when calling `getComposition`.'); + } + + const requestPath = '/1/compositions/{compositionID}'.replace( + '{compositionID}', + encodeURIComponent(compositionID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a rule by its ID. To find the object ID of rules, use the [`search` operation](#tag/Rules/operation/searchRules). + * + * Required API Key ACLs: + * - settings + * @param getRule - The getRule object. + * @param getRule.compositionID - Unique Composition ObjectID. + * @param getRule.objectID - Unique identifier of a rule object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getRule({ compositionID, objectID }: GetRuleProps, requestOptions?: RequestOptions): Promise { + if (!compositionID) { + throw new Error('Parameter `compositionID` is required when calling `getRule`.'); + } + + if (!objectID) { + throw new Error('Parameter `objectID` is required when calling `getRule`.'); + } + + const requestPath = '/1/compositions/{compositionID}/rules/{objectID}' + .replace('{compositionID}', encodeURIComponent(compositionID)) + .replace('{objectID}', encodeURIComponent(objectID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Checks the status of a given task. + * + * Required API Key ACLs: + * - editSettings + * - settings + * - addObject + * - deleteObject + * - deleteIndex + * @param getTask - The getTask object. + * @param getTask.compositionID - Unique Composition ObjectID. + * @param getTask.taskID - Unique task identifier. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getTask({ compositionID, taskID }: GetTaskProps, requestOptions?: RequestOptions): Promise { + if (!compositionID) { + throw new Error('Parameter `compositionID` is required when calling `getTask`.'); + } + + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `getTask`.'); + } + + const requestPath = '/1/compositions/{compositionID}/task/{taskID}' + .replace('{compositionID}', encodeURIComponent(compositionID)) + .replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Lists all compositions in the current Algolia application. + * + * Required API Key ACLs: + * - editSettings + * - settings + * @param listCompositions - The listCompositions object. + * @param listCompositions.page - Requested page of the API response. If `null`, the API response is not paginated. + * @param listCompositions.hitsPerPage - Number of hits per page. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listCompositions( + { page, hitsPerPage }: ListCompositionsProps = {}, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/1/compositions'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (page !== undefined) { + queryParameters['page'] = page.toString(); + } + + if (hitsPerPage !== undefined) { + queryParameters['hitsPerPage'] = hitsPerPage.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Adds, updates, or deletes compositions with a single API request. + * + * Required API Key ACLs: + * - editSettings + * @param batchParams - The batchParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + multipleBatch(batchParams: BatchParams, requestOptions?: RequestOptions): Promise { + if (!batchParams) { + throw new Error('Parameter `batchParams` is required when calling `multipleBatch`.'); + } + + if (!batchParams.requests) { + throw new Error('Parameter `batchParams.requests` is required when calling `multipleBatch`.'); + } + + const requestPath = '/1/compositions/*/batch'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: batchParams, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Create or update or delete multiple composition rules. + * + * Required API Key ACLs: + * - editSettings + * @param saveRules - The saveRules object. + * @param saveRules.compositionID - Unique Composition ObjectID. + * @param saveRules.rules - The rules object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + saveRules( + { compositionID, rules }: SaveRulesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!compositionID) { + throw new Error('Parameter `compositionID` is required when calling `saveRules`.'); + } + + if (!rules) { + throw new Error('Parameter `rules` is required when calling `saveRules`.'); + } + + const requestPath = '/1/compositions/{compositionID}/rules/batch'.replace( + '{compositionID}', + encodeURIComponent(compositionID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: rules, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Runs a query on a single composition and returns matching results. + * + * Required API Key ACLs: + * - search + * @param search - The search object. + * @param search.compositionID - Unique Composition ObjectID. + * @param search.requestBody - The requestBody object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + search( + { compositionID, requestBody }: SearchProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!compositionID) { + throw new Error('Parameter `compositionID` is required when calling `search`.'); + } + + if (!requestBody) { + throw new Error('Parameter `requestBody` is required when calling `search`.'); + } + + const requestPath = '/1/compositions/{compositionID}/run'.replace( + '{compositionID}', + encodeURIComponent(compositionID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: requestBody, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for composition rules in your index. + * + * Required API Key ACLs: + * - settings + * @param searchCompositionRules - The searchCompositionRules object. + * @param searchCompositionRules.compositionID - Unique Composition ObjectID. + * @param searchCompositionRules.searchCompositionRulesParams - The searchCompositionRulesParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchCompositionRules( + { compositionID, searchCompositionRulesParams }: SearchCompositionRulesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!compositionID) { + throw new Error('Parameter `compositionID` is required when calling `searchCompositionRules`.'); + } + + const requestPath = '/1/compositions/{compositionID}/rules/search'.replace( + '{compositionID}', + encodeURIComponent(compositionID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: searchCompositionRulesParams ? searchCompositionRulesParams : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for values of a specified facet attribute on the composition\'s main source\'s index. - By default, facet values are sorted by decreasing count. You can adjust this with the `sortFacetValueBy` parameter. - Searching for facet values doesn\'t work if you have **more than 65 searchable facets and searchable attributes combined**. + * + * Required API Key ACLs: + * - search + * @param searchForFacetValues - The searchForFacetValues object. + * @param searchForFacetValues.compositionID - Unique Composition ObjectID. + * @param searchForFacetValues.facetName - Facet attribute in which to search for values. This attribute must be included in the `attributesForFaceting` index setting with the `searchable()` modifier. + * @param searchForFacetValues.searchForFacetValuesRequest - The searchForFacetValuesRequest object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchForFacetValues( + { compositionID, facetName, searchForFacetValuesRequest }: SearchForFacetValuesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!compositionID) { + throw new Error('Parameter `compositionID` is required when calling `searchForFacetValues`.'); + } + + if (!facetName) { + throw new Error('Parameter `facetName` is required when calling `searchForFacetValues`.'); + } + + const requestPath = '/1/compositions/{compositionID}/facets/{facetName}/query' + .replace('{compositionID}', encodeURIComponent(compositionID)) + .replace('{facetName}', encodeURIComponent(facetName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: searchForFacetValuesRequest ? searchForFacetValuesRequest : {}, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + }; +} diff --git a/packages/client-composition/tsconfig.json b/packages/client-composition/tsconfig.json new file mode 100644 index 000000000..444e8bb64 --- /dev/null +++ b/packages/client-composition/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src", "model", "builds"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/client-composition/tsup.config.ts b/packages/client-composition/tsup.config.ts new file mode 100644 index 000000000..8c60a6c07 --- /dev/null +++ b/packages/client-composition/tsup.config.ts @@ -0,0 +1,67 @@ +import type { Options } from 'tsup'; +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions, getDependencies } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +const nodeOptions: Options = { + ...getBaseNodeOptions(pkg, __dirname), + dts: { entry: { node: 'builds/node.ts' } }, + entry: ['builds/node.ts', 'src/*.ts'], +}; + +const nodeConfigs: Options[] = [ + { + ...nodeOptions, + format: 'cjs', + name: `node ${pkg.name} cjs`, + }, + { + ...nodeOptions, + format: 'esm', + name: `node ${pkg.name} esm`, + }, + { + ...nodeOptions, + format: 'esm', + name: `fetch ${pkg.name} esm`, + dts: { entry: { fetch: 'builds/fetch.ts' } }, + external: getDependencies(pkg, 'fetch'), + entry: ['builds/fetch.ts', 'src/*.ts'], + }, + { + ...nodeOptions, + format: 'esm', + name: `worker ${pkg.name} esm`, + dts: { entry: { worker: 'builds/worker.ts' } }, + external: getDependencies(pkg, 'worker'), + entry: ['builds/worker.ts', 'src/*.ts'], + }, +]; + +const browserOptions: Options = { + ...getBaseBrowserOptions(pkg, __dirname), + globalName: 'compositionClient', +}; + +const browserConfigs: Options[] = [ + { + ...browserOptions, + minify: false, + name: `browser ${pkg.name} esm`, + dts: { entry: { browser: 'builds/browser.ts' } }, + entry: ['builds/browser.ts', 'src/*.ts'], + }, + { + ...browserOptions, + dts: false, + minify: true, + name: `browser ${pkg.name} min esm`, + entry: { 'builds/browser.min': 'builds/browser.ts' }, + external: [], + noExternal: getDependencies(pkg, 'xhr'), + }, +]; + +export default defineConfig([...nodeConfigs, ...browserConfigs]); diff --git a/packages/client-insights/LICENSE b/packages/client-insights/LICENSE new file mode 100644 index 000000000..fddf416f9 --- /dev/null +++ b/packages/client-insights/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-Present Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/client-insights/README.md b/packages/client-insights/README.md new file mode 100644 index 000000000..089185312 --- /dev/null +++ b/packages/client-insights/README.md @@ -0,0 +1,77 @@ +

+ + Algolia for JavaScript + + +

The perfect starting point to integrate Algolia within your JavaScript project

+ +

+ NPM version + NPM downloads + jsDelivr Downloads + License +

+

+ +

+ Documentation • + InstantSearch • + Community Forum • + Stack Overflow • + Report a bug • + FAQ • + Support +

+ +## ✨ Features + +- Thin & **minimal low-level HTTP client** to interact with Algolia's API +- Works both on the **browser** and **node.js** +- **UMD and ESM compatible**, you can use it with any module loader +- Built with TypeScript + +## 💡 Getting Started + +> [!TIP] +> This API client is already a dependency of [the algoliasearch client](https://www.npmjs.com/package/algoliasearch), you don't need to manually install `@algolia/client-insights` if you already have `algoliasearch` installed. + +To get started, you first need to install @algolia/client-insights (or any other available API client package). +All of our clients comes with type definition, and are available for both browser and node environments. + +### With a package manager + +```bash +yarn add @algolia/client-insights@5.23.3 +# or +npm install @algolia/client-insights@5.23.3 +# or +pnpm add @algolia/client-insights@5.23.3 +``` + +### Without a package manager + +Add the following JavaScript snippet to the of your website: + +```html + +``` + +### Usage + +You can now import the Algolia API client in your project and play with it. + +```js +import { insightsClient } from '@algolia/client-insights'; + +const client = insightsClient('YOUR_APP_ID', 'YOUR_API_KEY'); +``` + +For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/javascript/v5/methods/insights/)**. + +## ❓ Troubleshooting + +Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/libraries/javascript/v5/) where you will find answers for the most common issues and gotchas with the client. You can also open [a GitHub issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=&projects=&template=Bug_report.md) + +## 📄 License + +The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). diff --git a/packages/client-insights/builds/browser.ts b/packages/client-insights/builds/browser.ts new file mode 100644 index 000000000..d5bd93ba3 --- /dev/null +++ b/packages/client-insights/builds/browser.ts @@ -0,0 +1,65 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import { createXhrRequester } from '@algolia/requester-browser-xhr'; + +import { + createBrowserLocalStorageCache, + createFallbackableCache, + createMemoryCache, + createNullLogger, +} from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { apiClientVersion, createInsightsClient } from '../src/insightsClient'; + +import type { Region } from '../src/insightsClient'; +import { REGIONS } from '../src/insightsClient'; + +export type { Region, RegionOptions } from '../src/insightsClient'; + +export { apiClientVersion } from '../src/insightsClient'; + +export * from '../model'; + +export function insightsClient( + appId: string, + apiKey: string, + region?: Region, + options?: ClientOptions, +): InsightsClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (region && (typeof region !== 'string' || !REGIONS.includes(region))) { + throw new Error(`\`region\` must be one of the following: ${REGIONS.join(', ')}`); + } + + return createInsightsClient({ + appId, + apiKey, + region, + timeouts: { + connect: 1000, + read: 2000, + write: 30000, + }, + logger: createNullLogger(), + requester: createXhrRequester(), + algoliaAgents: [{ segment: 'Browser' }], + authMode: 'WithinQueryParameters', + responsesCache: createMemoryCache(), + requestsCache: createMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], + }), + ...options, + }); +} + +export type InsightsClient = ReturnType; diff --git a/packages/client-insights/builds/fetch.ts b/packages/client-insights/builds/fetch.ts new file mode 100644 index 000000000..a14ff1cbb --- /dev/null +++ b/packages/client-insights/builds/fetch.ts @@ -0,0 +1,58 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type InsightsClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createInsightsClient } from '../src/insightsClient'; + +import type { Region } from '../src/insightsClient'; +import { REGIONS } from '../src/insightsClient'; + +export type { Region, RegionOptions } from '../src/insightsClient'; + +export { apiClientVersion } from '../src/insightsClient'; + +export * from '../model'; + +export function insightsClient( + appId: string, + apiKey: string, + region?: Region, + options?: ClientOptions, +): InsightsClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (region && (typeof region !== 'string' || !REGIONS.includes(region))) { + throw new Error(`\`region\` must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createInsightsClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Fetch' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-insights/builds/node.ts b/packages/client-insights/builds/node.ts new file mode 100644 index 000000000..447fe7987 --- /dev/null +++ b/packages/client-insights/builds/node.ts @@ -0,0 +1,59 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type InsightsClient = ReturnType; + +import { createHttpRequester } from '@algolia/requester-node-http'; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createInsightsClient } from '../src/insightsClient'; + +import type { Region } from '../src/insightsClient'; +import { REGIONS } from '../src/insightsClient'; + +export type { Region, RegionOptions } from '../src/insightsClient'; + +export { apiClientVersion } from '../src/insightsClient'; + +export * from '../model'; + +export function insightsClient( + appId: string, + apiKey: string, + region?: Region, + options?: ClientOptions, +): InsightsClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (region && (typeof region !== 'string' || !REGIONS.includes(region))) { + throw new Error(`\`region\` must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createInsightsClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createHttpRequester(), + algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-insights/builds/worker.ts b/packages/client-insights/builds/worker.ts new file mode 100644 index 000000000..49a802c98 --- /dev/null +++ b/packages/client-insights/builds/worker.ts @@ -0,0 +1,58 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type InsightsClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createInsightsClient } from '../src/insightsClient'; + +import type { Region } from '../src/insightsClient'; +import { REGIONS } from '../src/insightsClient'; + +export type { Region, RegionOptions } from '../src/insightsClient'; + +export { apiClientVersion } from '../src/insightsClient'; + +export * from '../model'; + +export function insightsClient( + appId: string, + apiKey: string, + region?: Region, + options?: ClientOptions, +): InsightsClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (region && (typeof region !== 'string' || !REGIONS.includes(region))) { + throw new Error(`\`region\` must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createInsightsClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Worker' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-insights/index.d.ts b/packages/client-insights/index.d.ts new file mode 100644 index 000000000..e81a1cd3e --- /dev/null +++ b/packages/client-insights/index.d.ts @@ -0,0 +1 @@ +export * from './dist/node'; diff --git a/packages/client-insights/index.js b/packages/client-insights/index.js new file mode 100644 index 000000000..21e26aad3 --- /dev/null +++ b/packages/client-insights/index.js @@ -0,0 +1 @@ +module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/client-insights/model/addToCartEvent.ts b/packages/client-insights/model/addToCartEvent.ts new file mode 100644 index 000000000..91553746d --- /dev/null +++ b/packages/client-insights/model/addToCartEvent.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AddToCartEvent = 'addToCart'; diff --git a/packages/client-insights/model/addedToCartObjectIDs.ts b/packages/client-insights/model/addedToCartObjectIDs.ts new file mode 100644 index 000000000..105288498 --- /dev/null +++ b/packages/client-insights/model/addedToCartObjectIDs.ts @@ -0,0 +1,57 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AddToCartEvent } from './addToCartEvent'; +import type { ConversionEvent } from './conversionEvent'; +import type { ObjectData } from './objectData'; +import type { Value } from './value'; + +/** + * Use this event to track when users add items to their shopping cart unrelated to a previous Algolia request. For example, if you don\'t use Algolia to build your category pages, use this event. To track add-to-cart events related to Algolia requests, use the \"Added to cart object IDs after search\" event. + */ +export type AddedToCartObjectIDs = { + /** + * Event name, up to 64 ASCII characters. Consider naming events consistently—for example, by adopting Segment\'s [object-action](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/#the-object-action-framework) framework. + */ + eventName: string; + + eventType: ConversionEvent; + + eventSubtype: AddToCartEvent; + + /** + * Index name (case-sensitive) to which the event\'s items belong. + */ + index: string; + + /** + * Object IDs of the records that are part of the event. + */ + objectIDs: Array; + + /** + * Anonymous or pseudonymous user identifier. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Identifier for authenticated users. When the user signs in, you can get an identifier from your system and send it as `authenticatedUserToken`. This lets you keep using the `userToken` from before the user signed in, while providing a reliable way to identify users across sessions. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + authenticatedUserToken?: string; + + /** + * Three-letter [currency code](https://www.iso.org/iso-4217-currency-codes.html). + */ + currency?: string; + + /** + * Extra information about the records involved in a purchase or add-to-cart event. If specified, it must have the same length as `objectIDs`. + */ + objectData?: Array; + + /** + * Timestamp of the event, measured in milliseconds since the Unix epoch. By default, the Insights API uses the time it receives an event as its timestamp. + */ + timestamp?: number; + + value?: Value; +}; diff --git a/packages/client-insights/model/addedToCartObjectIDsAfterSearch.ts b/packages/client-insights/model/addedToCartObjectIDsAfterSearch.ts new file mode 100644 index 000000000..184104f06 --- /dev/null +++ b/packages/client-insights/model/addedToCartObjectIDsAfterSearch.ts @@ -0,0 +1,62 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AddToCartEvent } from './addToCartEvent'; +import type { ConversionEvent } from './conversionEvent'; +import type { ObjectDataAfterSearch } from './objectDataAfterSearch'; +import type { Value } from './value'; + +/** + * Use this event to track when users add items to their shopping cart after a previous Algolia request. If you\'re building your category pages with Algolia, you\'ll also use this event. + */ +export type AddedToCartObjectIDsAfterSearch = { + /** + * Event name, up to 64 ASCII characters. Consider naming events consistently—for example, by adopting Segment\'s [object-action](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/#the-object-action-framework) framework. + */ + eventName: string; + + eventType: ConversionEvent; + + eventSubtype: AddToCartEvent; + + /** + * Index name (case-sensitive) to which the event\'s items belong. + */ + index: string; + + /** + * Unique identifier for a search query. The query ID is required for events related to search or browse requests. If you add `clickAnalytics: true` as a search request parameter, the query ID is included in the API response. + */ + queryID: string; + + /** + * Object IDs of the records that are part of the event. + */ + objectIDs: Array; + + /** + * Anonymous or pseudonymous user identifier. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Identifier for authenticated users. When the user signs in, you can get an identifier from your system and send it as `authenticatedUserToken`. This lets you keep using the `userToken` from before the user signed in, while providing a reliable way to identify users across sessions. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + authenticatedUserToken?: string; + + /** + * Three-letter [currency code](https://www.iso.org/iso-4217-currency-codes.html). + */ + currency?: string; + + /** + * Extra information about the records involved in a purchase or add-to-cart events. If provided, it must be the same length as `objectIDs`. + */ + objectData?: Array; + + /** + * Timestamp of the event, measured in milliseconds since the Unix epoch. By default, the Insights API uses the time it receives an event as its timestamp. + */ + timestamp?: number; + + value?: Value; +}; diff --git a/packages/client-insights/model/clickEvent.ts b/packages/client-insights/model/clickEvent.ts new file mode 100644 index 000000000..b076bf016 --- /dev/null +++ b/packages/client-insights/model/clickEvent.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type ClickEvent = 'click'; diff --git a/packages/client-insights/model/clickedFilters.ts b/packages/client-insights/model/clickedFilters.ts new file mode 100644 index 000000000..b23a75ece --- /dev/null +++ b/packages/client-insights/model/clickedFilters.ts @@ -0,0 +1,40 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ClickEvent } from './clickEvent'; + +/** + * Use this event to track when users click facet filters in your user interface. + */ +export type ClickedFilters = { + /** + * Event name, up to 64 ASCII characters. Consider naming events consistently—for example, by adopting Segment\'s [object-action](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/#the-object-action-framework) framework. + */ + eventName: string; + + eventType: ClickEvent; + + /** + * Index name (case-sensitive) to which the event\'s items belong. + */ + index: string; + + /** + * Applied facet filters. Facet filters are `facet:value` pairs. Facet values must be URL-encoded, such as, `discount:10%25`. + */ + filters: Array; + + /** + * Anonymous or pseudonymous user identifier. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Identifier for authenticated users. When the user signs in, you can get an identifier from your system and send it as `authenticatedUserToken`. This lets you keep using the `userToken` from before the user signed in, while providing a reliable way to identify users across sessions. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + authenticatedUserToken?: string; + + /** + * Timestamp of the event, measured in milliseconds since the Unix epoch. By default, the Insights API uses the time it receives an event as its timestamp. + */ + timestamp?: number; +}; diff --git a/packages/client-insights/model/clickedObjectIDs.ts b/packages/client-insights/model/clickedObjectIDs.ts new file mode 100644 index 000000000..f025acc24 --- /dev/null +++ b/packages/client-insights/model/clickedObjectIDs.ts @@ -0,0 +1,40 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ClickEvent } from './clickEvent'; + +/** + * Use this event to track when users click items unrelated to a previous Algolia request. For example, if you don\'t use Algolia to build your category pages, use this event. To track click events related to Algolia requests, use the \"Clicked object IDs after search\" event. + */ +export type ClickedObjectIDs = { + /** + * Event name, up to 64 ASCII characters. Consider naming events consistently—for example, by adopting Segment\'s [object-action](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/#the-object-action-framework) framework. + */ + eventName: string; + + eventType: ClickEvent; + + /** + * Index name (case-sensitive) to which the event\'s items belong. + */ + index: string; + + /** + * Object IDs of the records that are part of the event. + */ + objectIDs: Array; + + /** + * Anonymous or pseudonymous user identifier. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Identifier for authenticated users. When the user signs in, you can get an identifier from your system and send it as `authenticatedUserToken`. This lets you keep using the `userToken` from before the user signed in, while providing a reliable way to identify users across sessions. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + authenticatedUserToken?: string; + + /** + * Timestamp of the event, measured in milliseconds since the Unix epoch. By default, the Insights API uses the time it receives an event as its timestamp. + */ + timestamp?: number; +}; diff --git a/packages/client-insights/model/clickedObjectIDsAfterSearch.ts b/packages/client-insights/model/clickedObjectIDsAfterSearch.ts new file mode 100644 index 000000000..c659e56c9 --- /dev/null +++ b/packages/client-insights/model/clickedObjectIDsAfterSearch.ts @@ -0,0 +1,50 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ClickEvent } from './clickEvent'; + +/** + * Click event after an Algolia request. Use this event to track when users click items in the search results. If you\'re building your category pages with Algolia, you\'ll also use this event. + */ +export type ClickedObjectIDsAfterSearch = { + /** + * Event name, up to 64 ASCII characters. Consider naming events consistently—for example, by adopting Segment\'s [object-action](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/#the-object-action-framework) framework. + */ + eventName: string; + + eventType: ClickEvent; + + /** + * Index name (case-sensitive) to which the event\'s items belong. + */ + index: string; + + /** + * Object IDs of the records that are part of the event. + */ + objectIDs: Array; + + /** + * Position of the clicked item the search results. You must provide 1 `position` for each `objectID`. + */ + positions: Array; + + /** + * Unique identifier for a search query. The query ID is required for events related to search or browse requests. If you add `clickAnalytics: true` as a search request parameter, the query ID is included in the API response. + */ + queryID: string; + + /** + * Anonymous or pseudonymous user identifier. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Identifier for authenticated users. When the user signs in, you can get an identifier from your system and send it as `authenticatedUserToken`. This lets you keep using the `userToken` from before the user signed in, while providing a reliable way to identify users across sessions. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + authenticatedUserToken?: string; + + /** + * Timestamp of the event, measured in milliseconds since the Unix epoch. By default, the Insights API uses the time it receives an event as its timestamp. + */ + timestamp?: number; +}; diff --git a/packages/client-insights/model/clientMethodProps.ts b/packages/client-insights/model/clientMethodProps.ts new file mode 100644 index 000000000..a69fd06cd --- /dev/null +++ b/packages/client-insights/model/clientMethodProps.ts @@ -0,0 +1,75 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Properties for the `customDelete` method. + */ +export type CustomDeleteProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customGet` method. + */ +export type CustomGetProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customPost` method. + */ +export type CustomPostProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `customPut` method. + */ +export type CustomPutProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `deleteUserToken` method. + */ +export type DeleteUserTokenProps = { + /** + * User token for which to delete all associated events. + */ + userToken: string; +}; diff --git a/packages/client-insights/model/conversionEvent.ts b/packages/client-insights/model/conversionEvent.ts new file mode 100644 index 000000000..0713aad47 --- /dev/null +++ b/packages/client-insights/model/conversionEvent.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type ConversionEvent = 'conversion'; diff --git a/packages/client-insights/model/convertedFilters.ts b/packages/client-insights/model/convertedFilters.ts new file mode 100644 index 000000000..c25e4f7f7 --- /dev/null +++ b/packages/client-insights/model/convertedFilters.ts @@ -0,0 +1,37 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ConversionEvent } from './conversionEvent'; + +export type ConvertedFilters = { + /** + * Event name, up to 64 ASCII characters. Consider naming events consistently—for example, by adopting Segment\'s [object-action](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/#the-object-action-framework) framework. + */ + eventName: string; + + eventType: ConversionEvent; + + /** + * Index name (case-sensitive) to which the event\'s items belong. + */ + index: string; + + /** + * Applied facet filters. Facet filters are `facet:value` pairs. Facet values must be URL-encoded, such as, `discount:10%25`. + */ + filters: Array; + + /** + * Anonymous or pseudonymous user identifier. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Identifier for authenticated users. When the user signs in, you can get an identifier from your system and send it as `authenticatedUserToken`. This lets you keep using the `userToken` from before the user signed in, while providing a reliable way to identify users across sessions. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + authenticatedUserToken?: string; + + /** + * Timestamp of the event, measured in milliseconds since the Unix epoch. By default, the Insights API uses the time it receives an event as its timestamp. + */ + timestamp?: number; +}; diff --git a/packages/client-insights/model/convertedObjectIDs.ts b/packages/client-insights/model/convertedObjectIDs.ts new file mode 100644 index 000000000..600efa8b6 --- /dev/null +++ b/packages/client-insights/model/convertedObjectIDs.ts @@ -0,0 +1,40 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ConversionEvent } from './conversionEvent'; + +/** + * Use this event to track when users convert on items unrelated to a previous Algolia request. For example, if you don\'t use Algolia to build your category pages, use this event. To track conversion events related to Algolia requests, use the \"Converted object IDs after search\" event. + */ +export type ConvertedObjectIDs = { + /** + * Event name, up to 64 ASCII characters. Consider naming events consistently—for example, by adopting Segment\'s [object-action](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/#the-object-action-framework) framework. + */ + eventName: string; + + eventType: ConversionEvent; + + /** + * Index name (case-sensitive) to which the event\'s items belong. + */ + index: string; + + /** + * Object IDs of the records that are part of the event. + */ + objectIDs: Array; + + /** + * Anonymous or pseudonymous user identifier. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Identifier for authenticated users. When the user signs in, you can get an identifier from your system and send it as `authenticatedUserToken`. This lets you keep using the `userToken` from before the user signed in, while providing a reliable way to identify users across sessions. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + authenticatedUserToken?: string; + + /** + * Timestamp of the event, measured in milliseconds since the Unix epoch. By default, the Insights API uses the time it receives an event as its timestamp. + */ + timestamp?: number; +}; diff --git a/packages/client-insights/model/convertedObjectIDsAfterSearch.ts b/packages/client-insights/model/convertedObjectIDsAfterSearch.ts new file mode 100644 index 000000000..451d1eca8 --- /dev/null +++ b/packages/client-insights/model/convertedObjectIDsAfterSearch.ts @@ -0,0 +1,45 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ConversionEvent } from './conversionEvent'; + +/** + * Use this event to track when users convert after a previous Algolia request. For example, a user clicks on an item in the search results to view the product detail page. Then, the user adds the item to their shopping cart. If you\'re building your category pages with Algolia, you\'ll also use this event. + */ +export type ConvertedObjectIDsAfterSearch = { + /** + * Event name, up to 64 ASCII characters. Consider naming events consistently—for example, by adopting Segment\'s [object-action](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/#the-object-action-framework) framework. + */ + eventName: string; + + eventType: ConversionEvent; + + /** + * Index name (case-sensitive) to which the event\'s items belong. + */ + index: string; + + /** + * Object IDs of the records that are part of the event. + */ + objectIDs: Array; + + /** + * Unique identifier for a search query. The query ID is required for events related to search or browse requests. If you add `clickAnalytics: true` as a search request parameter, the query ID is included in the API response. + */ + queryID: string; + + /** + * Anonymous or pseudonymous user identifier. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Identifier for authenticated users. When the user signs in, you can get an identifier from your system and send it as `authenticatedUserToken`. This lets you keep using the `userToken` from before the user signed in, while providing a reliable way to identify users across sessions. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + authenticatedUserToken?: string; + + /** + * Timestamp of the event, measured in milliseconds since the Unix epoch. By default, the Insights API uses the time it receives an event as its timestamp. + */ + timestamp?: number; +}; diff --git a/packages/client-insights/model/discount.ts b/packages/client-insights/model/discount.ts new file mode 100644 index 000000000..4b9b556aa --- /dev/null +++ b/packages/client-insights/model/discount.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Absolute value of the discount for this product, in units of `currency`. + */ +export type Discount = number | string; diff --git a/packages/client-insights/model/errorBase.ts b/packages/client-insights/model/errorBase.ts new file mode 100644 index 000000000..960e509cb --- /dev/null +++ b/packages/client-insights/model/errorBase.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Error. + */ +export type ErrorBase = Record & { + message?: string; +}; diff --git a/packages/client-insights/model/eventsItems.ts b/packages/client-insights/model/eventsItems.ts new file mode 100644 index 000000000..fb22df00f --- /dev/null +++ b/packages/client-insights/model/eventsItems.ts @@ -0,0 +1,30 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AddedToCartObjectIDs } from './addedToCartObjectIDs'; +import type { AddedToCartObjectIDsAfterSearch } from './addedToCartObjectIDsAfterSearch'; +import type { ClickedFilters } from './clickedFilters'; +import type { ClickedObjectIDs } from './clickedObjectIDs'; +import type { ClickedObjectIDsAfterSearch } from './clickedObjectIDsAfterSearch'; +import type { ConvertedFilters } from './convertedFilters'; +import type { ConvertedObjectIDs } from './convertedObjectIDs'; +import type { ConvertedObjectIDsAfterSearch } from './convertedObjectIDsAfterSearch'; + +import type { PurchasedObjectIDs } from './purchasedObjectIDs'; +import type { PurchasedObjectIDsAfterSearch } from './purchasedObjectIDsAfterSearch'; + +import type { ViewedFilters } from './viewedFilters'; +import type { ViewedObjectIDs } from './viewedObjectIDs'; + +export type EventsItems = + | ClickedObjectIDsAfterSearch + | AddedToCartObjectIDsAfterSearch + | PurchasedObjectIDsAfterSearch + | ConvertedObjectIDsAfterSearch + | ClickedObjectIDs + | PurchasedObjectIDs + | AddedToCartObjectIDs + | ConvertedObjectIDs + | ClickedFilters + | ConvertedFilters + | ViewedObjectIDs + | ViewedFilters; diff --git a/packages/client-insights/model/eventsResponse.ts b/packages/client-insights/model/eventsResponse.ts new file mode 100644 index 000000000..5f9aa383e --- /dev/null +++ b/packages/client-insights/model/eventsResponse.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * The response of the Insights API. + */ +export type EventsResponse = { + /** + * Details about the response, such as error messages. + */ + message?: string; + + /** + * The HTTP status code of the response. + */ + status?: number; +}; diff --git a/packages/client-insights/model/index.ts b/packages/client-insights/model/index.ts new file mode 100644 index 000000000..4278161cb --- /dev/null +++ b/packages/client-insights/model/index.ts @@ -0,0 +1,29 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export * from './addedToCartObjectIDs'; +export * from './addedToCartObjectIDsAfterSearch'; +export * from './addToCartEvent'; +export * from './clickedFilters'; +export * from './clickedObjectIDs'; +export * from './clickedObjectIDsAfterSearch'; +export * from './clickEvent'; +export * from './clientMethodProps'; +export * from './conversionEvent'; +export * from './convertedFilters'; +export * from './convertedObjectIDs'; +export * from './convertedObjectIDsAfterSearch'; +export * from './discount'; +export * from './errorBase'; +export * from './eventsItems'; +export * from './eventsResponse'; +export * from './insightsEvents'; +export * from './objectData'; +export * from './objectDataAfterSearch'; +export * from './price'; +export * from './purchasedObjectIDs'; +export * from './purchasedObjectIDsAfterSearch'; +export * from './purchaseEvent'; +export * from './value'; +export * from './viewedFilters'; +export * from './viewedObjectIDs'; +export * from './viewEvent'; diff --git a/packages/client-insights/model/insightsEvents.ts b/packages/client-insights/model/insightsEvents.ts new file mode 100644 index 000000000..212fcb3a8 --- /dev/null +++ b/packages/client-insights/model/insightsEvents.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { EventsItems } from './eventsItems'; + +export type InsightsEvents = { + /** + * Click and conversion events. **All** events must be valid, otherwise the API returns an error. + */ + events: Array; +}; diff --git a/packages/client-insights/model/objectData.ts b/packages/client-insights/model/objectData.ts new file mode 100644 index 000000000..9badc4d07 --- /dev/null +++ b/packages/client-insights/model/objectData.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Discount } from './discount'; +import type { Price } from './price'; + +export type ObjectData = { + price?: Price; + + /** + * Quantity of a product that has been purchased or added to the cart. The total purchase value is the sum of `quantity` multiplied with the `price` for each purchased item. + */ + quantity?: number; + + discount?: Discount; +}; diff --git a/packages/client-insights/model/objectDataAfterSearch.ts b/packages/client-insights/model/objectDataAfterSearch.ts new file mode 100644 index 000000000..eef9ce641 --- /dev/null +++ b/packages/client-insights/model/objectDataAfterSearch.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Discount } from './discount'; +import type { Price } from './price'; + +export type ObjectDataAfterSearch = { + /** + * Unique identifier for a search query, used to track purchase events with multiple records that originate from different searches. + */ + queryID?: string; + + price?: Price; + + /** + * Quantity of a product that has been purchased or added to the cart. The total purchase value is the sum of `quantity` multiplied with the `price` for each purchased item. + */ + quantity?: number; + + discount?: Discount; +}; diff --git a/packages/client-insights/model/price.ts b/packages/client-insights/model/price.ts new file mode 100644 index 000000000..3bf6d7c35 --- /dev/null +++ b/packages/client-insights/model/price.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Total price of a product, including any discounts, in units of `currency`. + */ +export type Price = number | string; diff --git a/packages/client-insights/model/purchaseEvent.ts b/packages/client-insights/model/purchaseEvent.ts new file mode 100644 index 000000000..092c35a3b --- /dev/null +++ b/packages/client-insights/model/purchaseEvent.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type PurchaseEvent = 'purchase'; diff --git a/packages/client-insights/model/purchasedObjectIDs.ts b/packages/client-insights/model/purchasedObjectIDs.ts new file mode 100644 index 000000000..7946d7e4b --- /dev/null +++ b/packages/client-insights/model/purchasedObjectIDs.ts @@ -0,0 +1,57 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ConversionEvent } from './conversionEvent'; +import type { ObjectData } from './objectData'; +import type { PurchaseEvent } from './purchaseEvent'; +import type { Value } from './value'; + +/** + * Use this event to track when users make a purchase unrelated to a previous Algolia request. For example, if you don\'t use Algolia to build your category pages, use this event. To track purchase events related to Algolia requests, use the \"Purchased object IDs after search\" event. + */ +export type PurchasedObjectIDs = { + /** + * Event name, up to 64 ASCII characters. Consider naming events consistently—for example, by adopting Segment\'s [object-action](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/#the-object-action-framework) framework. + */ + eventName: string; + + eventType: ConversionEvent; + + eventSubtype: PurchaseEvent; + + /** + * Index name (case-sensitive) to which the event\'s items belong. + */ + index: string; + + /** + * Object IDs of the records that are part of the event. + */ + objectIDs: Array; + + /** + * Anonymous or pseudonymous user identifier. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Identifier for authenticated users. When the user signs in, you can get an identifier from your system and send it as `authenticatedUserToken`. This lets you keep using the `userToken` from before the user signed in, while providing a reliable way to identify users across sessions. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + authenticatedUserToken?: string; + + /** + * Three-letter [currency code](https://www.iso.org/iso-4217-currency-codes.html). + */ + currency?: string; + + /** + * Extra information about the records involved in a purchase or add-to-cart event. If specified, it must have the same length as `objectIDs`. + */ + objectData?: Array; + + /** + * Timestamp of the event, measured in milliseconds since the Unix epoch. By default, the Insights API uses the time it receives an event as its timestamp. + */ + timestamp?: number; + + value?: Value; +}; diff --git a/packages/client-insights/model/purchasedObjectIDsAfterSearch.ts b/packages/client-insights/model/purchasedObjectIDsAfterSearch.ts new file mode 100644 index 000000000..92be89a8e --- /dev/null +++ b/packages/client-insights/model/purchasedObjectIDsAfterSearch.ts @@ -0,0 +1,57 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ConversionEvent } from './conversionEvent'; +import type { ObjectDataAfterSearch } from './objectDataAfterSearch'; +import type { PurchaseEvent } from './purchaseEvent'; +import type { Value } from './value'; + +/** + * Use this event to track when users make a purchase after a previous Algolia request. If you\'re building your category pages with Algolia, you\'ll also use this event. + */ +export type PurchasedObjectIDsAfterSearch = { + /** + * Event name, up to 64 ASCII characters. Consider naming events consistently—for example, by adopting Segment\'s [object-action](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/#the-object-action-framework) framework. + */ + eventName: string; + + eventType: ConversionEvent; + + eventSubtype: PurchaseEvent; + + /** + * Index name (case-sensitive) to which the event\'s items belong. + */ + index: string; + + /** + * Object IDs of the records that are part of the event. + */ + objectIDs: Array; + + /** + * Anonymous or pseudonymous user identifier. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Identifier for authenticated users. When the user signs in, you can get an identifier from your system and send it as `authenticatedUserToken`. This lets you keep using the `userToken` from before the user signed in, while providing a reliable way to identify users across sessions. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + authenticatedUserToken?: string; + + /** + * Three-letter [currency code](https://www.iso.org/iso-4217-currency-codes.html). + */ + currency?: string; + + /** + * Extra information about the records involved in a purchase or add-to-cart events. If provided, it must be the same length as `objectIDs`. + */ + objectData: Array; + + /** + * Timestamp of the event, measured in milliseconds since the Unix epoch. By default, the Insights API uses the time it receives an event as its timestamp. + */ + timestamp?: number; + + value?: Value; +}; diff --git a/packages/client-insights/model/value.ts b/packages/client-insights/model/value.ts new file mode 100644 index 000000000..1a2985883 --- /dev/null +++ b/packages/client-insights/model/value.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Total monetary value of this event in units of `currency`. + */ +export type Value = number | string; diff --git a/packages/client-insights/model/viewEvent.ts b/packages/client-insights/model/viewEvent.ts new file mode 100644 index 000000000..d743b4701 --- /dev/null +++ b/packages/client-insights/model/viewEvent.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type ViewEvent = 'view'; diff --git a/packages/client-insights/model/viewedFilters.ts b/packages/client-insights/model/viewedFilters.ts new file mode 100644 index 000000000..d9649622b --- /dev/null +++ b/packages/client-insights/model/viewedFilters.ts @@ -0,0 +1,40 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ViewEvent } from './viewEvent'; + +/** + * Use this method to capture active filters. For example, when browsing a category page, users see content filtered on that specific category. + */ +export type ViewedFilters = { + /** + * Event name, up to 64 ASCII characters. Consider naming events consistently—for example, by adopting Segment\'s [object-action](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/#the-object-action-framework) framework. + */ + eventName: string; + + eventType: ViewEvent; + + /** + * Index name (case-sensitive) to which the event\'s items belong. + */ + index: string; + + /** + * Applied facet filters. Facet filters are `facet:value` pairs. Facet values must be URL-encoded, such as, `discount:10%25`. + */ + filters: Array; + + /** + * Anonymous or pseudonymous user identifier. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Identifier for authenticated users. When the user signs in, you can get an identifier from your system and send it as `authenticatedUserToken`. This lets you keep using the `userToken` from before the user signed in, while providing a reliable way to identify users across sessions. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + authenticatedUserToken?: string; + + /** + * Timestamp of the event, measured in milliseconds since the Unix epoch. By default, the Insights API uses the time it receives an event as its timestamp. + */ + timestamp?: number; +}; diff --git a/packages/client-insights/model/viewedObjectIDs.ts b/packages/client-insights/model/viewedObjectIDs.ts new file mode 100644 index 000000000..39e2000ca --- /dev/null +++ b/packages/client-insights/model/viewedObjectIDs.ts @@ -0,0 +1,40 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ViewEvent } from './viewEvent'; + +/** + * Use this event to track when users viewed items in the search results. + */ +export type ViewedObjectIDs = { + /** + * Event name, up to 64 ASCII characters. Consider naming events consistently—for example, by adopting Segment\'s [object-action](https://segment.com/academy/collecting-data/naming-conventions-for-clean-data/#the-object-action-framework) framework. + */ + eventName: string; + + eventType: ViewEvent; + + /** + * Index name (case-sensitive) to which the event\'s items belong. + */ + index: string; + + /** + * Object IDs of the records that are part of the event. + */ + objectIDs: Array; + + /** + * Anonymous or pseudonymous user identifier. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Identifier for authenticated users. When the user signs in, you can get an identifier from your system and send it as `authenticatedUserToken`. This lets you keep using the `userToken` from before the user signed in, while providing a reliable way to identify users across sessions. Don\'t use personally identifiable information in user tokens. For more information, see [User token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + authenticatedUserToken?: string; + + /** + * Timestamp of the event, measured in milliseconds since the Unix epoch. By default, the Insights API uses the time it receives an event as its timestamp. + */ + timestamp?: number; +}; diff --git a/packages/client-insights/package.json b/packages/client-insights/package.json new file mode 100644 index 000000000..55a203afa --- /dev/null +++ b/packages/client-insights/package.json @@ -0,0 +1,68 @@ +{ + "version": "5.23.3", + "repository": { + "type": "git", + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/client-insights#readme", + "type": "module", + "license": "MIT", + "author": "Algolia", + "scripts": { + "build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js", + "clean": "rm -rf ./dist || true", + "test:bundle": "publint . && attw --pack ." + }, + "name": "@algolia/client-insights", + "description": "JavaScript client for client-insights", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/builds/node.js", + "module": "./dist/builds/node.js", + "require": "./dist/builds/node.cjs" + }, + "worker": { + "types": "./dist/worker.d.ts", + "default": "./dist/builds/worker.js" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/builds/browser.js", + "import": "./dist/builds/browser.js", + "default": "./dist/builds/browser.umd.js" + } + }, + "./dist/builds/*": "./dist/builds/*.js" + }, + "jsdelivr": "./dist/builds/browser.umd.js", + "unpkg": "./dist/builds/browser.umd.js", + "react-native": "./dist/builds/browser.js", + "files": [ + "dist", + "index.js", + "index.d.ts" + ], + "dependencies": { + "@algolia/client-common": "5.23.3", + "@algolia/requester-browser-xhr": "5.23.3", + "@algolia/requester-fetch": "5.23.3", + "@algolia/requester-node-http": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "publint": "0.3.10", + "rollup": "4.39.0", + "tsup": "8.4.0", + "typescript": "5.8.3" + }, + "engines": { + "node": ">= 14.0.0" + } +} diff --git a/packages/client-insights/rollup.config.js b/packages/client-insights/rollup.config.js new file mode 100644 index 000000000..c9ca8ea8a --- /dev/null +++ b/packages/client-insights/rollup.config.js @@ -0,0 +1,17 @@ +export default [ + { + input: 'dist/builds/browser.min.js', + external: ['dom'], + cache: false, + output: { + esModule: false, + file: 'dist/builds/browser.umd.js', + name: '@algolia/client-insights', + format: 'umd', + sourcemap: false, + globals: { + ['insightsClient']: 'insightsClient', + }, + }, + }, +]; diff --git a/packages/client-insights/src/insightsClient.ts b/packages/client-insights/src/insightsClient.ts new file mode 100644 index 000000000..d629549a7 --- /dev/null +++ b/packages/client-insights/src/insightsClient.ts @@ -0,0 +1,286 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { + CreateClientOptions, + Headers, + Host, + QueryParameters, + Request, + RequestOptions, +} from '@algolia/client-common'; +import { createAuth, createTransporter, getAlgoliaAgent } from '@algolia/client-common'; + +import type { EventsResponse } from '../model/eventsResponse'; +import type { InsightsEvents } from '../model/insightsEvents'; + +import type { + CustomDeleteProps, + CustomGetProps, + CustomPostProps, + CustomPutProps, + DeleteUserTokenProps, +} from '../model/clientMethodProps'; + +export const apiClientVersion = '5.23.3'; + +export const REGIONS = ['de', 'us'] as const; +export type Region = (typeof REGIONS)[number]; +export type RegionOptions = { region?: Region }; + +function getDefaultHosts(region?: Region): Host[] { + const url = !region ? 'insights.algolia.io' : 'insights.{region}.algolia.io'.replace('{region}', region); + + return [{ url, accept: 'readWrite', protocol: 'https' }]; +} + +export function createInsightsClient({ + appId: appIdOption, + apiKey: apiKeyOption, + authMode, + algoliaAgents, + region: regionOption, + ...options +}: CreateClientOptions & RegionOptions) { + const auth = createAuth(appIdOption, apiKeyOption, authMode); + const transporter = createTransporter({ + hosts: getDefaultHosts(regionOption), + ...options, + algoliaAgent: getAlgoliaAgent({ + algoliaAgents, + client: 'Insights', + version: apiClientVersion, + }), + baseHeaders: { + 'content-type': 'text/plain', + ...auth.headers(), + ...options.baseHeaders, + }, + baseQueryParameters: { + ...auth.queryParameters(), + ...options.baseQueryParameters, + }, + }); + + return { + transporter, + + /** + * The `appId` currently in use. + */ + appId: appIdOption, + + /** + * The `apiKey` currently in use. + */ + apiKey: apiKeyOption, + + /** + * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties. + */ + clearCache(): Promise { + return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => undefined); + }, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return transporter.algoliaAgent.value; + }, + + /** + * Adds a `segment` to the `x-algolia-agent` sent with every requests. + * + * @param segment - The algolia agent (user-agent) segment to add. + * @param version - The version of the agent. + */ + addAlgoliaAgent(segment: string, version?: string): void { + transporter.algoliaAgent.add({ segment, version }); + }, + + /** + * Helper method to switch the API key used to authenticate the requests. + * + * @param params - Method params. + * @param params.apiKey - The new API Key to use. + */ + setClientApiKey({ apiKey }: { apiKey: string }): void { + if (!authMode || authMode === 'WithinHeaders') { + transporter.baseHeaders['x-algolia-api-key'] = apiKey; + } else { + transporter.baseQueryParameters['x-algolia-api-key'] = apiKey; + } + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customDelete - The customDelete object. + * @param customDelete.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customDelete.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customDelete( + { path, parameters }: CustomDeleteProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customDelete`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customGet - The customGet object. + * @param customGet.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customGet.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customGet({ path, parameters }: CustomGetProps, requestOptions?: RequestOptions): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customGet`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPost - The customPost object. + * @param customPost.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPost.parameters - Query parameters to apply to the current query. + * @param customPost.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPost( + { path, parameters, body }: CustomPostProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPost`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPut - The customPut object. + * @param customPut.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPut.parameters - Query parameters to apply to the current query. + * @param customPut.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPut( + { path, parameters, body }: CustomPutProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPut`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes all events related to the specified user token from events metrics and analytics. The deletion is asynchronous, and processed within 48 hours. To delete a personalization user profile, see `Delete a user profile` in the Personalization API. + * @param deleteUserToken - The deleteUserToken object. + * @param deleteUserToken.userToken - User token for which to delete all associated events. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteUserToken({ userToken }: DeleteUserTokenProps, requestOptions?: RequestOptions): Promise { + if (!userToken) { + throw new Error('Parameter `userToken` is required when calling `deleteUserToken`.'); + } + + const requestPath = '/1/usertokens/{userToken}'.replace('{userToken}', encodeURIComponent(userToken)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Sends a list of events to the Insights API. You can include up to 1,000 events in a single request, but the request body must be smaller than 2 MB. + * @param insightsEvents - The insightsEvents object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + pushEvents(insightsEvents: InsightsEvents, requestOptions?: RequestOptions): Promise { + if (!insightsEvents) { + throw new Error('Parameter `insightsEvents` is required when calling `pushEvents`.'); + } + + if (!insightsEvents.events) { + throw new Error('Parameter `insightsEvents.events` is required when calling `pushEvents`.'); + } + + const requestPath = '/1/events'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: insightsEvents, + }; + + return transporter.request(request, requestOptions); + }, + }; +} diff --git a/packages/client-insights/tsconfig.json b/packages/client-insights/tsconfig.json new file mode 100644 index 000000000..444e8bb64 --- /dev/null +++ b/packages/client-insights/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src", "model", "builds"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/client-insights/tsup.config.ts b/packages/client-insights/tsup.config.ts new file mode 100644 index 000000000..ea1a5c6d2 --- /dev/null +++ b/packages/client-insights/tsup.config.ts @@ -0,0 +1,67 @@ +import type { Options } from 'tsup'; +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions, getDependencies } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +const nodeOptions: Options = { + ...getBaseNodeOptions(pkg, __dirname), + dts: { entry: { node: 'builds/node.ts' } }, + entry: ['builds/node.ts', 'src/*.ts'], +}; + +const nodeConfigs: Options[] = [ + { + ...nodeOptions, + format: 'cjs', + name: `node ${pkg.name} cjs`, + }, + { + ...nodeOptions, + format: 'esm', + name: `node ${pkg.name} esm`, + }, + { + ...nodeOptions, + format: 'esm', + name: `fetch ${pkg.name} esm`, + dts: { entry: { fetch: 'builds/fetch.ts' } }, + external: getDependencies(pkg, 'fetch'), + entry: ['builds/fetch.ts', 'src/*.ts'], + }, + { + ...nodeOptions, + format: 'esm', + name: `worker ${pkg.name} esm`, + dts: { entry: { worker: 'builds/worker.ts' } }, + external: getDependencies(pkg, 'worker'), + entry: ['builds/worker.ts', 'src/*.ts'], + }, +]; + +const browserOptions: Options = { + ...getBaseBrowserOptions(pkg, __dirname), + globalName: 'insightsClient', +}; + +const browserConfigs: Options[] = [ + { + ...browserOptions, + minify: false, + name: `browser ${pkg.name} esm`, + dts: { entry: { browser: 'builds/browser.ts' } }, + entry: ['builds/browser.ts', 'src/*.ts'], + }, + { + ...browserOptions, + dts: false, + minify: true, + name: `browser ${pkg.name} min esm`, + entry: { 'builds/browser.min': 'builds/browser.ts' }, + external: [], + noExternal: getDependencies(pkg, 'xhr'), + }, +]; + +export default defineConfig([...nodeConfigs, ...browserConfigs]); diff --git a/packages/client-personalization/LICENSE b/packages/client-personalization/LICENSE new file mode 100644 index 000000000..fddf416f9 --- /dev/null +++ b/packages/client-personalization/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-Present Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/client-personalization/README.md b/packages/client-personalization/README.md new file mode 100644 index 000000000..d69155a1c --- /dev/null +++ b/packages/client-personalization/README.md @@ -0,0 +1,77 @@ +

+ + Algolia for JavaScript + + +

The perfect starting point to integrate Algolia within your JavaScript project

+ +

+ NPM version + NPM downloads + jsDelivr Downloads + License +

+

+ +

+ Documentation • + InstantSearch • + Community Forum • + Stack Overflow • + Report a bug • + FAQ • + Support +

+ +## ✨ Features + +- Thin & **minimal low-level HTTP client** to interact with Algolia's API +- Works both on the **browser** and **node.js** +- **UMD and ESM compatible**, you can use it with any module loader +- Built with TypeScript + +## 💡 Getting Started + +> [!TIP] +> This API client is already a dependency of [the algoliasearch client](https://www.npmjs.com/package/algoliasearch), you don't need to manually install `@algolia/client-personalization` if you already have `algoliasearch` installed. + +To get started, you first need to install @algolia/client-personalization (or any other available API client package). +All of our clients comes with type definition, and are available for both browser and node environments. + +### With a package manager + +```bash +yarn add @algolia/client-personalization@5.23.3 +# or +npm install @algolia/client-personalization@5.23.3 +# or +pnpm add @algolia/client-personalization@5.23.3 +``` + +### Without a package manager + +Add the following JavaScript snippet to the of your website: + +```html + +``` + +### Usage + +You can now import the Algolia API client in your project and play with it. + +```js +import { personalizationClient } from '@algolia/client-personalization'; + +const client = personalizationClient('YOUR_APP_ID', 'YOUR_API_KEY'); +``` + +For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/javascript/v5/methods/personalization/)**. + +## ❓ Troubleshooting + +Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/libraries/javascript/v5/) where you will find answers for the most common issues and gotchas with the client. You can also open [a GitHub issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=&projects=&template=Bug_report.md) + +## 📄 License + +The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). diff --git a/packages/client-personalization/api-extractor.json b/packages/client-personalization/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/client-personalization/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/client-personalization/builds/browser.ts b/packages/client-personalization/builds/browser.ts new file mode 100644 index 000000000..bb24e3e05 --- /dev/null +++ b/packages/client-personalization/builds/browser.ts @@ -0,0 +1,65 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import { createXhrRequester } from '@algolia/requester-browser-xhr'; + +import { + createBrowserLocalStorageCache, + createFallbackableCache, + createMemoryCache, + createNullLogger, +} from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { apiClientVersion, createPersonalizationClient } from '../src/personalizationClient'; + +import type { Region } from '../src/personalizationClient'; +import { REGIONS } from '../src/personalizationClient'; + +export type { Region, RegionOptions } from '../src/personalizationClient'; + +export { apiClientVersion } from '../src/personalizationClient'; + +export * from '../model'; + +export function personalizationClient( + appId: string, + apiKey: string, + region: Region, + options?: ClientOptions, +): PersonalizationClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (!region || (region && (typeof region !== 'string' || !REGIONS.includes(region)))) { + throw new Error(`\`region\` is required and must be one of the following: ${REGIONS.join(', ')}`); + } + + return createPersonalizationClient({ + appId, + apiKey, + region, + timeouts: { + connect: 1000, + read: 2000, + write: 30000, + }, + logger: createNullLogger(), + requester: createXhrRequester(), + algoliaAgents: [{ segment: 'Browser' }], + authMode: 'WithinQueryParameters', + responsesCache: createMemoryCache(), + requestsCache: createMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], + }), + ...options, + }); +} + +export type PersonalizationClient = ReturnType; diff --git a/packages/client-personalization/builds/fetch.ts b/packages/client-personalization/builds/fetch.ts new file mode 100644 index 000000000..20205f1f8 --- /dev/null +++ b/packages/client-personalization/builds/fetch.ts @@ -0,0 +1,58 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type PersonalizationClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createPersonalizationClient } from '../src/personalizationClient'; + +import type { Region } from '../src/personalizationClient'; +import { REGIONS } from '../src/personalizationClient'; + +export type { Region, RegionOptions } from '../src/personalizationClient'; + +export { apiClientVersion } from '../src/personalizationClient'; + +export * from '../model'; + +export function personalizationClient( + appId: string, + apiKey: string, + region: Region, + options?: ClientOptions, +): PersonalizationClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (!region || (region && (typeof region !== 'string' || !REGIONS.includes(region)))) { + throw new Error(`\`region\` is required and must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createPersonalizationClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Fetch' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-personalization/builds/node.ts b/packages/client-personalization/builds/node.ts new file mode 100644 index 000000000..73e0aa745 --- /dev/null +++ b/packages/client-personalization/builds/node.ts @@ -0,0 +1,59 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type PersonalizationClient = ReturnType; + +import { createHttpRequester } from '@algolia/requester-node-http'; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createPersonalizationClient } from '../src/personalizationClient'; + +import type { Region } from '../src/personalizationClient'; +import { REGIONS } from '../src/personalizationClient'; + +export type { Region, RegionOptions } from '../src/personalizationClient'; + +export { apiClientVersion } from '../src/personalizationClient'; + +export * from '../model'; + +export function personalizationClient( + appId: string, + apiKey: string, + region: Region, + options?: ClientOptions, +): PersonalizationClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (!region || (region && (typeof region !== 'string' || !REGIONS.includes(region)))) { + throw new Error(`\`region\` is required and must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createPersonalizationClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createHttpRequester(), + algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-personalization/builds/worker.ts b/packages/client-personalization/builds/worker.ts new file mode 100644 index 000000000..45d0cd7c4 --- /dev/null +++ b/packages/client-personalization/builds/worker.ts @@ -0,0 +1,58 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type PersonalizationClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createPersonalizationClient } from '../src/personalizationClient'; + +import type { Region } from '../src/personalizationClient'; +import { REGIONS } from '../src/personalizationClient'; + +export type { Region, RegionOptions } from '../src/personalizationClient'; + +export { apiClientVersion } from '../src/personalizationClient'; + +export * from '../model'; + +export function personalizationClient( + appId: string, + apiKey: string, + region: Region, + options?: ClientOptions, +): PersonalizationClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (!region || (region && (typeof region !== 'string' || !REGIONS.includes(region)))) { + throw new Error(`\`region\` is required and must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createPersonalizationClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Worker' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-personalization/index.d.ts b/packages/client-personalization/index.d.ts new file mode 100644 index 000000000..e81a1cd3e --- /dev/null +++ b/packages/client-personalization/index.d.ts @@ -0,0 +1 @@ +export * from './dist/node'; diff --git a/packages/client-personalization/index.js b/packages/client-personalization/index.js index df07d60ae..21e26aad3 100644 --- a/packages/client-personalization/index.js +++ b/packages/client-personalization/index.js @@ -1,2 +1 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/client-personalization.cjs.js'); +module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/client-personalization/model/clientMethodProps.ts b/packages/client-personalization/model/clientMethodProps.ts new file mode 100644 index 000000000..8e4837444 --- /dev/null +++ b/packages/client-personalization/model/clientMethodProps.ts @@ -0,0 +1,85 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Properties for the `customDelete` method. + */ +export type CustomDeleteProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customGet` method. + */ +export type CustomGetProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customPost` method. + */ +export type CustomPostProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `customPut` method. + */ +export type CustomPutProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `deleteUserProfile` method. + */ +export type DeleteUserProfileProps = { + /** + * Unique identifier representing a user for which to fetch the personalization profile. + */ + userToken: string; +}; + +/** + * Properties for the `getUserTokenProfile` method. + */ +export type GetUserTokenProfileProps = { + /** + * Unique identifier representing a user for which to fetch the personalization profile. + */ + userToken: string; +}; diff --git a/packages/client-personalization/model/deleteUserProfileResponse.ts b/packages/client-personalization/model/deleteUserProfileResponse.ts new file mode 100644 index 000000000..35416a581 --- /dev/null +++ b/packages/client-personalization/model/deleteUserProfileResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DeleteUserProfileResponse = { + /** + * Unique pseudonymous or anonymous user identifier. This helps with analytics and click and conversion events. For more information, see [user token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Date and time when the user profile can be safely considered to be deleted. Any events received after the `deletedUntil` date start a new user profile. + */ + deletedUntil: string; +}; diff --git a/packages/client-personalization/model/errorBase.ts b/packages/client-personalization/model/errorBase.ts new file mode 100644 index 000000000..960e509cb --- /dev/null +++ b/packages/client-personalization/model/errorBase.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Error. + */ +export type ErrorBase = Record & { + message?: string; +}; diff --git a/packages/client-personalization/model/eventType.ts b/packages/client-personalization/model/eventType.ts new file mode 100644 index 000000000..fa07628dd --- /dev/null +++ b/packages/client-personalization/model/eventType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Event type. + */ +export type EventType = 'click' | 'conversion' | 'view'; diff --git a/packages/client-personalization/model/eventsScoring.ts b/packages/client-personalization/model/eventsScoring.ts new file mode 100644 index 000000000..a876e97de --- /dev/null +++ b/packages/client-personalization/model/eventsScoring.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { EventType } from './eventType'; + +export type EventsScoring = { + /** + * Event score. + */ + score: number; + + /** + * Event name. + */ + eventName: string; + + eventType: EventType; +}; diff --git a/packages/client-personalization/model/facetsScoring.ts b/packages/client-personalization/model/facetsScoring.ts new file mode 100644 index 000000000..19ce043c6 --- /dev/null +++ b/packages/client-personalization/model/facetsScoring.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type FacetsScoring = { + /** + * Event score. + */ + score: number; + + /** + * Facet attribute name. + */ + facetName: string; +}; diff --git a/packages/client-personalization/model/getUserTokenResponse.ts b/packages/client-personalization/model/getUserTokenResponse.ts new file mode 100644 index 000000000..e85077c90 --- /dev/null +++ b/packages/client-personalization/model/getUserTokenResponse.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type GetUserTokenResponse = { + /** + * Unique pseudonymous or anonymous user identifier. This helps with analytics and click and conversion events. For more information, see [user token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken: string; + + /** + * Date and time of the last event from this user, in RFC 3339 format. + */ + lastEventAt: string; + + /** + * Scores for different facet values. Scores represent the user affinity for a user profile towards specific facet values, given the personalization strategy and past events. + */ + scores: Record; +}; diff --git a/packages/client-personalization/model/index.ts b/packages/client-personalization/model/index.ts new file mode 100644 index 000000000..6309141c0 --- /dev/null +++ b/packages/client-personalization/model/index.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export * from './clientMethodProps'; +export * from './deleteUserProfileResponse'; +export * from './errorBase'; +export * from './eventsScoring'; +export * from './eventType'; +export * from './facetsScoring'; +export * from './getUserTokenResponse'; +export * from './personalizationStrategyParams'; +export * from './setPersonalizationStrategyResponse'; diff --git a/packages/client-personalization/model/personalizationStrategyParams.ts b/packages/client-personalization/model/personalizationStrategyParams.ts new file mode 100644 index 000000000..3f392c7ad --- /dev/null +++ b/packages/client-personalization/model/personalizationStrategyParams.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { EventsScoring } from './eventsScoring'; +import type { FacetsScoring } from './facetsScoring'; + +export type PersonalizationStrategyParams = { + /** + * Scores associated with each event. The higher the scores, the higher the impact of those events on the personalization of search results. + */ + eventsScoring: Array; + + /** + * Scores associated with each facet. The higher the scores, the higher the impact of those events on the personalization of search results. + */ + facetsScoring: Array; + + /** + * Impact of personalization on the search results. If set to 0, personalization has no impact on the search results. + */ + personalizationImpact: number; +}; diff --git a/packages/client-personalization/model/setPersonalizationStrategyResponse.ts b/packages/client-personalization/model/setPersonalizationStrategyResponse.ts new file mode 100644 index 000000000..82ec49470 --- /dev/null +++ b/packages/client-personalization/model/setPersonalizationStrategyResponse.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SetPersonalizationStrategyResponse = { + /** + * A message confirming the strategy update. + */ + message: string; +}; diff --git a/packages/client-personalization/package.json b/packages/client-personalization/package.json index 5fff4bb72..7afd09d0e 100644 --- a/packages/client-personalization/package.json +++ b/packages/client-personalization/package.json @@ -1,23 +1,68 @@ { - "name": "@algolia/client-personalization", - "version": "4.13.1", - "private": false, + "version": "5.23.3", "repository": { "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/client-personalization#readme", + "type": "module", "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/client-personalization.esm.js", - "types": "dist/client-personalization.d.ts", + "author": "Algolia", + "scripts": { + "build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js", + "clean": "rm -rf ./dist || true", + "test:bundle": "publint . && attw --pack ." + }, + "name": "@algolia/client-personalization", + "description": "JavaScript client for client-personalization", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/builds/node.js", + "module": "./dist/builds/node.js", + "require": "./dist/builds/node.cjs" + }, + "worker": { + "types": "./dist/worker.d.ts", + "default": "./dist/builds/worker.js" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/builds/browser.js", + "import": "./dist/builds/browser.js", + "default": "./dist/builds/browser.umd.js" + } + }, + "./dist/builds/*": "./dist/builds/*.js" + }, + "jsdelivr": "./dist/builds/browser.umd.js", + "unpkg": "./dist/builds/browser.umd.js", + "react-native": "./dist/builds/browser.js", "files": [ + "dist", "index.js", - "dist" + "index.d.ts" ], "dependencies": { - "@algolia/client-common": "4.13.1", - "@algolia/requester-common": "4.13.1", - "@algolia/transporter": "4.13.1" + "@algolia/client-common": "5.23.3", + "@algolia/requester-browser-xhr": "5.23.3", + "@algolia/requester-fetch": "5.23.3", + "@algolia/requester-node-http": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "publint": "0.3.10", + "rollup": "4.39.0", + "tsup": "8.4.0", + "typescript": "5.8.3" + }, + "engines": { + "node": ">= 14.0.0" } } diff --git a/packages/client-personalization/rollup.config.js b/packages/client-personalization/rollup.config.js new file mode 100644 index 000000000..ba6b5a245 --- /dev/null +++ b/packages/client-personalization/rollup.config.js @@ -0,0 +1,17 @@ +export default [ + { + input: 'dist/builds/browser.min.js', + external: ['dom'], + cache: false, + output: { + esModule: false, + file: 'dist/builds/browser.umd.js', + name: '@algolia/client-personalization', + format: 'umd', + sourcemap: false, + globals: { + ['personalizationClient']: 'personalizationClient', + }, + }, + }, +]; diff --git a/packages/client-personalization/src/__tests__/features/personalization-strategy.test.ts b/packages/client-personalization/src/__tests__/features/personalization-strategy.test.ts deleted file mode 100644 index cbb3cefb1..000000000 --- a/packages/client-personalization/src/__tests__/features/personalization-strategy.test.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { PersonalizationStrategy } from '../..'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; -import { SetPersonalizationStrategyResponse } from '../../types'; - -const testSuite = new TestSuite('personalization_strategy'); - -test(testSuite.testName, async () => { - // On the CI, we parallelize too many calls to this endpoint. Making - // the API slow to respond, and reaching a timeout. These specific - // timeouts should ensure the test suite works as expected. - const client = testSuite.makeSearchClient().initRecommendation({ - timeouts: { - connect: 30, - read: 30, - write: 30, - }, - }); - - const personalizationStrategy: PersonalizationStrategy = { - eventsScoring: [ - { - eventName: 'Add to cart', - eventType: 'conversion', - score: 50, - }, - { - eventName: 'Purchase', - eventType: 'conversion', - score: 100, - }, - ], - facetsScoring: [ - { facetName: 'brand', score: 100 }, - { facetName: 'categories', score: 10 }, - ], - personalizationImpact: 0, - }; - - const successResponse: SetPersonalizationStrategyResponse = { - status: 200, - message: 'Strategy was successfully updated', - }; - - const errorResponse: SetPersonalizationStrategyResponse = { - status: 429, - message: 'Number of strategy saves exceeded for the day', - }; - - try { - const response = await client.setPersonalizationStrategy(personalizationStrategy); - expect(response).toEqual(successResponse); - } catch (error) { - // eslint-disable-next-line jest/no-try-expect - expect(error).toEqual(expect.objectContaining({ name: 'ApiError', ...errorResponse })); - } - - await expect(client.getPersonalizationStrategy()).resolves.toEqual(personalizationStrategy); -}); diff --git a/packages/client-personalization/src/__tests__/unit/personalization-client.test.ts b/packages/client-personalization/src/__tests__/unit/personalization-client.test.ts deleted file mode 100644 index 801c27930..000000000 --- a/packages/client-personalization/src/__tests__/unit/personalization-client.test.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { anything, deepEqual, spy, verify, when } from 'ts-mockito'; - -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; -import { PersonalizationStrategy, SetPersonalizationStrategyResponse } from '../../types'; - -const personalizationClient = new TestSuite() - .algoliasearch('appId', 'apiKey') - .initPersonalization(); - -describe('personalization client', () => { - it('uses region to define the host', () => { - expect(personalizationClient.transporter.hosts[0].url).toBe('personalization.us.algolia.com'); - }); - - it('sets default headers', () => { - expect(personalizationClient.transporter.headers).toEqual({ - 'content-type': 'application/json', - 'x-algolia-application-id': 'appId', - 'x-algolia-api-key': 'apiKey', - }); - - expect(personalizationClient.transporter.queryParameters).toEqual({}); - }); -}); - -describe('personalization', () => { - const personalizationStrategy: PersonalizationStrategy = { - eventsScoring: [ - { eventName: 'Add to cart', eventType: 'conversion', score: 50 }, - { eventName: 'Purchase', eventType: 'conversion', score: 100 }, - ], - facetsScoring: [ - { facetName: 'brand', score: 100 }, - { facetName: 'categories', score: 10 }, - ], - personalizationImpact: 0, - }; - - it('set personalization strategy', async () => { - const transporterMock = spy(personalizationClient.transporter); - const response: SetPersonalizationStrategyResponse = { - status: 200, - message: 'Strategy was successfully updated', - }; - when(transporterMock.write(anything(), anything())).thenResolve(response); - - const setPersonalizationStrategyResponse = await personalizationClient.setPersonalizationStrategy( - personalizationStrategy, - { foo: 'bar' } - ); - expect(setPersonalizationStrategyResponse).toEqual(response); - - verify( - transporterMock.write( - deepEqual({ - method: MethodEnum.Post, - path: '1/strategies/personalization', - data: personalizationStrategy, - }), - deepEqual({ foo: 'bar' }) - ) - ).once(); - }); - - it('get personalization strategy', async () => { - const transporterMock = spy(personalizationClient.transporter); - when(transporterMock.read(anything(), anything())).thenResolve(personalizationStrategy); - - const getPersonalizationStrategyResponse = await personalizationClient.getPersonalizationStrategy(); - - verify( - transporterMock.read( - deepEqual({ - method: MethodEnum.Get, - path: '1/strategies/personalization', - }), - anything() - ) - ).once(); - - expect(getPersonalizationStrategyResponse).toEqual(personalizationStrategy); - }); -}); diff --git a/packages/client-personalization/src/createPersonalizationClient.ts b/packages/client-personalization/src/createPersonalizationClient.ts deleted file mode 100644 index 2fc37f4a3..000000000 --- a/packages/client-personalization/src/createPersonalizationClient.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { - addMethods, - AuthMode, - ClientTransporterOptions, - createAuth, - CreateClient, -} from '@algolia/client-common'; -import { createTransporter } from '@algolia/transporter'; - -import { PersonalizationClient, PersonalizationClientOptions } from '.'; - -export const createPersonalizationClient: CreateClient< - PersonalizationClient, - PersonalizationClientOptions & ClientTransporterOptions -> = options => { - const region = options.region || 'us'; - const auth = createAuth(AuthMode.WithinHeaders, options.appId, options.apiKey); - - const transporter = createTransporter({ - hosts: [{ url: `personalization.${region}.algolia.com` }], - ...options, - headers: { - ...auth.headers(), - ...{ 'content-type': 'application/json' }, - ...options.headers, - }, - - queryParameters: { - ...auth.queryParameters(), - ...options.queryParameters, - }, - }); - - return addMethods({ appId: options.appId, transporter }, options.methods); -}; diff --git a/packages/client-personalization/src/index.ts b/packages/client-personalization/src/index.ts deleted file mode 100644 index 18b3a1b76..000000000 --- a/packages/client-personalization/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createPersonalizationClient'; -export * from './methods/index'; -export * from './types/index'; diff --git a/packages/client-personalization/src/methods/getPersonalizationStrategy.ts b/packages/client-personalization/src/methods/getPersonalizationStrategy.ts deleted file mode 100644 index 8a96147d3..000000000 --- a/packages/client-personalization/src/methods/getPersonalizationStrategy.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { GetPersonalizationStrategyResponse, PersonalizationClient } from '..'; - -export const getPersonalizationStrategy = (base: PersonalizationClient) => { - return ( - requestOptions?: RequestOptions - ): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: '1/strategies/personalization', - }, - requestOptions - ); - }; -}; diff --git a/packages/client-personalization/src/methods/index.ts b/packages/client-personalization/src/methods/index.ts deleted file mode 100644 index c64d44a9a..000000000 --- a/packages/client-personalization/src/methods/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './getPersonalizationStrategy'; -export * from './setPersonalizationStrategy'; diff --git a/packages/client-personalization/src/methods/setPersonalizationStrategy.ts b/packages/client-personalization/src/methods/setPersonalizationStrategy.ts deleted file mode 100644 index 846d8c954..000000000 --- a/packages/client-personalization/src/methods/setPersonalizationStrategy.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - PersonalizationClient, - PersonalizationStrategy, - SetPersonalizationStrategyResponse, -} from '..'; - -export const setPersonalizationStrategy = (base: PersonalizationClient) => { - return ( - personalizationStrategy: PersonalizationStrategy, - requestOptions?: RequestOptions - ): Readonly> => { - return base.transporter.write( - { - method: MethodEnum.Post, - path: '1/strategies/personalization', - data: personalizationStrategy, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-personalization/src/personalizationClient.ts b/packages/client-personalization/src/personalizationClient.ts new file mode 100644 index 000000000..6887dd1b8 --- /dev/null +++ b/packages/client-personalization/src/personalizationClient.ts @@ -0,0 +1,372 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { + CreateClientOptions, + Headers, + Host, + QueryParameters, + Request, + RequestOptions, +} from '@algolia/client-common'; +import { createAuth, createTransporter, getAlgoliaAgent } from '@algolia/client-common'; + +import type { DeleteUserProfileResponse } from '../model/deleteUserProfileResponse'; + +import type { GetUserTokenResponse } from '../model/getUserTokenResponse'; +import type { PersonalizationStrategyParams } from '../model/personalizationStrategyParams'; +import type { SetPersonalizationStrategyResponse } from '../model/setPersonalizationStrategyResponse'; + +import type { + CustomDeleteProps, + CustomGetProps, + CustomPostProps, + CustomPutProps, + DeleteUserProfileProps, + GetUserTokenProfileProps, +} from '../model/clientMethodProps'; + +export const apiClientVersion = '5.23.3'; + +export const REGIONS = ['eu', 'us'] as const; +export type Region = (typeof REGIONS)[number]; +export type RegionOptions = { region: Region }; + +function getDefaultHosts(region: Region): Host[] { + const url = 'personalization.{region}.algolia.com'.replace('{region}', region); + + return [{ url, accept: 'readWrite', protocol: 'https' }]; +} + +export function createPersonalizationClient({ + appId: appIdOption, + apiKey: apiKeyOption, + authMode, + algoliaAgents, + region: regionOption, + ...options +}: CreateClientOptions & RegionOptions) { + const auth = createAuth(appIdOption, apiKeyOption, authMode); + const transporter = createTransporter({ + hosts: getDefaultHosts(regionOption), + ...options, + algoliaAgent: getAlgoliaAgent({ + algoliaAgents, + client: 'Personalization', + version: apiClientVersion, + }), + baseHeaders: { + 'content-type': 'text/plain', + ...auth.headers(), + ...options.baseHeaders, + }, + baseQueryParameters: { + ...auth.queryParameters(), + ...options.baseQueryParameters, + }, + }); + + return { + transporter, + + /** + * The `appId` currently in use. + */ + appId: appIdOption, + + /** + * The `apiKey` currently in use. + */ + apiKey: apiKeyOption, + + /** + * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties. + */ + clearCache(): Promise { + return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => undefined); + }, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return transporter.algoliaAgent.value; + }, + + /** + * Adds a `segment` to the `x-algolia-agent` sent with every requests. + * + * @param segment - The algolia agent (user-agent) segment to add. + * @param version - The version of the agent. + */ + addAlgoliaAgent(segment: string, version?: string): void { + transporter.algoliaAgent.add({ segment, version }); + }, + + /** + * Helper method to switch the API key used to authenticate the requests. + * + * @param params - Method params. + * @param params.apiKey - The new API Key to use. + */ + setClientApiKey({ apiKey }: { apiKey: string }): void { + if (!authMode || authMode === 'WithinHeaders') { + transporter.baseHeaders['x-algolia-api-key'] = apiKey; + } else { + transporter.baseQueryParameters['x-algolia-api-key'] = apiKey; + } + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customDelete - The customDelete object. + * @param customDelete.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customDelete.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customDelete( + { path, parameters }: CustomDeleteProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customDelete`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customGet - The customGet object. + * @param customGet.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customGet.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customGet({ path, parameters }: CustomGetProps, requestOptions?: RequestOptions): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customGet`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPost - The customPost object. + * @param customPost.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPost.parameters - Query parameters to apply to the current query. + * @param customPost.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPost( + { path, parameters, body }: CustomPostProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPost`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPut - The customPut object. + * @param customPut.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPut.parameters - Query parameters to apply to the current query. + * @param customPut.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPut( + { path, parameters, body }: CustomPutProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPut`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes a user profile. The response includes a date and time when the user profile can safely be considered deleted. + * + * Required API Key ACLs: + * - recommendation + * @param deleteUserProfile - The deleteUserProfile object. + * @param deleteUserProfile.userToken - Unique identifier representing a user for which to fetch the personalization profile. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteUserProfile( + { userToken }: DeleteUserProfileProps, + requestOptions?: RequestOptions, + ): Promise { + if (!userToken) { + throw new Error('Parameter `userToken` is required when calling `deleteUserProfile`.'); + } + + const requestPath = '/1/profiles/{userToken}'.replace('{userToken}', encodeURIComponent(userToken)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the current personalization strategy. + * + * Required API Key ACLs: + * - recommendation + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getPersonalizationStrategy(requestOptions?: RequestOptions): Promise { + const requestPath = '/1/strategies/personalization'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a user profile and their affinities for different facets. + * + * Required API Key ACLs: + * - recommendation + * @param getUserTokenProfile - The getUserTokenProfile object. + * @param getUserTokenProfile.userToken - Unique identifier representing a user for which to fetch the personalization profile. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getUserTokenProfile( + { userToken }: GetUserTokenProfileProps, + requestOptions?: RequestOptions, + ): Promise { + if (!userToken) { + throw new Error('Parameter `userToken` is required when calling `getUserTokenProfile`.'); + } + + const requestPath = '/1/profiles/personalization/{userToken}'.replace( + '{userToken}', + encodeURIComponent(userToken), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Creates a new personalization strategy. + * + * Required API Key ACLs: + * - recommendation + * @param personalizationStrategyParams - The personalizationStrategyParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + setPersonalizationStrategy( + personalizationStrategyParams: PersonalizationStrategyParams, + requestOptions?: RequestOptions, + ): Promise { + if (!personalizationStrategyParams) { + throw new Error( + 'Parameter `personalizationStrategyParams` is required when calling `setPersonalizationStrategy`.', + ); + } + + if (!personalizationStrategyParams.eventsScoring) { + throw new Error( + 'Parameter `personalizationStrategyParams.eventsScoring` is required when calling `setPersonalizationStrategy`.', + ); + } + if (!personalizationStrategyParams.facetsScoring) { + throw new Error( + 'Parameter `personalizationStrategyParams.facetsScoring` is required when calling `setPersonalizationStrategy`.', + ); + } + if (!personalizationStrategyParams.personalizationImpact) { + throw new Error( + 'Parameter `personalizationStrategyParams.personalizationImpact` is required when calling `setPersonalizationStrategy`.', + ); + } + + const requestPath = '/1/strategies/personalization'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: personalizationStrategyParams, + }; + + return transporter.request(request, requestOptions); + }, + }; +} diff --git a/packages/client-personalization/src/types/GetPersonalizationStrategyResponse.ts b/packages/client-personalization/src/types/GetPersonalizationStrategyResponse.ts deleted file mode 100644 index d0ae3b865..000000000 --- a/packages/client-personalization/src/types/GetPersonalizationStrategyResponse.ts +++ /dev/null @@ -1,23 +0,0 @@ -export type GetPersonalizationStrategyResponse = { - /** - * Events scoring - */ - eventsScoring: Array<{ - eventName: string; - eventType: string; - score: number; - }>; - - /** - * Facets scoring - */ - facetsScoring: Array<{ - facetName: string; - score: number; - }>; - - /** - * Personalization impact - */ - personalizationImpact: number; -}; diff --git a/packages/client-personalization/src/types/PersonalizationClient.ts b/packages/client-personalization/src/types/PersonalizationClient.ts deleted file mode 100644 index 87235c140..000000000 --- a/packages/client-personalization/src/types/PersonalizationClient.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Transporter } from '@algolia/transporter'; - -export type PersonalizationClient = { - /** - * The application id. - */ - readonly appId: string; - - /** - * The underlying transporter. - */ - readonly transporter: Transporter; -}; diff --git a/packages/client-personalization/src/types/PersonalizationClientOptions.ts b/packages/client-personalization/src/types/PersonalizationClientOptions.ts deleted file mode 100644 index 6539401df..000000000 --- a/packages/client-personalization/src/types/PersonalizationClientOptions.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type PersonalizationClientOptions = { - /** - * The application id. - */ - readonly appId: string; - - /** - * The api key. - */ - readonly apiKey: string; - - /** - * The prefered region. - */ - readonly region?: string; -}; diff --git a/packages/client-personalization/src/types/PersonalizationStrategy.ts b/packages/client-personalization/src/types/PersonalizationStrategy.ts deleted file mode 100644 index 4af503cdc..000000000 --- a/packages/client-personalization/src/types/PersonalizationStrategy.ts +++ /dev/null @@ -1,23 +0,0 @@ -export type PersonalizationStrategy = { - /** - * Events scoring - */ - readonly eventsScoring: ReadonlyArray<{ - readonly eventName: string; - readonly eventType: string; - readonly score: number; - }>; - - /** - * Facets scoring - */ - readonly facetsScoring: ReadonlyArray<{ - readonly facetName: string; - readonly score: number; - }>; - - /** - * Personalization impact - */ - readonly personalizationImpact: number; -}; diff --git a/packages/client-personalization/src/types/SetPersonalizationStrategyResponse.ts b/packages/client-personalization/src/types/SetPersonalizationStrategyResponse.ts deleted file mode 100644 index f005b29c8..000000000 --- a/packages/client-personalization/src/types/SetPersonalizationStrategyResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type SetPersonalizationStrategyResponse = { - /** - * The status code. - */ - status?: number; - - /** - * The message. - */ - message: string; -}; diff --git a/packages/client-personalization/src/types/index.ts b/packages/client-personalization/src/types/index.ts deleted file mode 100644 index 6ce567858..000000000 --- a/packages/client-personalization/src/types/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './GetPersonalizationStrategyResponse'; -export * from './PersonalizationClient'; -export * from './PersonalizationClientOptions'; -export * from './PersonalizationStrategy'; -export * from './SetPersonalizationStrategyResponse'; diff --git a/packages/client-personalization/tsconfig.json b/packages/client-personalization/tsconfig.json new file mode 100644 index 000000000..444e8bb64 --- /dev/null +++ b/packages/client-personalization/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src", "model", "builds"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/client-personalization/tsup.config.ts b/packages/client-personalization/tsup.config.ts new file mode 100644 index 000000000..157bf50b4 --- /dev/null +++ b/packages/client-personalization/tsup.config.ts @@ -0,0 +1,67 @@ +import type { Options } from 'tsup'; +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions, getDependencies } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +const nodeOptions: Options = { + ...getBaseNodeOptions(pkg, __dirname), + dts: { entry: { node: 'builds/node.ts' } }, + entry: ['builds/node.ts', 'src/*.ts'], +}; + +const nodeConfigs: Options[] = [ + { + ...nodeOptions, + format: 'cjs', + name: `node ${pkg.name} cjs`, + }, + { + ...nodeOptions, + format: 'esm', + name: `node ${pkg.name} esm`, + }, + { + ...nodeOptions, + format: 'esm', + name: `fetch ${pkg.name} esm`, + dts: { entry: { fetch: 'builds/fetch.ts' } }, + external: getDependencies(pkg, 'fetch'), + entry: ['builds/fetch.ts', 'src/*.ts'], + }, + { + ...nodeOptions, + format: 'esm', + name: `worker ${pkg.name} esm`, + dts: { entry: { worker: 'builds/worker.ts' } }, + external: getDependencies(pkg, 'worker'), + entry: ['builds/worker.ts', 'src/*.ts'], + }, +]; + +const browserOptions: Options = { + ...getBaseBrowserOptions(pkg, __dirname), + globalName: 'personalizationClient', +}; + +const browserConfigs: Options[] = [ + { + ...browserOptions, + minify: false, + name: `browser ${pkg.name} esm`, + dts: { entry: { browser: 'builds/browser.ts' } }, + entry: ['builds/browser.ts', 'src/*.ts'], + }, + { + ...browserOptions, + dts: false, + minify: true, + name: `browser ${pkg.name} min esm`, + entry: { 'builds/browser.min': 'builds/browser.ts' }, + external: [], + noExternal: getDependencies(pkg, 'xhr'), + }, +]; + +export default defineConfig([...nodeConfigs, ...browserConfigs]); diff --git a/packages/client-query-suggestions/LICENSE b/packages/client-query-suggestions/LICENSE new file mode 100644 index 000000000..fddf416f9 --- /dev/null +++ b/packages/client-query-suggestions/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-Present Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/client-query-suggestions/README.md b/packages/client-query-suggestions/README.md new file mode 100644 index 000000000..3d376dc3d --- /dev/null +++ b/packages/client-query-suggestions/README.md @@ -0,0 +1,77 @@ +

+ + Algolia for JavaScript + + +

The perfect starting point to integrate Algolia within your JavaScript project

+ +

+ NPM version + NPM downloads + jsDelivr Downloads + License +

+

+ +

+ Documentation • + InstantSearch • + Community Forum • + Stack Overflow • + Report a bug • + FAQ • + Support +

+ +## ✨ Features + +- Thin & **minimal low-level HTTP client** to interact with Algolia's API +- Works both on the **browser** and **node.js** +- **UMD and ESM compatible**, you can use it with any module loader +- Built with TypeScript + +## 💡 Getting Started + +> [!TIP] +> This API client is already a dependency of [the algoliasearch client](https://www.npmjs.com/package/algoliasearch), you don't need to manually install `@algolia/client-query-suggestions` if you already have `algoliasearch` installed. + +To get started, you first need to install @algolia/client-query-suggestions (or any other available API client package). +All of our clients comes with type definition, and are available for both browser and node environments. + +### With a package manager + +```bash +yarn add @algolia/client-query-suggestions@5.23.3 +# or +npm install @algolia/client-query-suggestions@5.23.3 +# or +pnpm add @algolia/client-query-suggestions@5.23.3 +``` + +### Without a package manager + +Add the following JavaScript snippet to the of your website: + +```html + +``` + +### Usage + +You can now import the Algolia API client in your project and play with it. + +```js +import { querySuggestionsClient } from '@algolia/client-query-suggestions'; + +const client = querySuggestionsClient('YOUR_APP_ID', 'YOUR_API_KEY'); +``` + +For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/javascript/v5/methods/query-suggestions/)**. + +## ❓ Troubleshooting + +Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/libraries/javascript/v5/) where you will find answers for the most common issues and gotchas with the client. You can also open [a GitHub issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=&projects=&template=Bug_report.md) + +## 📄 License + +The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). diff --git a/packages/client-query-suggestions/builds/browser.ts b/packages/client-query-suggestions/builds/browser.ts new file mode 100644 index 000000000..72613a976 --- /dev/null +++ b/packages/client-query-suggestions/builds/browser.ts @@ -0,0 +1,65 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import { createXhrRequester } from '@algolia/requester-browser-xhr'; + +import { + createBrowserLocalStorageCache, + createFallbackableCache, + createMemoryCache, + createNullLogger, +} from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { apiClientVersion, createQuerySuggestionsClient } from '../src/querySuggestionsClient'; + +import type { Region } from '../src/querySuggestionsClient'; +import { REGIONS } from '../src/querySuggestionsClient'; + +export type { Region, RegionOptions } from '../src/querySuggestionsClient'; + +export { apiClientVersion } from '../src/querySuggestionsClient'; + +export * from '../model'; + +export function querySuggestionsClient( + appId: string, + apiKey: string, + region: Region, + options?: ClientOptions, +): QuerySuggestionsClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (!region || (region && (typeof region !== 'string' || !REGIONS.includes(region)))) { + throw new Error(`\`region\` is required and must be one of the following: ${REGIONS.join(', ')}`); + } + + return createQuerySuggestionsClient({ + appId, + apiKey, + region, + timeouts: { + connect: 1000, + read: 2000, + write: 30000, + }, + logger: createNullLogger(), + requester: createXhrRequester(), + algoliaAgents: [{ segment: 'Browser' }], + authMode: 'WithinQueryParameters', + responsesCache: createMemoryCache(), + requestsCache: createMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], + }), + ...options, + }); +} + +export type QuerySuggestionsClient = ReturnType; diff --git a/packages/client-query-suggestions/builds/fetch.ts b/packages/client-query-suggestions/builds/fetch.ts new file mode 100644 index 000000000..08d1572a2 --- /dev/null +++ b/packages/client-query-suggestions/builds/fetch.ts @@ -0,0 +1,58 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type QuerySuggestionsClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createQuerySuggestionsClient } from '../src/querySuggestionsClient'; + +import type { Region } from '../src/querySuggestionsClient'; +import { REGIONS } from '../src/querySuggestionsClient'; + +export type { Region, RegionOptions } from '../src/querySuggestionsClient'; + +export { apiClientVersion } from '../src/querySuggestionsClient'; + +export * from '../model'; + +export function querySuggestionsClient( + appId: string, + apiKey: string, + region: Region, + options?: ClientOptions, +): QuerySuggestionsClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (!region || (region && (typeof region !== 'string' || !REGIONS.includes(region)))) { + throw new Error(`\`region\` is required and must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createQuerySuggestionsClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Fetch' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-query-suggestions/builds/node.ts b/packages/client-query-suggestions/builds/node.ts new file mode 100644 index 000000000..7bf473d13 --- /dev/null +++ b/packages/client-query-suggestions/builds/node.ts @@ -0,0 +1,59 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type QuerySuggestionsClient = ReturnType; + +import { createHttpRequester } from '@algolia/requester-node-http'; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createQuerySuggestionsClient } from '../src/querySuggestionsClient'; + +import type { Region } from '../src/querySuggestionsClient'; +import { REGIONS } from '../src/querySuggestionsClient'; + +export type { Region, RegionOptions } from '../src/querySuggestionsClient'; + +export { apiClientVersion } from '../src/querySuggestionsClient'; + +export * from '../model'; + +export function querySuggestionsClient( + appId: string, + apiKey: string, + region: Region, + options?: ClientOptions, +): QuerySuggestionsClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (!region || (region && (typeof region !== 'string' || !REGIONS.includes(region)))) { + throw new Error(`\`region\` is required and must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createQuerySuggestionsClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createHttpRequester(), + algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-query-suggestions/builds/worker.ts b/packages/client-query-suggestions/builds/worker.ts new file mode 100644 index 000000000..52e33dba3 --- /dev/null +++ b/packages/client-query-suggestions/builds/worker.ts @@ -0,0 +1,58 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type QuerySuggestionsClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createQuerySuggestionsClient } from '../src/querySuggestionsClient'; + +import type { Region } from '../src/querySuggestionsClient'; +import { REGIONS } from '../src/querySuggestionsClient'; + +export type { Region, RegionOptions } from '../src/querySuggestionsClient'; + +export { apiClientVersion } from '../src/querySuggestionsClient'; + +export * from '../model'; + +export function querySuggestionsClient( + appId: string, + apiKey: string, + region: Region, + options?: ClientOptions, +): QuerySuggestionsClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (!region || (region && (typeof region !== 'string' || !REGIONS.includes(region)))) { + throw new Error(`\`region\` is required and must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createQuerySuggestionsClient({ + appId, + apiKey, + region, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Worker' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/client-query-suggestions/index.d.ts b/packages/client-query-suggestions/index.d.ts new file mode 100644 index 000000000..e81a1cd3e --- /dev/null +++ b/packages/client-query-suggestions/index.d.ts @@ -0,0 +1 @@ +export * from './dist/node'; diff --git a/packages/client-query-suggestions/index.js b/packages/client-query-suggestions/index.js new file mode 100644 index 000000000..21e26aad3 --- /dev/null +++ b/packages/client-query-suggestions/index.js @@ -0,0 +1 @@ +module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/client-query-suggestions/model/appID.ts b/packages/client-query-suggestions/model/appID.ts new file mode 100644 index 000000000..3ceb7fa67 --- /dev/null +++ b/packages/client-query-suggestions/model/appID.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AppID = { + /** + * Algolia application ID to which this Query Suggestions configuration belongs. + */ + appID?: string; +}; diff --git a/packages/client-query-suggestions/model/baseResponse.ts b/packages/client-query-suggestions/model/baseResponse.ts new file mode 100644 index 000000000..56940c2fa --- /dev/null +++ b/packages/client-query-suggestions/model/baseResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BaseResponse = { + /** + * HTTP status code. + */ + status?: number; + + /** + * Details about the response, such as error messages. + */ + message?: string; +}; diff --git a/packages/client-query-suggestions/model/clientMethodProps.ts b/packages/client-query-suggestions/model/clientMethodProps.ts new file mode 100644 index 000000000..de6b9ef3a --- /dev/null +++ b/packages/client-query-suggestions/model/clientMethodProps.ts @@ -0,0 +1,118 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Configuration } from '../model/configuration'; + +/** + * Properties for the `customDelete` method. + */ +export type CustomDeleteProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customGet` method. + */ +export type CustomGetProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customPost` method. + */ +export type CustomPostProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `customPut` method. + */ +export type CustomPutProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `deleteConfig` method. + */ +export type DeleteConfigProps = { + /** + * Query Suggestions index name. + */ + indexName: string; +}; + +/** + * Properties for the `getConfig` method. + */ +export type GetConfigProps = { + /** + * Query Suggestions index name. + */ + indexName: string; +}; + +/** + * Properties for the `getConfigStatus` method. + */ +export type GetConfigStatusProps = { + /** + * Query Suggestions index name. + */ + indexName: string; +}; + +/** + * Properties for the `getLogFile` method. + */ +export type GetLogFileProps = { + /** + * Query Suggestions index name. + */ + indexName: string; +}; + +/** + * Properties for the `updateConfig` method. + */ +export type UpdateConfigProps = { + /** + * Query Suggestions index name. + */ + indexName: string; + configuration: Configuration; +}; diff --git a/packages/client-query-suggestions/model/configStatus.ts b/packages/client-query-suggestions/model/configStatus.ts new file mode 100644 index 000000000..f3a3adfc5 --- /dev/null +++ b/packages/client-query-suggestions/model/configStatus.ts @@ -0,0 +1,28 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type ConfigStatus = { + /** + * Name of the Query Suggestions index (case-sensitive). + */ + indexName?: string; + + /** + * Whether the creation or update of the Query Suggestions index is in progress. + */ + isRunning?: boolean; + + /** + * Date and time when the Query Suggestions index was last built, in RFC 3339 format. + */ + lastBuiltAt?: string; + + /** + * Date and time when the Query Suggestions index was last updated successfully. + */ + lastSuccessfulBuiltAt?: string; + + /** + * Duration of the last successful build in seconds. + */ + lastSuccessfulBuildDuration?: string; +}; diff --git a/packages/client-query-suggestions/model/configuration.ts b/packages/client-query-suggestions/model/configuration.ts new file mode 100644 index 000000000..c102a484c --- /dev/null +++ b/packages/client-query-suggestions/model/configuration.ts @@ -0,0 +1,28 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Languages } from './languages'; +import type { SourceIndex } from './sourceIndex'; + +/** + * Query Suggestions configuration. + */ +export type Configuration = { + /** + * Algolia indices from which to get the popular searches for query suggestions. + */ + sourceIndices: Array; + + languages?: Languages; + + exclude?: Array | null; + + /** + * Whether to turn on personalized query suggestions. + */ + enablePersonalization?: boolean; + + /** + * Whether to include suggestions with special characters. + */ + allowSpecialCharacters?: boolean; +}; diff --git a/packages/client-query-suggestions/model/configurationResponse.ts b/packages/client-query-suggestions/model/configurationResponse.ts new file mode 100644 index 000000000..fd8e56ff4 --- /dev/null +++ b/packages/client-query-suggestions/model/configurationResponse.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AppID } from './appID'; +import type { ConfigurationWithIndex } from './configurationWithIndex'; + +/** + * API response for retrieving Query Suggestions configurations. + */ +export type ConfigurationResponse = AppID & ConfigurationWithIndex; diff --git a/packages/client-query-suggestions/model/configurationWithIndex.ts b/packages/client-query-suggestions/model/configurationWithIndex.ts new file mode 100644 index 000000000..edf4222f2 --- /dev/null +++ b/packages/client-query-suggestions/model/configurationWithIndex.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Configuration } from './configuration'; + +/** + * Query Suggestions configuration. + */ +export type ConfigurationWithIndex = Record & Configuration; diff --git a/packages/client-query-suggestions/model/errorBase.ts b/packages/client-query-suggestions/model/errorBase.ts new file mode 100644 index 000000000..960e509cb --- /dev/null +++ b/packages/client-query-suggestions/model/errorBase.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Error. + */ +export type ErrorBase = Record & { + message?: string; +}; diff --git a/packages/client-query-suggestions/model/facet.ts b/packages/client-query-suggestions/model/facet.ts new file mode 100644 index 000000000..09a1e7c6e --- /dev/null +++ b/packages/client-query-suggestions/model/facet.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Facet to use as category. + */ +export type Facet = { + /** + * Facet name. + */ + attribute?: string; + + /** + * Number of suggestions. + */ + amount?: number; +}; diff --git a/packages/client-query-suggestions/model/index.ts b/packages/client-query-suggestions/model/index.ts new file mode 100644 index 000000000..a2759212b --- /dev/null +++ b/packages/client-query-suggestions/model/index.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export * from './appID'; +export * from './baseResponse'; +export * from './clientMethodProps'; +export * from './configStatus'; +export * from './configuration'; +export * from './configurationResponse'; +export * from './configurationWithIndex'; +export * from './errorBase'; +export * from './facet'; +export * from './languages'; +export * from './logFile'; +export * from './logLevel'; +export * from './sourceIndex'; diff --git a/packages/client-query-suggestions/model/languages.ts b/packages/client-query-suggestions/model/languages.ts new file mode 100644 index 000000000..60a171543 --- /dev/null +++ b/packages/client-query-suggestions/model/languages.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Languages for deduplicating singular and plural suggestions. If specified, only the more popular form is included. + */ +export type Languages = Array | boolean; diff --git a/packages/client-query-suggestions/model/logFile.ts b/packages/client-query-suggestions/model/logFile.ts new file mode 100644 index 000000000..352735228 --- /dev/null +++ b/packages/client-query-suggestions/model/logFile.ts @@ -0,0 +1,22 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { LogLevel } from './logLevel'; + +export type LogFile = { + /** + * Date and time of the log entry, in RFC 3339 format. + */ + timestamp?: string; + + level?: LogLevel; + + /** + * Details about this log entry. + */ + message?: string; + + /** + * Level indicating the position of a suggestion in a hierarchy of records. For example, a `contextLevel` of 1 indicates that this suggestion belongs to a previous suggestion with `contextLevel` 0. + */ + contextLevel?: number; +}; diff --git a/packages/client-query-suggestions/model/logLevel.ts b/packages/client-query-suggestions/model/logLevel.ts new file mode 100644 index 000000000..59f1e013b --- /dev/null +++ b/packages/client-query-suggestions/model/logLevel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Type of log entry. - `SKIP`. A query is skipped because it doesn\'t match the conditions for successful inclusion. For example, when a query doesn\'t generate enough search results. - `INFO`. An informative log entry. - `ERROR`. The Query Suggestions process encountered an error. + */ +export type LogLevel = 'SKIP' | 'INFO' | 'ERROR'; diff --git a/packages/client-query-suggestions/model/sourceIndex.ts b/packages/client-query-suggestions/model/sourceIndex.ts new file mode 100644 index 000000000..bf47fcd6d --- /dev/null +++ b/packages/client-query-suggestions/model/sourceIndex.ts @@ -0,0 +1,36 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Facet } from './facet'; + +/** + * Configuration of an Algolia index for Query Suggestions. + */ +export type SourceIndex = { + /** + * Name of the Algolia index (case-sensitive) to use as source for query suggestions. + */ + indexName: string; + + /** + * If true, Query Suggestions uses all replica indices to find popular searches. If false, only the primary index is used. + */ + replicas?: boolean; + + analyticsTags?: Array | null; + + facets?: Array | null; + + /** + * Minimum number of hits required to be included as a suggestion. A search query must at least generate `minHits` search results to be included in the Query Suggestions index. + */ + minHits?: number; + + /** + * Minimum letters required to be included as a suggestion. A search query must be at least `minLetters` long to be included in the Query Suggestions index. + */ + minLetters?: number; + + generate?: Array> | null; + + external?: Array | null; +}; diff --git a/packages/client-query-suggestions/package.json b/packages/client-query-suggestions/package.json new file mode 100644 index 000000000..19023754c --- /dev/null +++ b/packages/client-query-suggestions/package.json @@ -0,0 +1,68 @@ +{ + "version": "5.23.3", + "repository": { + "type": "git", + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/client-query-suggestions#readme", + "type": "module", + "license": "MIT", + "author": "Algolia", + "scripts": { + "build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js", + "clean": "rm -rf ./dist || true", + "test:bundle": "publint . && attw --pack ." + }, + "name": "@algolia/client-query-suggestions", + "description": "JavaScript client for client-query-suggestions", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/builds/node.js", + "module": "./dist/builds/node.js", + "require": "./dist/builds/node.cjs" + }, + "worker": { + "types": "./dist/worker.d.ts", + "default": "./dist/builds/worker.js" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/builds/browser.js", + "import": "./dist/builds/browser.js", + "default": "./dist/builds/browser.umd.js" + } + }, + "./dist/builds/*": "./dist/builds/*.js" + }, + "jsdelivr": "./dist/builds/browser.umd.js", + "unpkg": "./dist/builds/browser.umd.js", + "react-native": "./dist/builds/browser.js", + "files": [ + "dist", + "index.js", + "index.d.ts" + ], + "dependencies": { + "@algolia/client-common": "5.23.3", + "@algolia/requester-browser-xhr": "5.23.3", + "@algolia/requester-fetch": "5.23.3", + "@algolia/requester-node-http": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "publint": "0.3.10", + "rollup": "4.39.0", + "tsup": "8.4.0", + "typescript": "5.8.3" + }, + "engines": { + "node": ">= 14.0.0" + } +} diff --git a/packages/client-query-suggestions/rollup.config.js b/packages/client-query-suggestions/rollup.config.js new file mode 100644 index 000000000..30b6553c9 --- /dev/null +++ b/packages/client-query-suggestions/rollup.config.js @@ -0,0 +1,17 @@ +export default [ + { + input: 'dist/builds/browser.min.js', + external: ['dom'], + cache: false, + output: { + esModule: false, + file: 'dist/builds/browser.umd.js', + name: '@algolia/client-query-suggestions', + format: 'umd', + sourcemap: false, + globals: { + ['querySuggestionsClient']: 'querySuggestionsClient', + }, + }, + }, +]; diff --git a/packages/client-query-suggestions/src/querySuggestionsClient.ts b/packages/client-query-suggestions/src/querySuggestionsClient.ts new file mode 100644 index 000000000..917a09fad --- /dev/null +++ b/packages/client-query-suggestions/src/querySuggestionsClient.ts @@ -0,0 +1,447 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { + CreateClientOptions, + Headers, + Host, + QueryParameters, + Request, + RequestOptions, +} from '@algolia/client-common'; +import { createAuth, createTransporter, getAlgoliaAgent } from '@algolia/client-common'; + +import type { BaseResponse } from '../model/baseResponse'; +import type { ConfigStatus } from '../model/configStatus'; + +import type { ConfigurationResponse } from '../model/configurationResponse'; +import type { ConfigurationWithIndex } from '../model/configurationWithIndex'; + +import type { LogFile } from '../model/logFile'; + +import type { + CustomDeleteProps, + CustomGetProps, + CustomPostProps, + CustomPutProps, + DeleteConfigProps, + GetConfigProps, + GetConfigStatusProps, + GetLogFileProps, + UpdateConfigProps, +} from '../model/clientMethodProps'; + +export const apiClientVersion = '5.23.3'; + +export const REGIONS = ['eu', 'us'] as const; +export type Region = (typeof REGIONS)[number]; +export type RegionOptions = { region: Region }; + +function getDefaultHosts(region: Region): Host[] { + const url = 'query-suggestions.{region}.algolia.com'.replace('{region}', region); + + return [{ url, accept: 'readWrite', protocol: 'https' }]; +} + +export function createQuerySuggestionsClient({ + appId: appIdOption, + apiKey: apiKeyOption, + authMode, + algoliaAgents, + region: regionOption, + ...options +}: CreateClientOptions & RegionOptions) { + const auth = createAuth(appIdOption, apiKeyOption, authMode); + const transporter = createTransporter({ + hosts: getDefaultHosts(regionOption), + ...options, + algoliaAgent: getAlgoliaAgent({ + algoliaAgents, + client: 'QuerySuggestions', + version: apiClientVersion, + }), + baseHeaders: { + 'content-type': 'text/plain', + ...auth.headers(), + ...options.baseHeaders, + }, + baseQueryParameters: { + ...auth.queryParameters(), + ...options.baseQueryParameters, + }, + }); + + return { + transporter, + + /** + * The `appId` currently in use. + */ + appId: appIdOption, + + /** + * The `apiKey` currently in use. + */ + apiKey: apiKeyOption, + + /** + * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties. + */ + clearCache(): Promise { + return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => undefined); + }, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return transporter.algoliaAgent.value; + }, + + /** + * Adds a `segment` to the `x-algolia-agent` sent with every requests. + * + * @param segment - The algolia agent (user-agent) segment to add. + * @param version - The version of the agent. + */ + addAlgoliaAgent(segment: string, version?: string): void { + transporter.algoliaAgent.add({ segment, version }); + }, + + /** + * Helper method to switch the API key used to authenticate the requests. + * + * @param params - Method params. + * @param params.apiKey - The new API Key to use. + */ + setClientApiKey({ apiKey }: { apiKey: string }): void { + if (!authMode || authMode === 'WithinHeaders') { + transporter.baseHeaders['x-algolia-api-key'] = apiKey; + } else { + transporter.baseQueryParameters['x-algolia-api-key'] = apiKey; + } + }, + + /** + * Creates a new Query Suggestions configuration. You can have up to 100 configurations per Algolia application. + * + * Required API Key ACLs: + * - editSettings + * @param configurationWithIndex - The configurationWithIndex object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + createConfig( + configurationWithIndex: ConfigurationWithIndex, + requestOptions?: RequestOptions, + ): Promise { + if (!configurationWithIndex) { + throw new Error('Parameter `configurationWithIndex` is required when calling `createConfig`.'); + } + + const requestPath = '/1/configs'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: configurationWithIndex, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customDelete - The customDelete object. + * @param customDelete.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customDelete.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customDelete( + { path, parameters }: CustomDeleteProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customDelete`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customGet - The customGet object. + * @param customGet.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customGet.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customGet({ path, parameters }: CustomGetProps, requestOptions?: RequestOptions): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customGet`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPost - The customPost object. + * @param customPost.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPost.parameters - Query parameters to apply to the current query. + * @param customPost.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPost( + { path, parameters, body }: CustomPostProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPost`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPut - The customPut object. + * @param customPut.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPut.parameters - Query parameters to apply to the current query. + * @param customPut.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPut( + { path, parameters, body }: CustomPutProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPut`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes a Query Suggestions configuration. Deleting only removes the configuration and stops updates to the Query Suggestions index. To delete the Query Suggestions index itself, use the Search API and the `Delete an index` operation. + * + * Required API Key ACLs: + * - editSettings + * @param deleteConfig - The deleteConfig object. + * @param deleteConfig.indexName - Query Suggestions index name. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteConfig({ indexName }: DeleteConfigProps, requestOptions?: RequestOptions): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `deleteConfig`.'); + } + + const requestPath = '/1/configs/{indexName}'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves all Query Suggestions configurations of your Algolia application. + * + * Required API Key ACLs: + * - settings + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getAllConfigs(requestOptions?: RequestOptions): Promise> { + const requestPath = '/1/configs'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a single Query Suggestions configuration by its index name. + * + * Required API Key ACLs: + * - settings + * @param getConfig - The getConfig object. + * @param getConfig.indexName - Query Suggestions index name. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getConfig({ indexName }: GetConfigProps, requestOptions?: RequestOptions): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `getConfig`.'); + } + + const requestPath = '/1/configs/{indexName}'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Reports the status of a Query Suggestions index. + * + * Required API Key ACLs: + * - settings + * @param getConfigStatus - The getConfigStatus object. + * @param getConfigStatus.indexName - Query Suggestions index name. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getConfigStatus({ indexName }: GetConfigStatusProps, requestOptions?: RequestOptions): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `getConfigStatus`.'); + } + + const requestPath = '/1/configs/{indexName}/status'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the logs for a single Query Suggestions index. + * + * Required API Key ACLs: + * - settings + * @param getLogFile - The getLogFile object. + * @param getLogFile.indexName - Query Suggestions index name. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getLogFile({ indexName }: GetLogFileProps, requestOptions?: RequestOptions): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `getLogFile`.'); + } + + const requestPath = '/1/logs/{indexName}'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Updates a QuerySuggestions configuration. + * + * Required API Key ACLs: + * - editSettings + * @param updateConfig - The updateConfig object. + * @param updateConfig.indexName - Query Suggestions index name. + * @param updateConfig.configuration - The configuration object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + updateConfig( + { indexName, configuration }: UpdateConfigProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `updateConfig`.'); + } + + if (!configuration) { + throw new Error('Parameter `configuration` is required when calling `updateConfig`.'); + } + + if (!configuration.sourceIndices) { + throw new Error('Parameter `configuration.sourceIndices` is required when calling `updateConfig`.'); + } + + const requestPath = '/1/configs/{indexName}'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: configuration, + }; + + return transporter.request(request, requestOptions); + }, + }; +} diff --git a/packages/client-query-suggestions/tsconfig.json b/packages/client-query-suggestions/tsconfig.json new file mode 100644 index 000000000..444e8bb64 --- /dev/null +++ b/packages/client-query-suggestions/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src", "model", "builds"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/client-query-suggestions/tsup.config.ts b/packages/client-query-suggestions/tsup.config.ts new file mode 100644 index 000000000..ecf741c41 --- /dev/null +++ b/packages/client-query-suggestions/tsup.config.ts @@ -0,0 +1,67 @@ +import type { Options } from 'tsup'; +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions, getDependencies } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +const nodeOptions: Options = { + ...getBaseNodeOptions(pkg, __dirname), + dts: { entry: { node: 'builds/node.ts' } }, + entry: ['builds/node.ts', 'src/*.ts'], +}; + +const nodeConfigs: Options[] = [ + { + ...nodeOptions, + format: 'cjs', + name: `node ${pkg.name} cjs`, + }, + { + ...nodeOptions, + format: 'esm', + name: `node ${pkg.name} esm`, + }, + { + ...nodeOptions, + format: 'esm', + name: `fetch ${pkg.name} esm`, + dts: { entry: { fetch: 'builds/fetch.ts' } }, + external: getDependencies(pkg, 'fetch'), + entry: ['builds/fetch.ts', 'src/*.ts'], + }, + { + ...nodeOptions, + format: 'esm', + name: `worker ${pkg.name} esm`, + dts: { entry: { worker: 'builds/worker.ts' } }, + external: getDependencies(pkg, 'worker'), + entry: ['builds/worker.ts', 'src/*.ts'], + }, +]; + +const browserOptions: Options = { + ...getBaseBrowserOptions(pkg, __dirname), + globalName: 'querySuggestionsClient', +}; + +const browserConfigs: Options[] = [ + { + ...browserOptions, + minify: false, + name: `browser ${pkg.name} esm`, + dts: { entry: { browser: 'builds/browser.ts' } }, + entry: ['builds/browser.ts', 'src/*.ts'], + }, + { + ...browserOptions, + dts: false, + minify: true, + name: `browser ${pkg.name} min esm`, + entry: { 'builds/browser.min': 'builds/browser.ts' }, + external: [], + noExternal: getDependencies(pkg, 'xhr'), + }, +]; + +export default defineConfig([...nodeConfigs, ...browserConfigs]); diff --git a/packages/client-recommendation/api-extractor.json b/packages/client-recommendation/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/client-recommendation/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/client-recommendation/index.js b/packages/client-recommendation/index.js deleted file mode 100644 index 7bddf1787..000000000 --- a/packages/client-recommendation/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/client-recommendation.cjs.js'); diff --git a/packages/client-recommendation/package.json b/packages/client-recommendation/package.json deleted file mode 100644 index 1a1c13fb3..000000000 --- a/packages/client-recommendation/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "@algolia/client-recommendation", - "version": "4.13.1", - "private": false, - "repository": { - "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-javascript.git" - }, - "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/client-recommendation.esm.js", - "types": "dist/client-recommendation.d.ts", - "files": [ - "index.js", - "dist" - ], - "dependencies": { - "@algolia/client-common": "4.13.1", - "@algolia/client-personalization": "4.13.1", - "@algolia/requester-common": "4.13.1" - } -} diff --git a/packages/client-recommendation/src/__tests__/features/personalization-strategy.test.ts b/packages/client-recommendation/src/__tests__/features/personalization-strategy.test.ts deleted file mode 100644 index cbb3cefb1..000000000 --- a/packages/client-recommendation/src/__tests__/features/personalization-strategy.test.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { PersonalizationStrategy } from '../..'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; -import { SetPersonalizationStrategyResponse } from '../../types'; - -const testSuite = new TestSuite('personalization_strategy'); - -test(testSuite.testName, async () => { - // On the CI, we parallelize too many calls to this endpoint. Making - // the API slow to respond, and reaching a timeout. These specific - // timeouts should ensure the test suite works as expected. - const client = testSuite.makeSearchClient().initRecommendation({ - timeouts: { - connect: 30, - read: 30, - write: 30, - }, - }); - - const personalizationStrategy: PersonalizationStrategy = { - eventsScoring: [ - { - eventName: 'Add to cart', - eventType: 'conversion', - score: 50, - }, - { - eventName: 'Purchase', - eventType: 'conversion', - score: 100, - }, - ], - facetsScoring: [ - { facetName: 'brand', score: 100 }, - { facetName: 'categories', score: 10 }, - ], - personalizationImpact: 0, - }; - - const successResponse: SetPersonalizationStrategyResponse = { - status: 200, - message: 'Strategy was successfully updated', - }; - - const errorResponse: SetPersonalizationStrategyResponse = { - status: 429, - message: 'Number of strategy saves exceeded for the day', - }; - - try { - const response = await client.setPersonalizationStrategy(personalizationStrategy); - expect(response).toEqual(successResponse); - } catch (error) { - // eslint-disable-next-line jest/no-try-expect - expect(error).toEqual(expect.objectContaining({ name: 'ApiError', ...errorResponse })); - } - - await expect(client.getPersonalizationStrategy()).resolves.toEqual(personalizationStrategy); -}); diff --git a/packages/client-recommendation/src/__tests__/unit/recommendation-client.test.ts b/packages/client-recommendation/src/__tests__/unit/recommendation-client.test.ts deleted file mode 100644 index 1cf32617b..000000000 --- a/packages/client-recommendation/src/__tests__/unit/recommendation-client.test.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { anything, deepEqual, spy, verify, when } from 'ts-mockito'; - -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; -import { PersonalizationStrategy, SetPersonalizationStrategyResponse } from '../../types'; - -const searchClient = new TestSuite().algoliasearch('appId', 'apiKey', { - logger: { - debug: jest.fn(), - info: jest.fn(), - error: jest.fn(), - }, -}); -const recommendationClient = searchClient.initRecommendation(); - -describe('recommendation client', () => { - it('logs a deprecation message', () => { - expect(searchClient.transporter.logger.info).toHaveBeenCalledTimes(1); - expect(searchClient.transporter.logger.info).toHaveBeenCalledWith( - 'The `initRecommendation` method is deprecated. Use `initPersonalization` instead.' - ); - }); - - it('uses region to define the host', () => { - expect(recommendationClient.transporter.hosts[0].url).toBe('personalization.us.algolia.com'); - }); - - it('sets default headers', () => { - expect(recommendationClient.transporter.headers).toEqual({ - 'content-type': 'application/json', - 'x-algolia-application-id': 'appId', - 'x-algolia-api-key': 'apiKey', - }); - - expect(recommendationClient.transporter.queryParameters).toEqual({}); - }); -}); - -describe('personalization', () => { - const personalizationStrategy: PersonalizationStrategy = { - eventsScoring: [ - { eventName: 'Add to cart', eventType: 'conversion', score: 50 }, - { eventName: 'Purchase', eventType: 'conversion', score: 100 }, - ], - facetsScoring: [ - { facetName: 'brand', score: 100 }, - { facetName: 'categories', score: 10 }, - ], - personalizationImpact: 0, - }; - - it('set personalization strategy', async () => { - const transporterMock = spy(recommendationClient.transporter); - const response: SetPersonalizationStrategyResponse = { - status: 200, - message: 'Strategy was successfully updated', - }; - when(transporterMock.write(anything(), anything())).thenResolve(response); - - const setPersonalizationStrategyResponse = await recommendationClient.setPersonalizationStrategy( - personalizationStrategy, - { foo: 'bar' } - ); - expect(setPersonalizationStrategyResponse).toEqual(response); - - verify( - transporterMock.write( - deepEqual({ - method: MethodEnum.Post, - path: '1/strategies/personalization', - data: personalizationStrategy, - }), - deepEqual({ foo: 'bar' }) - ) - ).once(); - }); - - it('get personalization strategy', async () => { - const transporterMock = spy(recommendationClient.transporter); - when(transporterMock.read(anything(), anything())).thenResolve(personalizationStrategy); - - const getPersonalizationStrategyResponse = await recommendationClient.getPersonalizationStrategy(); - - verify( - transporterMock.read( - deepEqual({ - method: MethodEnum.Get, - path: '1/strategies/personalization', - }), - anything() - ) - ).once(); - - expect(getPersonalizationStrategyResponse).toEqual(personalizationStrategy); - }); -}); diff --git a/packages/client-recommendation/src/createRecommendationClient.ts b/packages/client-recommendation/src/createRecommendationClient.ts deleted file mode 100644 index 15bcb3e93..000000000 --- a/packages/client-recommendation/src/createRecommendationClient.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ClientTransporterOptions, CreateClient } from '@algolia/client-common'; -import { createPersonalizationClient } from '@algolia/client-personalization'; - -import { RecommendationClient, RecommendationClientOptions } from '.'; - -/** - * @deprecated The `@algolia/client-recommendation` package is deprecated and you should use `@algolia/client-personalization` instead. To migrate, install the new package and replace `createRecommendationClient` with `createPersonalizationClient`. - */ -export const createRecommendationClient: CreateClient< - RecommendationClient, - RecommendationClientOptions & ClientTransporterOptions -> = options => { - /* eslint-disable max-len */ - options.logger.info( - 'The `@algolia/client-recommendation` package is deprecated and you should use `@algolia/client-personalization` instead.\n' + - 'To migrate, install the new package and replace `createRecommendationClient` with `createPersonalizationClient`.' - ); - /* eslint-enable max-len */ - - return createPersonalizationClient(options); -}; diff --git a/packages/client-recommendation/src/index.ts b/packages/client-recommendation/src/index.ts deleted file mode 100644 index 900b9eb76..000000000 --- a/packages/client-recommendation/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createRecommendationClient'; -export * from './methods/index'; -export * from './types/index'; diff --git a/packages/client-recommendation/src/methods/getPersonalizationStrategy.ts b/packages/client-recommendation/src/methods/getPersonalizationStrategy.ts deleted file mode 100644 index 60c4b711f..000000000 --- a/packages/client-recommendation/src/methods/getPersonalizationStrategy.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { GetPersonalizationStrategyResponse, RecommendationClient } from '..'; - -export const getPersonalizationStrategy = (base: RecommendationClient) => { - return ( - requestOptions?: RequestOptions - ): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: '1/strategies/personalization', - }, - requestOptions - ); - }; -}; diff --git a/packages/client-recommendation/src/methods/index.ts b/packages/client-recommendation/src/methods/index.ts deleted file mode 100644 index c64d44a9a..000000000 --- a/packages/client-recommendation/src/methods/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './getPersonalizationStrategy'; -export * from './setPersonalizationStrategy'; diff --git a/packages/client-recommendation/src/methods/setPersonalizationStrategy.ts b/packages/client-recommendation/src/methods/setPersonalizationStrategy.ts deleted file mode 100644 index 8d6d6bae4..000000000 --- a/packages/client-recommendation/src/methods/setPersonalizationStrategy.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - PersonalizationStrategy, - RecommendationClient, - SetPersonalizationStrategyResponse, -} from '..'; - -export const setPersonalizationStrategy = (base: RecommendationClient) => { - return ( - personalizationStrategy: PersonalizationStrategy, - requestOptions?: RequestOptions - ): Readonly> => { - return base.transporter.write( - { - method: MethodEnum.Post, - path: '1/strategies/personalization', - data: personalizationStrategy, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-recommendation/src/types/GetPersonalizationStrategyResponse.ts b/packages/client-recommendation/src/types/GetPersonalizationStrategyResponse.ts deleted file mode 100644 index d0ae3b865..000000000 --- a/packages/client-recommendation/src/types/GetPersonalizationStrategyResponse.ts +++ /dev/null @@ -1,23 +0,0 @@ -export type GetPersonalizationStrategyResponse = { - /** - * Events scoring - */ - eventsScoring: Array<{ - eventName: string; - eventType: string; - score: number; - }>; - - /** - * Facets scoring - */ - facetsScoring: Array<{ - facetName: string; - score: number; - }>; - - /** - * Personalization impact - */ - personalizationImpact: number; -}; diff --git a/packages/client-recommendation/src/types/PersonalizationStrategy.ts b/packages/client-recommendation/src/types/PersonalizationStrategy.ts deleted file mode 100644 index 4af503cdc..000000000 --- a/packages/client-recommendation/src/types/PersonalizationStrategy.ts +++ /dev/null @@ -1,23 +0,0 @@ -export type PersonalizationStrategy = { - /** - * Events scoring - */ - readonly eventsScoring: ReadonlyArray<{ - readonly eventName: string; - readonly eventType: string; - readonly score: number; - }>; - - /** - * Facets scoring - */ - readonly facetsScoring: ReadonlyArray<{ - readonly facetName: string; - readonly score: number; - }>; - - /** - * Personalization impact - */ - readonly personalizationImpact: number; -}; diff --git a/packages/client-recommendation/src/types/RecommendationClient.ts b/packages/client-recommendation/src/types/RecommendationClient.ts deleted file mode 100644 index e20a37ca3..000000000 --- a/packages/client-recommendation/src/types/RecommendationClient.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Transporter } from '@algolia/transporter'; - -export type RecommendationClient = { - /** - * The application id. - */ - readonly appId: string; - - /** - * The underlying transporter. - */ - readonly transporter: Transporter; -}; diff --git a/packages/client-recommendation/src/types/RecommendationClientOptions.ts b/packages/client-recommendation/src/types/RecommendationClientOptions.ts deleted file mode 100644 index 9faee40a2..000000000 --- a/packages/client-recommendation/src/types/RecommendationClientOptions.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type RecommendationClientOptions = { - /** - * The application id. - */ - readonly appId: string; - - /** - * The api key. - */ - readonly apiKey: string; - - /** - * The prefered region. - */ - readonly region?: string; -}; diff --git a/packages/client-recommendation/src/types/SetPersonalizationStrategyResponse.ts b/packages/client-recommendation/src/types/SetPersonalizationStrategyResponse.ts deleted file mode 100644 index f005b29c8..000000000 --- a/packages/client-recommendation/src/types/SetPersonalizationStrategyResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type SetPersonalizationStrategyResponse = { - /** - * The status code. - */ - status?: number; - - /** - * The message. - */ - message: string; -}; diff --git a/packages/client-recommendation/src/types/index.ts b/packages/client-recommendation/src/types/index.ts deleted file mode 100644 index 223310f09..000000000 --- a/packages/client-recommendation/src/types/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './GetPersonalizationStrategyResponse'; -export * from './PersonalizationStrategy'; -export * from './RecommendationClient'; -export * from './RecommendationClientOptions'; -export * from './SetPersonalizationStrategyResponse'; diff --git a/packages/client-search/LICENSE b/packages/client-search/LICENSE new file mode 100644 index 000000000..fddf416f9 --- /dev/null +++ b/packages/client-search/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-Present Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/client-search/README.md b/packages/client-search/README.md new file mode 100644 index 000000000..2df5bfb85 --- /dev/null +++ b/packages/client-search/README.md @@ -0,0 +1,77 @@ +

+ + Algolia for JavaScript + + +

The perfect starting point to integrate Algolia within your JavaScript project

+ +

+ NPM version + NPM downloads + jsDelivr Downloads + License +

+

+ +

+ Documentation • + InstantSearch • + Community Forum • + Stack Overflow • + Report a bug • + FAQ • + Support +

+ +## ✨ Features + +- Thin & **minimal low-level HTTP client** to interact with Algolia's API +- Works both on the **browser** and **node.js** +- **UMD and ESM compatible**, you can use it with any module loader +- Built with TypeScript + +## 💡 Getting Started + +> [!TIP] +> This API client is already a dependency of [the algoliasearch client](https://www.npmjs.com/package/algoliasearch), you don't need to manually install `@algolia/client-search` if you already have `algoliasearch` installed. + +To get started, you first need to install @algolia/client-search (or any other available API client package). +All of our clients comes with type definition, and are available for both browser and node environments. + +### With a package manager + +```bash +yarn add @algolia/client-search@5.23.3 +# or +npm install @algolia/client-search@5.23.3 +# or +pnpm add @algolia/client-search@5.23.3 +``` + +### Without a package manager + +Add the following JavaScript snippet to the of your website: + +```html + +``` + +### Usage + +You can now import the Algolia API client in your project and play with it. + +```js +import { searchClient } from '@algolia/client-search'; + +const client = searchClient('YOUR_APP_ID', 'YOUR_API_KEY'); +``` + +For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/javascript/v5/methods/search/)**. + +## ❓ Troubleshooting + +Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/libraries/javascript/v5/) where you will find answers for the most common issues and gotchas with the client. You can also open [a GitHub issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=&projects=&template=Bug_report.md) + +## 📄 License + +The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). diff --git a/packages/client-search/api-extractor.json b/packages/client-search/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/client-search/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/client-search/builds/browser.ts b/packages/client-search/builds/browser.ts new file mode 100644 index 000000000..ad84e104d --- /dev/null +++ b/packages/client-search/builds/browser.ts @@ -0,0 +1,52 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import { createXhrRequester } from '@algolia/requester-browser-xhr'; + +import { + createBrowserLocalStorageCache, + createFallbackableCache, + createMemoryCache, + createNullLogger, +} from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { apiClientVersion, createSearchClient } from '../src/searchClient'; + +export { apiClientVersion } from '../src/searchClient'; + +export * from '../model'; + +import type {} from '../model'; + +export function searchClient(appId: string, apiKey: string, options?: ClientOptions): SearchClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return createSearchClient({ + appId, + apiKey, + timeouts: { + connect: 1000, + read: 2000, + write: 30000, + }, + logger: createNullLogger(), + requester: createXhrRequester(), + algoliaAgents: [{ segment: 'Browser' }], + authMode: 'WithinQueryParameters', + responsesCache: createMemoryCache(), + requestsCache: createMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], + }), + ...options, + }); +} + +export type SearchClient = ReturnType; diff --git a/packages/client-search/builds/fetch.ts b/packages/client-search/builds/fetch.ts new file mode 100644 index 000000000..5fb00140c --- /dev/null +++ b/packages/client-search/builds/fetch.ts @@ -0,0 +1,104 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SearchClient = ReturnType & SearchClientNodeHelpers; + +import { createHmac } from 'node:crypto'; + +import { createMemoryCache, createNullCache, createNullLogger, serializeQueryParameters } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createSearchClient } from '../src/searchClient'; + +export { apiClientVersion } from '../src/searchClient'; + +export * from '../model'; + +import type { + GenerateSecuredApiKeyOptions, + GetSecuredApiKeyRemainingValidityOptions, + SearchClientNodeHelpers, +} from '../model'; + +export function searchClient(appId: string, apiKey: string, options?: ClientOptions): SearchClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createSearchClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Fetch' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + /** + * Helper: Generates a secured API key based on the given `parentApiKey` and given `restrictions`. + * + * @summary Helper: Generates a secured API key based on the given `parentApiKey` and given `restrictions`. + * @param generateSecuredApiKey - The `generateSecuredApiKey` object. + * @param generateSecuredApiKey.parentApiKey - The base API key from which to generate the new secured one. + * @param generateSecuredApiKey.restrictions - A set of properties defining the restrictions of the secured API key. + */ + generateSecuredApiKey: ({ parentApiKey, restrictions = {} }: GenerateSecuredApiKeyOptions): string => { + let mergedRestrictions = restrictions; + if (restrictions.searchParams) { + // merge searchParams with the root restrictions + mergedRestrictions = { + ...restrictions, + ...restrictions.searchParams, + }; + + delete mergedRestrictions.searchParams; + } + + mergedRestrictions = Object.keys(mergedRestrictions) + .sort() + .reduce( + (acc, key) => { + acc[key] = (mergedRestrictions as any)[key]; + return acc; + }, + {} as Record, + ); + + const queryParameters = serializeQueryParameters(mergedRestrictions); + return Buffer.from( + createHmac('sha256', parentApiKey).update(queryParameters).digest('hex') + queryParameters, + ).toString('base64'); + }, + /** + * Helper: Retrieves the remaining validity of the previous generated `securedApiKey`, the `ValidUntil` parameter must have been provided. + * + * @summary Helper: Retrieves the remaining validity of the previous generated `secured_api_key`, the `ValidUntil` parameter must have been provided. + * @param getSecuredApiKeyRemainingValidity - The `getSecuredApiKeyRemainingValidity` object. + * @param getSecuredApiKeyRemainingValidity.securedApiKey - The secured API key generated with the `generateSecuredApiKey` method. + */ + getSecuredApiKeyRemainingValidity: ({ securedApiKey }: GetSecuredApiKeyRemainingValidityOptions): number => { + const decodedString = atob(securedApiKey); + const regex = /validUntil=(\d+)/; + const match = decodedString.match(regex); + + if (match === null) { + throw new Error('validUntil not found in given secured api key.'); + } + + return parseInt(match[1], 10) - Math.round(new Date().getTime() / 1000); + }, + }; +} diff --git a/packages/client-search/builds/node.ts b/packages/client-search/builds/node.ts new file mode 100644 index 000000000..5ce3e9dfd --- /dev/null +++ b/packages/client-search/builds/node.ts @@ -0,0 +1,105 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SearchClient = ReturnType & SearchClientNodeHelpers; + +import { createHmac } from 'node:crypto'; + +import { createHttpRequester } from '@algolia/requester-node-http'; + +import { createMemoryCache, createNullCache, createNullLogger, serializeQueryParameters } from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createSearchClient } from '../src/searchClient'; + +export { apiClientVersion } from '../src/searchClient'; + +export * from '../model'; + +import type { + GenerateSecuredApiKeyOptions, + GetSecuredApiKeyRemainingValidityOptions, + SearchClientNodeHelpers, +} from '../model'; + +export function searchClient(appId: string, apiKey: string, options?: ClientOptions): SearchClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createSearchClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createHttpRequester(), + algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + /** + * Helper: Generates a secured API key based on the given `parentApiKey` and given `restrictions`. + * + * @summary Helper: Generates a secured API key based on the given `parentApiKey` and given `restrictions`. + * @param generateSecuredApiKey - The `generateSecuredApiKey` object. + * @param generateSecuredApiKey.parentApiKey - The base API key from which to generate the new secured one. + * @param generateSecuredApiKey.restrictions - A set of properties defining the restrictions of the secured API key. + */ + generateSecuredApiKey: ({ parentApiKey, restrictions = {} }: GenerateSecuredApiKeyOptions): string => { + let mergedRestrictions = restrictions; + if (restrictions.searchParams) { + // merge searchParams with the root restrictions + mergedRestrictions = { + ...restrictions, + ...restrictions.searchParams, + }; + + delete mergedRestrictions.searchParams; + } + + mergedRestrictions = Object.keys(mergedRestrictions) + .sort() + .reduce( + (acc, key) => { + acc[key] = (mergedRestrictions as any)[key]; + return acc; + }, + {} as Record, + ); + + const queryParameters = serializeQueryParameters(mergedRestrictions); + return Buffer.from( + createHmac('sha256', parentApiKey).update(queryParameters).digest('hex') + queryParameters, + ).toString('base64'); + }, + /** + * Helper: Retrieves the remaining validity of the previous generated `securedApiKey`, the `ValidUntil` parameter must have been provided. + * + * @summary Helper: Retrieves the remaining validity of the previous generated `secured_api_key`, the `ValidUntil` parameter must have been provided. + * @param getSecuredApiKeyRemainingValidity - The `getSecuredApiKeyRemainingValidity` object. + * @param getSecuredApiKeyRemainingValidity.securedApiKey - The secured API key generated with the `generateSecuredApiKey` method. + */ + getSecuredApiKeyRemainingValidity: ({ securedApiKey }: GetSecuredApiKeyRemainingValidityOptions): number => { + const decodedString = atob(securedApiKey); + const regex = /validUntil=(\d+)/; + const match = decodedString.match(regex); + + if (match === null) { + throw new Error('validUntil not found in given secured api key.'); + } + + return parseInt(match[1], 10) - Math.round(new Date().getTime() / 1000); + }, + }; +} diff --git a/packages/client-search/builds/worker.ts b/packages/client-search/builds/worker.ts new file mode 100644 index 000000000..473de6abc --- /dev/null +++ b/packages/client-search/builds/worker.ts @@ -0,0 +1,125 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SearchClientWorkerHelpers = { + generateSecuredApiKey: (opts: GenerateSecuredApiKeyOptions) => Promise; + getSecuredApiKeyRemainingValidity: (opts: GetSecuredApiKeyRemainingValidityOptions) => number; +}; + +export type SearchClient = ReturnType & SearchClientWorkerHelpers; + +import { createMemoryCache, createNullCache, createNullLogger, serializeQueryParameters } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createSearchClient } from '../src/searchClient'; + +export { apiClientVersion } from '../src/searchClient'; + +export * from '../model'; + +import type { GenerateSecuredApiKeyOptions, GetSecuredApiKeyRemainingValidityOptions } from '../model'; + +export function searchClient(appId: string, apiKey: string, options?: ClientOptions): SearchClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createSearchClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Worker' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + /** + * Helper: Generates a secured API key based on the given `parentApiKey` and given `restrictions`. + * + * @summary Helper: Generates a secured API key based on the given `parentApiKey` and given `restrictions`. + * @param generateSecuredApiKey - The `generateSecuredApiKey` object. + * @param generateSecuredApiKey.parentApiKey - The base API key from which to generate the new secured one. + * @param generateSecuredApiKey.restrictions - A set of properties defining the restrictions of the secured API key. + */ + generateSecuredApiKey: async ({ + parentApiKey, + restrictions = {}, + }: GenerateSecuredApiKeyOptions): Promise => { + let mergedRestrictions = restrictions; + if (restrictions.searchParams) { + // merge searchParams with the root restrictions + mergedRestrictions = { + ...restrictions, + ...restrictions.searchParams, + }; + + delete mergedRestrictions.searchParams; + } + + mergedRestrictions = Object.keys(mergedRestrictions) + .sort() + .reduce( + (acc, key) => { + acc[key] = (mergedRestrictions as any)[key]; + return acc; + }, + {} as Record, + ); + + const queryParameters = serializeQueryParameters(mergedRestrictions); + return await generateBase64Hmac(parentApiKey, queryParameters); + }, + /** + * Helper: Retrieves the remaining validity of the previous generated `securedApiKey`, the `ValidUntil` parameter must have been provided. + * + * @summary Helper: Retrieves the remaining validity of the previous generated `secured_api_key`, the `ValidUntil` parameter must have been provided. + * @param getSecuredApiKeyRemainingValidity - The `getSecuredApiKeyRemainingValidity` object. + * @param getSecuredApiKeyRemainingValidity.securedApiKey - The secured API key generated with the `generateSecuredApiKey` method. + */ + getSecuredApiKeyRemainingValidity: ({ securedApiKey }: GetSecuredApiKeyRemainingValidityOptions): number => { + const decodedString = atob(securedApiKey); + const regex = /validUntil=(\d+)/; + const match = decodedString.match(regex); + + if (match === null) { + throw new Error('validUntil not found in given secured api key.'); + } + + return parseInt(match[1], 10) - Math.round(new Date().getTime() / 1000); + }, + }; +} + +async function getCryptoKey(secret: string): Promise { + const secretBuf = new TextEncoder().encode(secret); + return await crypto.subtle.importKey('raw', secretBuf, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']); +} + +async function generateHmacHex(cryptoKey: CryptoKey, queryParameters: string): Promise { + const encoder = new TextEncoder(); + const queryParametersUint8Array = encoder.encode(queryParameters); + const signature = await crypto.subtle.sign('HMAC', cryptoKey, queryParametersUint8Array); + return Array.from(new Uint8Array(signature)) + .map((b) => b.toString(16).padStart(2, '0')) + .join(''); +} + +async function generateBase64Hmac(parentApiKey: string, queryParameters: string): Promise { + const crypotKey = await getCryptoKey(parentApiKey); + const hmacHex = await generateHmacHex(crypotKey, queryParameters); + const combined = hmacHex + queryParameters; + return btoa(combined); +} diff --git a/packages/client-search/index.d.ts b/packages/client-search/index.d.ts new file mode 100644 index 000000000..e81a1cd3e --- /dev/null +++ b/packages/client-search/index.d.ts @@ -0,0 +1 @@ +export * from './dist/node'; diff --git a/packages/client-search/index.js b/packages/client-search/index.js index eebe74cb4..21e26aad3 100644 --- a/packages/client-search/index.js +++ b/packages/client-search/index.js @@ -1,2 +1 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/client-search.cjs.js'); +module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/client-search/model/acl.ts b/packages/client-search/model/acl.ts new file mode 100644 index 000000000..e21dfb1da --- /dev/null +++ b/packages/client-search/model/acl.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Access control list permissions. + */ +export type Acl = + | 'addObject' + | 'analytics' + | 'browse' + | 'deleteObject' + | 'deleteIndex' + | 'editSettings' + | 'inference' + | 'listIndexes' + | 'logs' + | 'personalization' + | 'recommendation' + | 'search' + | 'seeUnretrievableAttributes' + | 'settings' + | 'usage'; diff --git a/packages/client-search/model/action.ts b/packages/client-search/model/action.ts new file mode 100644 index 000000000..20d62e69a --- /dev/null +++ b/packages/client-search/model/action.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Type of indexing operation. + */ +export type Action = + | 'addObject' + | 'updateObject' + | 'partialUpdateObject' + | 'partialUpdateObjectNoCreate' + | 'deleteObject' + | 'delete' + | 'clear'; diff --git a/packages/client-search/model/addApiKeyResponse.ts b/packages/client-search/model/addApiKeyResponse.ts new file mode 100644 index 000000000..8a553fb3d --- /dev/null +++ b/packages/client-search/model/addApiKeyResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AddApiKeyResponse = { + /** + * API key. + */ + key: string; + + /** + * Date and time when the object was created, in RFC 3339 format. + */ + createdAt: string; +}; diff --git a/packages/client-search/model/advancedSyntaxFeatures.ts b/packages/client-search/model/advancedSyntaxFeatures.ts new file mode 100644 index 000000000..61e577d48 --- /dev/null +++ b/packages/client-search/model/advancedSyntaxFeatures.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AdvancedSyntaxFeatures = 'exactPhrase' | 'excludeWords'; diff --git a/packages/client-search/model/alternativesAsExact.ts b/packages/client-search/model/alternativesAsExact.ts new file mode 100644 index 000000000..b4d50c7a5 --- /dev/null +++ b/packages/client-search/model/alternativesAsExact.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AlternativesAsExact = 'ignorePlurals' | 'singleWordSynonym' | 'multiWordsSynonym' | 'ignoreConjugations'; diff --git a/packages/client-search/model/anchoring.ts b/packages/client-search/model/anchoring.ts new file mode 100644 index 000000000..9effad076 --- /dev/null +++ b/packages/client-search/model/anchoring.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Which part of the search query the pattern should match: - `startsWith`. The pattern must match the beginning of the query. - `endsWith`. The pattern must match the end of the query. - `is`. The pattern must match the query exactly. - `contains`. The pattern must match anywhere in the query. Empty queries are only allowed as patterns with `anchoring: is`. + */ +export type Anchoring = 'is' | 'startsWith' | 'endsWith' | 'contains'; diff --git a/packages/client-search/model/apiKey.ts b/packages/client-search/model/apiKey.ts new file mode 100644 index 000000000..4a43039c9 --- /dev/null +++ b/packages/client-search/model/apiKey.ts @@ -0,0 +1,48 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Acl } from './acl'; + +/** + * API key object. + */ +export type ApiKey = { + /** + * Permissions that determine the type of API requests this key can make. The required ACL is listed in each endpoint\'s reference. For more information, see [access control list](https://www.algolia.com/doc/guides/security/api-keys/#access-control-list-acl). + */ + acl: Array; + + /** + * Description of an API key to help you identify this API key. + */ + description?: string; + + /** + * Index names or patterns that this API key can access. By default, an API key can access all indices in the same application. You can use leading and trailing wildcard characters (`*`): - `dev_*` matches all indices starting with \"dev_\". - `*_dev` matches all indices ending with \"_dev\". - `*_products_*` matches all indices containing \"_products_\". + */ + indexes?: Array; + + /** + * Maximum number of results this API key can retrieve in one query. By default, there\'s no limit. + */ + maxHitsPerQuery?: number; + + /** + * Maximum number of API requests allowed per IP address or [user token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/) per hour. If this limit is reached, the API returns an error with status code `429`. By default, there\'s no limit. + */ + maxQueriesPerIPPerHour?: number; + + /** + * Query parameters to add when making API requests with this API key. To restrict this API key to specific IP addresses, add the `restrictSources` parameter. You can only add a single source, but you can provide a range of IP addresses. Creating an API key fails if the request is made from an IP address outside the restricted range. + */ + queryParameters?: string; + + /** + * Allowed HTTP referrers for this API key. By default, all referrers are allowed. You can use leading and trailing wildcard characters (`*`): - `https://algolia.com/_*` allows all referrers starting with \"https://algolia.com/\" - `*.algolia.com` allows all referrers ending with \".algolia.com\" - `*algolia.com*` allows all referrers in the domain \"algolia.com\". Like all HTTP headers, referrers can be spoofed. Don\'t rely on them to secure your data. For more information, see [HTTP referrer restrictions](https://www.algolia.com/doc/guides/security/security-best-practices/#http-referrers-restrictions). + */ + referers?: Array; + + /** + * Duration (in seconds) after which the API key expires. By default, API keys don\'t expire. + */ + validity?: number; +}; diff --git a/packages/client-search/model/apiKeyOperation.ts b/packages/client-search/model/apiKeyOperation.ts new file mode 100644 index 000000000..736b63c66 --- /dev/null +++ b/packages/client-search/model/apiKeyOperation.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type ApiKeyOperation = 'add' | 'delete' | 'update'; diff --git a/packages/client-search/model/aroundPrecision.ts b/packages/client-search/model/aroundPrecision.ts new file mode 100644 index 000000000..79ff0cd59 --- /dev/null +++ b/packages/client-search/model/aroundPrecision.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Range } from './range'; + +/** + * Precision of a coordinate-based search in meters to group results with similar distances. The Geo ranking criterion considers all matches within the same range of distances to be equal. + */ +export type AroundPrecision = number | Array; diff --git a/packages/client-search/model/aroundRadius.ts b/packages/client-search/model/aroundRadius.ts new file mode 100644 index 000000000..8198f1e75 --- /dev/null +++ b/packages/client-search/model/aroundRadius.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AroundRadiusAll } from './aroundRadiusAll'; + +/** + * Maximum radius for a search around a central location. This parameter works in combination with the `aroundLatLng` and `aroundLatLngViaIP` parameters. By default, the search radius is determined automatically from the density of hits around the central location. The search radius is small if there are many hits close to the central coordinates. + */ +export type AroundRadius = number | AroundRadiusAll; diff --git a/packages/client-search/model/aroundRadiusAll.ts b/packages/client-search/model/aroundRadiusAll.ts new file mode 100644 index 000000000..e5f107060 --- /dev/null +++ b/packages/client-search/model/aroundRadiusAll.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Return all records with a valid `_geoloc` attribute. Don\'t filter by distance. + */ +export type AroundRadiusAll = 'all'; diff --git a/packages/client-search/model/assignUserIdParams.ts b/packages/client-search/model/assignUserIdParams.ts new file mode 100644 index 000000000..bb747ca34 --- /dev/null +++ b/packages/client-search/model/assignUserIdParams.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Assign userID parameters. + */ +export type AssignUserIdParams = { + /** + * Cluster name. + */ + cluster: string; +}; diff --git a/packages/client-search/model/attributeToUpdate.ts b/packages/client-search/model/attributeToUpdate.ts new file mode 100644 index 000000000..f563075c0 --- /dev/null +++ b/packages/client-search/model/attributeToUpdate.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BuiltInOperation } from './builtInOperation'; + +export type AttributeToUpdate = string | BuiltInOperation; diff --git a/packages/client-search/model/automaticFacetFilter.ts b/packages/client-search/model/automaticFacetFilter.ts new file mode 100644 index 000000000..ca83695bf --- /dev/null +++ b/packages/client-search/model/automaticFacetFilter.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter or optional filter to be applied to the search. + */ +export type AutomaticFacetFilter = { + /** + * Facet name to be applied as filter. The name must match placeholders in the `pattern` parameter. For example, with `pattern: {facet:genre}`, `automaticFacetFilters` must be `genre`. + */ + facet: string; + + /** + * Filter scores to give different weights to individual filters. + */ + score?: number; + + /** + * Whether the filter is disjunctive or conjunctive. If true the filter has multiple matches, multiple occurences are combined with the logical `OR` operation. If false, multiple occurences are combined with the logical `AND` operation. + */ + disjunctive?: boolean; +}; diff --git a/packages/client-search/model/automaticFacetFilters.ts b/packages/client-search/model/automaticFacetFilters.ts new file mode 100644 index 000000000..6fdc07bc7 --- /dev/null +++ b/packages/client-search/model/automaticFacetFilters.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AutomaticFacetFilter } from './automaticFacetFilter'; + +/** + * Filter to be applied to the search. You can use this to respond to search queries that match a facet value. For example, if users search for \"comedy\", which matches a facet value of the \"genre\" facet, you can filter the results to show the top-ranked comedy movies. + */ +export type AutomaticFacetFilters = Array | Array; diff --git a/packages/client-search/model/banner.ts b/packages/client-search/model/banner.ts new file mode 100644 index 000000000..793feec15 --- /dev/null +++ b/packages/client-search/model/banner.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BannerImage } from './bannerImage'; +import type { BannerLink } from './bannerLink'; + +/** + * Banner with image and link to redirect users. + */ +export type Banner = { + image?: BannerImage; + + link?: BannerLink; +}; diff --git a/packages/client-search/model/bannerImage.ts b/packages/client-search/model/bannerImage.ts new file mode 100644 index 000000000..a0988168e --- /dev/null +++ b/packages/client-search/model/bannerImage.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BannerImageUrl } from './bannerImageUrl'; + +/** + * Image to show inside a banner. + */ +export type BannerImage = { + urls?: Array; + + title?: string; +}; diff --git a/packages/client-search/model/bannerImageUrl.ts b/packages/client-search/model/bannerImageUrl.ts new file mode 100644 index 000000000..6be2b3efd --- /dev/null +++ b/packages/client-search/model/bannerImageUrl.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * URL for an image to show inside a banner. + */ +export type BannerImageUrl = { + url?: string; +}; diff --git a/packages/client-search/model/bannerLink.ts b/packages/client-search/model/bannerLink.ts new file mode 100644 index 000000000..52800a208 --- /dev/null +++ b/packages/client-search/model/bannerLink.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Link for a banner defined in the Merchandising Studio. + */ +export type BannerLink = { + url?: string; +}; diff --git a/packages/client-search/model/baseGetApiKeyResponse.ts b/packages/client-search/model/baseGetApiKeyResponse.ts new file mode 100644 index 000000000..55547ef1e --- /dev/null +++ b/packages/client-search/model/baseGetApiKeyResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BaseGetApiKeyResponse = { + /** + * API key. + */ + value: string; + + /** + * Timestamp when the object was created, in milliseconds since the Unix epoch. + */ + createdAt: number; +}; diff --git a/packages/client-search/model/baseIndexSettings.ts b/packages/client-search/model/baseIndexSettings.ts new file mode 100644 index 000000000..3357a401f --- /dev/null +++ b/packages/client-search/model/baseIndexSettings.ts @@ -0,0 +1,105 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SupportedLanguage } from './supportedLanguage'; + +export type BaseIndexSettings = { + /** + * Attributes used for [faceting](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/). Facets are attributes that let you categorize search results. They can be used for filtering search results. By default, no attribute is used for faceting. Attribute names are case-sensitive. **Modifiers** - `filterOnly(\"ATTRIBUTE\")`. Allows the attribute to be used as a filter but doesn\'t evaluate the facet values. - `searchable(\"ATTRIBUTE\")`. Allows searching for facet values. - `afterDistinct(\"ATTRIBUTE\")`. Evaluates the facet count _after_ deduplication with `distinct`. This ensures accurate facet counts. You can apply this modifier to searchable facets: `afterDistinct(searchable(ATTRIBUTE))`. + */ + attributesForFaceting?: Array; + + /** + * Creates [replica indices](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/replicas/). Replicas are copies of a primary index with the same records but different settings, synonyms, or rules. If you want to offer a different ranking or sorting of your search results, you\'ll use replica indices. All index operations on a primary index are automatically forwarded to its replicas. To add a replica index, you must provide the complete set of replicas to this parameter. If you omit a replica from this list, the replica turns into a regular, standalone index that will no longer be synced with the primary index. **Modifier** - `virtual(\"REPLICA\")`. Create a virtual replica, Virtual replicas don\'t increase the number of records and are optimized for [Relevant sorting](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/relevant-sort/). + */ + replicas?: Array; + + /** + * Maximum number of search results that can be obtained through pagination. Higher pagination limits might slow down your search. For pagination limits above 1,000, the sorting of results beyond the 1,000th hit can\'t be guaranteed. + */ + paginationLimitedTo?: number; + + /** + * Attributes that can\'t be retrieved at query time. This can be useful if you want to use an attribute for ranking or to [restrict access](https://www.algolia.com/doc/guides/security/api-keys/how-to/user-restricted-access-to-data/), but don\'t want to include it in the search results. Attribute names are case-sensitive. + */ + unretrievableAttributes?: Array; + + /** + * Creates a list of [words which require exact matches](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#turn-off-typo-tolerance-for-certain-words). This also turns off [word splitting and concatenation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/splitting-and-concatenation/) for the specified words. + */ + disableTypoToleranceOnWords?: Array; + + /** + * Attributes, for which you want to support [Japanese transliteration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/#japanese-transliteration-and-type-ahead). Transliteration supports searching in any of the Japanese writing systems. To support transliteration, you must set the indexing language to Japanese. Attribute names are case-sensitive. + */ + attributesToTransliterate?: Array; + + /** + * Attributes for which to split [camel case](https://wikipedia.org/wiki/Camel_case) words. Attribute names are case-sensitive. + */ + camelCaseAttributes?: Array; + + /** + * Searchable attributes to which Algolia should apply [word segmentation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/how-to/customize-segmentation/) (decompounding). Attribute names are case-sensitive. Compound words are formed by combining two or more individual words, and are particularly prevalent in Germanic languages—for example, \"firefighter\". With decompounding, the individual components are indexed separately. You can specify different lists for different languages. Decompounding is supported for these languages: Dutch (`nl`), German (`de`), Finnish (`fi`), Danish (`da`), Swedish (`sv`), and Norwegian (`no`). Decompounding doesn\'t work for words with [non-spacing mark Unicode characters](https://www.charactercodes.net/category/non-spacing_mark). For example, `Gartenstühle` won\'t be decompounded if the `ü` consists of `u` (U+0075) and `◌̈` (U+0308). + */ + decompoundedAttributes?: Record; + + /** + * Languages for language-specific processing steps, such as word detection and dictionary settings. **You should always specify an indexing language.** If you don\'t specify an indexing language, the search engine uses all [supported languages](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/supported-languages/), or the languages you specified with the `ignorePlurals` or `removeStopWords` parameters. This can lead to unexpected search results. For more information, see [Language-specific configuration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/). + */ + indexLanguages?: Array; + + /** + * Searchable attributes for which you want to turn off [prefix matching](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/#adjusting-prefix-search). Attribute names are case-sensitive. + */ + disablePrefixOnAttributes?: Array; + + /** + * Whether arrays with exclusively non-negative integers should be compressed for better performance. If true, the compressed arrays may be reordered. + */ + allowCompressionOfIntegerArray?: boolean; + + /** + * Numeric attributes that can be used as [numerical filters](https://www.algolia.com/doc/guides/managing-results/rules/detecting-intent/how-to/applying-a-custom-filter-for-a-specific-query/#numerical-filters). Attribute names are case-sensitive. By default, all numeric attributes are available as numerical filters. For faster indexing, reduce the number of numeric attributes. To turn off filtering for all numeric attributes, specify an attribute that doesn\'t exist in your index, such as `NO_NUMERIC_FILTERING`. **Modifier** - `equalOnly(\"ATTRIBUTE\")`. Support only filtering based on equality comparisons `=` and `!=`. + */ + numericAttributesForFiltering?: Array; + + /** + * Control which non-alphanumeric characters are indexed. By default, Algolia ignores [non-alphanumeric characters](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/how-to/how-to-search-in-hyphenated-attributes/#handling-non-alphanumeric-characters) like hyphen (`-`), plus (`+`), and parentheses (`(`,`)`). To include such characters, define them with `separatorsToIndex`. Separators are all non-letter characters except spaces and currency characters, such as $€£¥. With `separatorsToIndex`, Algolia treats separator characters as separate words. For example, in a search for \"Disney+\", Algolia considers \"Disney\" and \"+\" as two separate words. + */ + separatorsToIndex?: string; + + /** + * Attributes used for searching. Attribute names are case-sensitive. By default, all attributes are searchable and the [Attribute](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#attribute) ranking criterion is turned off. With a non-empty list, Algolia only returns results with matches in the selected attributes. In addition, the Attribute ranking criterion is turned on: matches in attributes that are higher in the list of `searchableAttributes` rank first. To make matches in two attributes rank equally, include them in a comma-separated string, such as `\"title,alternate_title\"`. Attributes with the same priority are always unordered. For more information, see [Searchable attributes](https://www.algolia.com/doc/guides/sending-and-managing-data/prepare-your-data/how-to/setting-searchable-attributes/). **Modifier** - `unordered(\"ATTRIBUTE\")`. Ignore the position of a match within the attribute. Without a modifier, matches at the beginning of an attribute rank higher than matches at the end. + */ + searchableAttributes?: Array; + + /** + * An object with custom data. You can store up to 32kB as custom data. + */ + userData?: any | null; + + /** + * Characters and their normalized replacements. This overrides Algolia\'s default [normalization](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/normalization/). + */ + customNormalization?: { [key: string]: { [key: string]: string } }; + + /** + * Attribute that should be used to establish groups of results. Attribute names are case-sensitive. All records with the same value for this attribute are considered a group. You can combine `attributeForDistinct` with the `distinct` search parameter to control how many items per group are included in the search results. If you want to use the same attribute also for faceting, use the `afterDistinct` modifier of the `attributesForFaceting` setting. This applies faceting _after_ deduplication, which will result in accurate facet counts. + */ + attributeForDistinct?: string; + + /** + * Maximum number of facet values to return when [searching for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ + maxFacetHits?: number; + + /** + * Characters for which diacritics should be preserved. By default, Algolia removes diacritics from letters. For example, `é` becomes `e`. If this causes issues in your search, you can specify characters that should keep their diacritics. + */ + keepDiacriticsOnCharacters?: string; + + /** + * Attributes to use as [custom ranking](https://www.algolia.com/doc/guides/managing-results/must-do/custom-ranking/). Attribute names are case-sensitive. The custom ranking attributes decide which items are shown first if the other ranking criteria are equal. Records with missing values for your selected custom ranking attributes are always sorted last. Boolean attributes are sorted based on their alphabetical order. **Modifiers** - `asc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in ascending order. - `desc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in descending order. If you use two or more custom ranking attributes, [reduce the precision](https://www.algolia.com/doc/guides/managing-results/must-do/custom-ranking/how-to/controlling-custom-ranking-metrics-precision/) of your first attributes, or the other attributes will never be applied. + */ + customRanking?: Array; +}; diff --git a/packages/client-search/model/baseSearchParams.ts b/packages/client-search/model/baseSearchParams.ts new file mode 100644 index 000000000..030809e05 --- /dev/null +++ b/packages/client-search/model/baseSearchParams.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchParamsWithoutQuery } from './baseSearchParamsWithoutQuery'; +import type { SearchParamsQuery } from './searchParamsQuery'; + +export type BaseSearchParams = SearchParamsQuery & BaseSearchParamsWithoutQuery; diff --git a/packages/client-search/model/baseSearchParamsWithoutQuery.ts b/packages/client-search/model/baseSearchParamsWithoutQuery.ts new file mode 100644 index 000000000..69fcbe82a --- /dev/null +++ b/packages/client-search/model/baseSearchParamsWithoutQuery.ts @@ -0,0 +1,146 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AroundPrecision } from './aroundPrecision'; +import type { AroundRadius } from './aroundRadius'; +import type { FacetFilters } from './facetFilters'; +import type { InsideBoundingBox } from './insideBoundingBox'; +import type { NumericFilters } from './numericFilters'; +import type { OptionalFilters } from './optionalFilters'; +import type { SupportedLanguage } from './supportedLanguage'; +import type { TagFilters } from './tagFilters'; + +export type BaseSearchParamsWithoutQuery = { + /** + * Keywords to be used instead of the search query to conduct a more broader search. Using the `similarQuery` parameter changes other settings: - `queryType` is set to `prefixNone`. - `removeStopWords` is set to true. - `words` is set as the first ranking criterion. - All remaining words are treated as `optionalWords`. Since the `similarQuery` is supposed to do a broad search, they usually return many results. Combine it with `filters` to narrow down the list of results. + */ + similarQuery?: string; + + /** + * Filter expression to only include items that match the filter criteria in the response. You can use these filter expressions: - **Numeric filters.** ` `, where `` is one of `<`, `<=`, `=`, `!=`, `>`, `>=`. - **Ranges.** `: TO ` where `` and `` are the lower and upper limits of the range (inclusive). - **Facet filters.** `:` where `` is a facet attribute (case-sensitive) and `` a facet value. - **Tag filters.** `_tags:` or just `` (case-sensitive). - **Boolean filters.** `: true | false`. You can combine filters with `AND`, `OR`, and `NOT` operators with the following restrictions: - You can only combine filters of the same type with `OR`. **Not supported:** `facet:value OR num > 3`. - You can\'t use `NOT` with combinations of filters. **Not supported:** `NOT(facet:value OR facet:value)` - You can\'t combine conjunctions (`AND`) with `OR`. **Not supported:** `facet:value OR (facet:value AND facet:value)` Use quotes around your filters, if the facet attribute name or facet value has spaces, keywords (`OR`, `AND`, `NOT`), or quotes. If a facet attribute is an array, the filter matches if it matches at least one element of the array. For more information, see [Filters](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/). + */ + filters?: string; + + facetFilters?: FacetFilters; + + optionalFilters?: OptionalFilters; + + numericFilters?: NumericFilters; + + tagFilters?: TagFilters; + + /** + * Whether to sum all filter scores. If true, all filter scores are summed. Otherwise, the maximum filter score is kept. For more information, see [filter scores](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/in-depth/filter-scoring/#accumulating-scores-with-sumorfiltersscores). + */ + sumOrFiltersScores?: boolean; + + /** + * Restricts a search to a subset of your searchable attributes. Attribute names are case-sensitive. + */ + restrictSearchableAttributes?: Array; + + /** + * Facets for which to retrieve facet values that match the search criteria and the number of matching facet values. To retrieve all facets, use the wildcard character `*`. For more information, see [facets](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#contextual-facet-values-and-counts). + */ + facets?: Array; + + /** + * Whether faceting should be applied after deduplication with `distinct`. This leads to accurate facet counts when using faceting in combination with `distinct`. It\'s usually better to use `afterDistinct` modifiers in the `attributesForFaceting` setting, as `facetingAfterDistinct` only computes correct facet counts if all records have the same facet values for the `attributeForDistinct`. + */ + facetingAfterDistinct?: boolean; + + /** + * Page of search results to retrieve. + */ + page?: number; + + /** + * Position of the first hit to retrieve. + */ + offset?: number; + + /** + * Number of hits to retrieve (used in combination with `offset`). + */ + length?: number; + + /** + * Coordinates for the center of a circle, expressed as a comma-separated string of latitude and longitude. Only records included within a circle around this central location are included in the results. The radius of the circle is determined by the `aroundRadius` and `minimumAroundRadius` settings. This parameter is ignored if you also specify `insidePolygon` or `insideBoundingBox`. + */ + aroundLatLng?: string; + + /** + * Whether to obtain the coordinates from the request\'s IP address. + */ + aroundLatLngViaIP?: boolean; + + aroundRadius?: AroundRadius; + + aroundPrecision?: AroundPrecision; + + /** + * Minimum radius (in meters) for a search around a location when `aroundRadius` isn\'t set. + */ + minimumAroundRadius?: number; + + insideBoundingBox?: InsideBoundingBox | null; + + /** + * Coordinates of a polygon in which to search. Polygons are defined by 3 to 10,000 points. Each point is represented by its latitude and longitude. Provide multiple polygons as nested arrays. For more information, see [filtering inside polygons](https://www.algolia.com/doc/guides/managing-results/refine-results/geolocation/#filtering-inside-rectangular-or-polygonal-areas). This parameter is ignored if you also specify `insideBoundingBox`. + */ + insidePolygon?: Array>; + + /** + * ISO language codes that adjust settings that are useful for processing natural language queries (as opposed to keyword searches): - Sets `removeStopWords` and `ignorePlurals` to the list of provided languages. - Sets `removeWordsIfNoResults` to `allOptional`. - Adds a `natural_language` attribute to `ruleContexts` and `analyticsTags`. + */ + naturalLanguages?: Array; + + /** + * Assigns a rule context to the search query. [Rule contexts](https://www.algolia.com/doc/guides/managing-results/rules/rules-overview/how-to/customize-search-results-by-platform/#whats-a-context) are strings that you can use to trigger matching rules. + */ + ruleContexts?: Array; + + /** + * Impact that Personalization should have on this search. The higher this value is, the more Personalization determines the ranking compared to other factors. For more information, see [Understanding Personalization impact](https://www.algolia.com/doc/guides/personalization/personalizing-results/in-depth/configuring-personalization/#understanding-personalization-impact). + */ + personalizationImpact?: number; + + /** + * Unique pseudonymous or anonymous user identifier. This helps with analytics and click and conversion events. For more information, see [user token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken?: string; + + /** + * Whether the search response should include detailed ranking information. + */ + getRankingInfo?: boolean; + + /** + * Whether to take into account an index\'s synonyms for this search. + */ + synonyms?: boolean; + + /** + * Whether to include a `queryID` attribute in the response. The query ID is a unique identifier for a search query and is required for tracking [click and conversion events](https://www.algolia.com/guides/sending-events/getting-started/). + */ + clickAnalytics?: boolean; + + /** + * Whether this search will be included in Analytics. + */ + analytics?: boolean; + + /** + * Tags to apply to the query for [segmenting analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + analyticsTags?: Array; + + /** + * Whether to include this search when calculating processing-time percentiles. + */ + percentileComputation?: boolean; + + /** + * Whether to enable A/B testing for this search. + */ + enableABTest?: boolean; +}; diff --git a/packages/client-search/model/baseSearchResponse.ts b/packages/client-search/model/baseSearchResponse.ts new file mode 100644 index 000000000..066ecc865 --- /dev/null +++ b/packages/client-search/model/baseSearchResponse.ts @@ -0,0 +1,129 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Exhaustive } from './exhaustive'; +import type { FacetStats } from './facetStats'; +import type { Redirect } from './redirect'; +import type { RenderingContent } from './renderingContent'; + +export type BaseSearchResponse = Record & { + /** + * A/B test ID. This is only included in the response for indices that are part of an A/B test. + */ + abTestID?: number; + + /** + * Variant ID. This is only included in the response for indices that are part of an A/B test. + */ + abTestVariantID?: number; + + /** + * Computed geographical location. + */ + aroundLatLng?: string; + + /** + * Distance from a central coordinate provided by `aroundLatLng`. + */ + automaticRadius?: string; + + exhaustive?: Exhaustive; + + /** + * Rules applied to the query. + */ + appliedRules?: Array>; + + /** + * See the `facetsCount` field of the `exhaustive` object in the response. + */ + exhaustiveFacetsCount?: boolean; + + /** + * See the `nbHits` field of the `exhaustive` object in the response. + */ + exhaustiveNbHits?: boolean; + + /** + * See the `typo` field of the `exhaustive` object in the response. + */ + exhaustiveTypo?: boolean; + + /** + * Facet counts. + */ + facets?: { [key: string]: { [key: string]: number } }; + + /** + * Statistics for numerical facets. + */ + facets_stats?: { [key: string]: FacetStats }; + + /** + * Index name used for the query. + */ + index?: string; + + /** + * Index name used for the query. During A/B testing, the targeted index isn\'t always the index used by the query. + */ + indexUsed?: string; + + /** + * Warnings about the query. + */ + message?: string; + + /** + * Number of hits selected and sorted by the relevant sort algorithm. + */ + nbSortedHits?: number; + + /** + * Post-[normalization](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/#what-does-normalization-mean) query string that will be searched. + */ + parsedQuery?: string; + + /** + * Time the server took to process the request, in milliseconds. + */ + processingTimeMS: number; + + /** + * Experimental. List of processing steps and their times, in milliseconds. You can use this list to investigate performance issues. + */ + processingTimingsMS?: Record; + + /** + * Markup text indicating which parts of the original query have been removed to retrieve a non-empty result set. + */ + queryAfterRemoval?: string; + + redirect?: Redirect; + + renderingContent?: RenderingContent; + + /** + * Time the server took to process the request, in milliseconds. + */ + serverTimeMS?: number; + + /** + * Host name of the server that processed the request. + */ + serverUsed?: string; + + /** + * An object with custom data. You can store up to 32kB as custom data. + */ + userData?: any | null; + + /** + * Unique identifier for the query. This is used for [click analytics](https://www.algolia.com/doc/guides/analytics/click-analytics/). + */ + queryID?: string; + + /** + * Whether automatic events collection is enabled for the application. + */ + _automaticInsights?: boolean; +}; diff --git a/packages/client-search/model/batchAssignUserIdsParams.ts b/packages/client-search/model/batchAssignUserIdsParams.ts new file mode 100644 index 000000000..e5a4a4dc5 --- /dev/null +++ b/packages/client-search/model/batchAssignUserIdsParams.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Assign userID parameters. + */ +export type BatchAssignUserIdsParams = { + /** + * Cluster name. + */ + cluster: string; + + /** + * User IDs to assign. + */ + users: Array; +}; diff --git a/packages/client-search/model/batchDictionaryEntriesParams.ts b/packages/client-search/model/batchDictionaryEntriesParams.ts new file mode 100644 index 000000000..097a3b8a9 --- /dev/null +++ b/packages/client-search/model/batchDictionaryEntriesParams.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BatchDictionaryEntriesRequest } from './batchDictionaryEntriesRequest'; + +/** + * Request body for updating dictionary entries. + */ +export type BatchDictionaryEntriesParams = { + /** + * Whether to replace all custom entries in the dictionary with the ones sent with this request. + */ + clearExistingDictionaryEntries?: boolean; + + /** + * List of additions and deletions to your dictionaries. + */ + requests: Array; +}; diff --git a/packages/client-search/model/batchDictionaryEntriesRequest.ts b/packages/client-search/model/batchDictionaryEntriesRequest.ts new file mode 100644 index 000000000..3865eed17 --- /dev/null +++ b/packages/client-search/model/batchDictionaryEntriesRequest.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DictionaryAction } from './dictionaryAction'; +import type { DictionaryEntry } from './dictionaryEntry'; + +export type BatchDictionaryEntriesRequest = { + action: DictionaryAction; + + body: DictionaryEntry; +}; diff --git a/packages/client-search/model/batchParams.ts b/packages/client-search/model/batchParams.ts new file mode 100644 index 000000000..9ab9e4a92 --- /dev/null +++ b/packages/client-search/model/batchParams.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MultipleBatchRequest } from './multipleBatchRequest'; + +/** + * Batch parameters. + */ +export type BatchParams = { + requests: Array; +}; diff --git a/packages/client-search/model/batchRequest.ts b/packages/client-search/model/batchRequest.ts new file mode 100644 index 000000000..cea7356ab --- /dev/null +++ b/packages/client-search/model/batchRequest.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Action } from './action'; + +export type BatchRequest = { + action: Action; + + /** + * Operation arguments (varies with specified `action`). + */ + body: Record; +}; diff --git a/packages/client-search/model/batchResponse.ts b/packages/client-search/model/batchResponse.ts new file mode 100644 index 000000000..d611bfb1f --- /dev/null +++ b/packages/client-search/model/batchResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BatchResponse = { + /** + * Unique identifier of a task. A successful API response means that a task was added to a queue. It might not run immediately. You can check the task\'s progress with the [`task` operation](#tag/Indices/operation/getTask) and this `taskID`. + */ + taskID: number; + + /** + * Unique record identifiers. + */ + objectIDs: Array; +}; diff --git a/packages/client-search/model/batchWriteParams.ts b/packages/client-search/model/batchWriteParams.ts new file mode 100644 index 000000000..f2b2b8f8f --- /dev/null +++ b/packages/client-search/model/batchWriteParams.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BatchRequest } from './batchRequest'; + +/** + * Batch parameters. + */ +export type BatchWriteParams = { + requests: Array; +}; diff --git a/packages/client-search/model/booleanString.ts b/packages/client-search/model/booleanString.ts new file mode 100644 index 000000000..4cf1fb196 --- /dev/null +++ b/packages/client-search/model/booleanString.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BooleanString = 'true' | 'false'; diff --git a/packages/client-search/model/browsePagination.ts b/packages/client-search/model/browsePagination.ts new file mode 100644 index 000000000..3a9bb25eb --- /dev/null +++ b/packages/client-search/model/browsePagination.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BrowsePagination = { + /** + * Page of search results to retrieve. + */ + page?: number; + + /** + * Number of results (hits). + */ + nbHits?: number; + + /** + * Number of pages of results. + */ + nbPages?: number; + + /** + * Number of hits per page. + */ + hitsPerPage?: number; +}; diff --git a/packages/client-search/model/browseParams.ts b/packages/client-search/model/browseParams.ts new file mode 100644 index 000000000..d56c07fec --- /dev/null +++ b/packages/client-search/model/browseParams.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BrowseParamsObject } from './browseParamsObject'; + +import type { SearchParamsString } from './searchParamsString'; + +export type BrowseParams = SearchParamsString | BrowseParamsObject; diff --git a/packages/client-search/model/browseParamsObject.ts b/packages/client-search/model/browseParamsObject.ts new file mode 100644 index 000000000..340270dcf --- /dev/null +++ b/packages/client-search/model/browseParamsObject.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Cursor } from './cursor'; +import type { SearchParamsObject } from './searchParamsObject'; + +export type BrowseParamsObject = SearchParamsObject & Cursor; diff --git a/packages/client-search/model/browseResponse.ts b/packages/client-search/model/browseResponse.ts new file mode 100644 index 000000000..b1bd5513c --- /dev/null +++ b/packages/client-search/model/browseResponse.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchResponse } from './baseSearchResponse'; +import type { BrowsePagination } from './browsePagination'; +import type { Cursor } from './cursor'; +import type { SearchHits } from './searchHits'; + +export type BrowseResponse> = BaseSearchResponse & + BrowsePagination & + SearchHits & + Cursor; diff --git a/packages/client-search/model/builtInOperation.ts b/packages/client-search/model/builtInOperation.ts new file mode 100644 index 000000000..a0e14ee19 --- /dev/null +++ b/packages/client-search/model/builtInOperation.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BuiltInOperationType } from './builtInOperationType'; +import type { BuiltInOperationValue } from './builtInOperationValue'; + +/** + * Update to perform on the attribute. + */ +export type BuiltInOperation = { + _operation: BuiltInOperationType; + + value: BuiltInOperationValue; +}; diff --git a/packages/client-search/model/builtInOperationType.ts b/packages/client-search/model/builtInOperationType.ts new file mode 100644 index 000000000..707fc00ba --- /dev/null +++ b/packages/client-search/model/builtInOperationType.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * How to change the attribute. + */ +export type BuiltInOperationType = + | 'Increment' + | 'Decrement' + | 'Add' + | 'Remove' + | 'AddUnique' + | 'IncrementFrom' + | 'IncrementSet'; diff --git a/packages/client-search/model/builtInOperationValue.ts b/packages/client-search/model/builtInOperationValue.ts new file mode 100644 index 000000000..b082f173d --- /dev/null +++ b/packages/client-search/model/builtInOperationValue.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BuiltInOperationValue = string | number; diff --git a/packages/client-search/model/clientMethodProps.ts b/packages/client-search/model/clientMethodProps.ts new file mode 100644 index 000000000..94f1fd91c --- /dev/null +++ b/packages/client-search/model/clientMethodProps.ts @@ -0,0 +1,879 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Action } from '../model/action'; + +import type { ApiKey } from '../model/apiKey'; +import type { ApiKeyOperation } from '../model/apiKeyOperation'; +import type { AssignUserIdParams } from '../model/assignUserIdParams'; +import type { BatchAssignUserIdsParams } from '../model/batchAssignUserIdsParams'; +import type { BatchDictionaryEntriesParams } from '../model/batchDictionaryEntriesParams'; + +import type { BatchWriteParams } from '../model/batchWriteParams'; +import type { BrowseParams } from '../model/browseParams'; + +import type { DeleteByParams } from '../model/deleteByParams'; + +import type { DictionaryType } from '../model/dictionaryType'; + +import type { IndexSettings } from '../model/indexSettings'; + +import type { LogType } from '../model/logType'; + +import type { OperationIndexParams } from '../model/operationIndexParams'; + +import type { Rule } from '../model/rule'; + +import type { ScopeType } from '../model/scopeType'; +import type { SearchDictionaryEntriesParams } from '../model/searchDictionaryEntriesParams'; + +import type { SearchForFacetValuesRequest } from '../model/searchForFacetValuesRequest'; + +import type { SearchParams } from '../model/searchParams'; + +import type { SearchRulesParams } from '../model/searchRulesParams'; + +import type { SearchSynonymsParams } from '../model/searchSynonymsParams'; + +import type { SecuredApiKeyRestrictions } from '../model/securedApiKeyRestrictions'; + +import type { Source } from '../model/source'; +import type { SynonymHit } from '../model/synonymHit'; + +import type { SearchForFacetsOptions } from './searchForFacetsOptions'; +import type { SearchForHitsOptions } from './searchForHitsOptions'; +import type { SearchParamsObject } from './searchParamsObject'; + +import type { CreateIterablePromise } from '@algolia/client-common'; + +/** + * Properties for the `addOrUpdateObject` method. + */ +export type AddOrUpdateObjectProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Unique record identifier. + */ + objectID: string; + /** + * The record. A schemaless object with attributes that are useful in the context of search and discovery. + */ + body: Record; +}; + +/** + * Properties for the `assignUserId` method. + */ +export type AssignUserIdProps = { + /** + * Unique identifier of the user who makes the search request. + */ + xAlgoliaUserID: string; + assignUserIdParams: AssignUserIdParams; +}; + +/** + * Properties for the `batch` method. + */ +export type BatchProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + batchWriteParams: BatchWriteParams; +}; + +/** + * Properties for the `batchAssignUserIds` method. + */ +export type BatchAssignUserIdsProps = { + /** + * Unique identifier of the user who makes the search request. + */ + xAlgoliaUserID: string; + batchAssignUserIdsParams: BatchAssignUserIdsParams; +}; + +/** + * Properties for the `batchDictionaryEntries` method. + */ +export type BatchDictionaryEntriesProps = { + /** + * Dictionary type in which to search. + */ + dictionaryName: DictionaryType; + batchDictionaryEntriesParams: BatchDictionaryEntriesParams; +}; + +/** + * Properties for the `browse` method. + */ +export type BrowseProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + browseParams?: BrowseParams; +}; + +/** + * Properties for the `clearObjects` method. + */ +export type ClearObjectsProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; +}; + +/** + * Properties for the `clearRules` method. + */ +export type ClearRulesProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Whether changes are applied to replica indices. + */ + forwardToReplicas?: boolean; +}; + +/** + * Properties for the `clearSynonyms` method. + */ +export type ClearSynonymsProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Whether changes are applied to replica indices. + */ + forwardToReplicas?: boolean; +}; + +/** + * Properties for the `customDelete` method. + */ +export type CustomDeleteProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customGet` method. + */ +export type CustomGetProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customPost` method. + */ +export type CustomPostProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `customPut` method. + */ +export type CustomPutProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `deleteApiKey` method. + */ +export type DeleteApiKeyProps = { + /** + * API key. + */ + key: string; +}; + +/** + * Properties for the `deleteBy` method. + */ +export type DeleteByProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + deleteByParams: DeleteByParams; +}; + +/** + * Properties for the `deleteIndex` method. + */ +export type DeleteIndexProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; +}; + +/** + * Properties for the `deleteObject` method. + */ +export type DeleteObjectProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Unique record identifier. + */ + objectID: string; +}; + +/** + * Properties for the `deleteRule` method. + */ +export type DeleteRuleProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Unique identifier of a rule object. + */ + objectID: string; + /** + * Whether changes are applied to replica indices. + */ + forwardToReplicas?: boolean; +}; + +/** + * Properties for the `deleteSource` method. + */ +export type DeleteSourceProps = { + /** + * IP address range of the source. + */ + source: string; +}; + +/** + * Properties for the `deleteSynonym` method. + */ +export type DeleteSynonymProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Unique identifier of a synonym object. + */ + objectID: string; + /** + * Whether changes are applied to replica indices. + */ + forwardToReplicas?: boolean; +}; + +/** + * Properties for the `getApiKey` method. + */ +export type GetApiKeyProps = { + /** + * API key. + */ + key: string; +}; + +/** + * Properties for the `getAppTask` method. + */ +export type GetAppTaskProps = { + /** + * Unique task identifier. + */ + taskID: number; +}; + +/** + * Properties for the `getLogs` method. + */ +export type GetLogsProps = { + /** + * First log entry to retrieve. The most recent entries are listed first. + */ + offset?: number; + /** + * Maximum number of entries to retrieve. + */ + length?: number; + /** + * Index for which to retrieve log entries. By default, log entries are retrieved for all indices. + */ + indexName?: string; + /** + * Type of log entries to retrieve. By default, all log entries are retrieved. + */ + type?: LogType; +}; + +/** + * Properties for the `getObject` method. + */ +export type GetObjectProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Unique record identifier. + */ + objectID: string; + /** + * Attributes to include with the records in the response. This is useful to reduce the size of the API response. By default, all retrievable attributes are returned. `objectID` is always retrieved. Attributes included in `unretrievableAttributes` won\'t be retrieved unless the request is authenticated with the admin API key. + */ + attributesToRetrieve?: Array; +}; + +/** + * Properties for the `getRule` method. + */ +export type GetRuleProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Unique identifier of a rule object. + */ + objectID: string; +}; + +/** + * Properties for the `getSettings` method. + */ +export type GetSettingsProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; +}; + +/** + * Properties for the `getSynonym` method. + */ +export type GetSynonymProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Unique identifier of a synonym object. + */ + objectID: string; +}; + +/** + * Properties for the `getTask` method. + */ +export type GetTaskProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Unique task identifier. + */ + taskID: number; +}; + +/** + * Properties for the `getUserId` method. + */ +export type GetUserIdProps = { + /** + * Unique identifier of the user who makes the search request. + */ + userID: string; +}; + +/** + * Properties for the `hasPendingMappings` method. + */ +export type HasPendingMappingsProps = { + /** + * Whether to include the cluster\'s pending mapping state in the response. + */ + getClusters?: boolean; +}; + +/** + * Properties for the `listIndices` method. + */ +export type ListIndicesProps = { + /** + * Requested page of the API response. If `null`, the API response is not paginated. + */ + page?: number; + /** + * Number of hits per page. + */ + hitsPerPage?: number; +}; + +/** + * Properties for the `listUserIds` method. + */ +export type ListUserIdsProps = { + /** + * Requested page of the API response. If `null`, the API response is not paginated. + */ + page?: number; + /** + * Number of hits per page. + */ + hitsPerPage?: number; +}; + +/** + * Properties for the `operationIndex` method. + */ +export type OperationIndexProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + operationIndexParams: OperationIndexParams; +}; + +/** + * Properties for the `partialUpdateObject` method. + */ +export type PartialUpdateObjectProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Unique record identifier. + */ + objectID: string; + /** + * Attributes with their values. + */ + attributesToUpdate: Record; + /** + * Whether to create a new record if it doesn\'t exist. + */ + createIfNotExists?: boolean; +}; + +/** + * Properties for the `removeUserId` method. + */ +export type RemoveUserIdProps = { + /** + * Unique identifier of the user who makes the search request. + */ + userID: string; +}; + +/** + * Properties for the `replaceSources` method. + */ +export type ReplaceSourcesProps = { + /** + * Allowed sources. + */ + source: Array; +}; + +/** + * Properties for the `restoreApiKey` method. + */ +export type RestoreApiKeyProps = { + /** + * API key. + */ + key: string; +}; + +/** + * Properties for the `saveObject` method. + */ +export type SaveObjectProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * The record. A schemaless object with attributes that are useful in the context of search and discovery. + */ + body: Record; +}; + +/** + * Properties for the `saveRule` method. + */ +export type SaveRuleProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Unique identifier of a rule object. + */ + objectID: string; + rule: Rule; + /** + * Whether changes are applied to replica indices. + */ + forwardToReplicas?: boolean; +}; + +/** + * Properties for the `saveRules` method. + */ +export type SaveRulesProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + rules: Array; + /** + * Whether changes are applied to replica indices. + */ + forwardToReplicas?: boolean; + /** + * Whether existing rules should be deleted before adding this batch. + */ + clearExistingRules?: boolean; +}; + +/** + * Properties for the `saveSynonym` method. + */ +export type SaveSynonymProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Unique identifier of a synonym object. + */ + objectID: string; + synonymHit: SynonymHit; + /** + * Whether changes are applied to replica indices. + */ + forwardToReplicas?: boolean; +}; + +/** + * Properties for the `saveSynonyms` method. + */ +export type SaveSynonymsProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + synonymHit: Array; + /** + * Whether changes are applied to replica indices. + */ + forwardToReplicas?: boolean; + /** + * Whether to replace all synonyms in the index with the ones sent with this request. + */ + replaceExistingSynonyms?: boolean; +}; + +/** + * In v4, the search parameters are wrapped in a `params` parameter. + * + * @deprecated The `search` method now accepts flat `searchParams` at the root of the method. + */ +type LegacySearchParams = { + params?: SearchParamsObject; +}; + +/** + * In v4, the search parameters are wrapped in a `params` parameter. + * + * @deprecated The `search` method now accepts flat `searchParams` at the root of the method. + */ +type LegacySearchForFacets = LegacySearchParams & SearchForFacetsOptions; + +/** + * In v4, the search parameters are wrapped in a `params` parameter. + * + * @deprecated The `search` method now accepts flat `searchParams` at the root of the method. + */ +type LegacySearchForHits = LegacySearchParams & SearchForHitsOptions; + +type LegacySearchQuery = LegacySearchForFacets | LegacySearchForHits; + +/** + * Search method signature compatible with the `algoliasearch` v4 package. When using this signature, extra computation will be required to make it match the new signature. + * + * @deprecated This signature will be removed from the next major version, we recommend using the `SearchMethodParams` type for performances and future proof reasons. + */ +export type LegacySearchMethodProps = LegacySearchQuery[]; + +/** + * Properties for the `searchDictionaryEntries` method. + */ +export type SearchDictionaryEntriesProps = { + /** + * Dictionary type in which to search. + */ + dictionaryName: DictionaryType; + searchDictionaryEntriesParams: SearchDictionaryEntriesParams; +}; + +/** + * Properties for the `searchForFacetValues` method. + */ +export type SearchForFacetValuesProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Facet attribute in which to search for values. This attribute must be included in the `attributesForFaceting` index setting with the `searchable()` modifier. + */ + facetName: string; + searchForFacetValuesRequest?: SearchForFacetValuesRequest; +}; + +/** + * Properties for the `searchRules` method. + */ +export type SearchRulesProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + searchRulesParams?: SearchRulesParams; +}; + +/** + * Properties for the `searchSingleIndex` method. + */ +export type SearchSingleIndexProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + searchParams?: SearchParams; +}; + +/** + * Properties for the `searchSynonyms` method. + */ +export type SearchSynonymsProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * Body of the `searchSynonyms` operation. + */ + searchSynonymsParams?: SearchSynonymsParams; +}; + +/** + * Properties for the `setSettings` method. + */ +export type SetSettingsProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + indexSettings: IndexSettings; + /** + * Whether changes are applied to replica indices. + */ + forwardToReplicas?: boolean; +}; + +/** + * Properties for the `updateApiKey` method. + */ +export type UpdateApiKeyProps = { + /** + * API key. + */ + key: string; + apiKey: ApiKey; +}; + +/** + * The `browseObjects`, `browseRules`, `browseSynonyms` options. + */ +export type BrowseOptions = Partial, 'validate'>> & + Required, 'aggregator'>>; + +type WaitForOptions = Partial<{ + /** + * The maximum number of retries. 50 by default. + */ + maxRetries: number; + + /** + * The function to decide how long to wait between retries. + */ + timeout: (retryCount: number) => number; +}>; + +export type WaitForAppTaskOptions = WaitForOptions & { + /** + * The `taskID` returned by the method response. + */ + taskID: number; +}; + +export type WaitForTaskOptions = WaitForAppTaskOptions & { + /** + * The `indexName` where the operation was performed. + */ + indexName: string; +}; + +export type WaitForApiKeyOptions = WaitForOptions & { + /** + * The API Key. + */ + key: string; +} & ( + | { + /** + * The operation that has been performed, used to compute the stop condition. + */ + operation: Extract; + apiKey?: never; + } + | { + /** + * The operation that has been performed, used to compute the stop condition. + */ + operation: Extract; + /** + * The updated fields, used to compute the stop condition. + */ + apiKey: Partial; + } + ); + +export type GenerateSecuredApiKeyOptions = { + /** + * The base API key from which to generate the new secured one. + */ + parentApiKey: string; + + /** + * A set of properties defining the restrictions of the secured API key. + */ + restrictions?: SecuredApiKeyRestrictions; +}; + +export type GetSecuredApiKeyRemainingValidityOptions = { + /** + * The secured API key generated with the `generateSecuredApiKey` method. + */ + securedApiKey: string; +}; + +export type SearchClientNodeHelpers = { + generateSecuredApiKey: (opts: GenerateSecuredApiKeyOptions) => string; + getSecuredApiKeyRemainingValidity: (opts: GetSecuredApiKeyRemainingValidityOptions) => number; +}; + +export type DeleteObjectsOptions = Pick & { + /** + * The objectIDs to delete. + */ + objectIDs: string[]; +}; + +export type PartialUpdateObjectsOptions = Pick< + ChunkedBatchOptions, + 'indexName' | 'objects' | 'waitForTasks' | 'batchSize' +> & { + /** + *To be provided if non-existing objects are passed, otherwise, the call will fail. + */ + createIfNotExists?: boolean; +}; + +export type SaveObjectsOptions = Pick; + +export type ChunkedBatchOptions = ReplaceAllObjectsOptions & { + /** + * The `batch` `action` to perform on the given array of `objects`, defaults to `addObject`. + */ + action?: Action; + + /** + * Whether or not we should wait until every `batch` tasks has been processed, this operation may slow the total execution time of this method but is more reliable. + */ + waitForTasks?: boolean; +}; + +export type ReplaceAllObjectsOptions = { + /** + * The `indexName` to replace `objects` in. + */ + indexName: string; + + /** + * The array of `objects` to store in the given Algolia `indexName`. + */ + objects: Array>; + + /** + * The size of the chunk of `objects`. The number of `batch` calls will be equal to `length(objects) / batchSize`. Defaults to 1000. + */ + batchSize?: number; + + /** + * The `scopes` to keep from the index. Defaults to ['settings', 'rules', 'synonyms']. + */ + scopes?: Array; +}; diff --git a/packages/client-search/model/condition.ts b/packages/client-search/model/condition.ts new file mode 100644 index 000000000..fea1e6776 --- /dev/null +++ b/packages/client-search/model/condition.ts @@ -0,0 +1,27 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Anchoring } from './anchoring'; + +export type Condition = { + /** + * Query pattern that triggers the rule. You can use either a literal string, or a special pattern `{facet:ATTRIBUTE}`, where `ATTRIBUTE` is a facet name. The rule is triggered if the query matches the literal string or a value of the specified facet. For example, with `pattern: {facet:genre}`, the rule is triggered when users search for a genre, such as \"comedy\". + */ + pattern?: string; + + anchoring?: Anchoring; + + /** + * Whether the pattern should match plurals, synonyms, and typos. + */ + alternatives?: boolean; + + /** + * An additional restriction that only triggers the rule, when the search has the same value as `ruleContexts` parameter. For example, if `context: mobile`, the rule is only triggered when the search request has a matching `ruleContexts: mobile`. A rule context must only contain alphanumeric characters. + */ + context?: string; + + /** + * Filters that trigger the rule. You can add add filters using the syntax `facet:value` so that the rule is triggered, when the specific filter is selected. You can use `filters` on its own or combine it with the `pattern` parameter. + */ + filters?: string; +}; diff --git a/packages/client-search/model/consequence.ts b/packages/client-search/model/consequence.ts new file mode 100644 index 000000000..fb54d82c7 --- /dev/null +++ b/packages/client-search/model/consequence.ts @@ -0,0 +1,32 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ConsequenceHide } from './consequenceHide'; +import type { ConsequenceParams } from './consequenceParams'; +import type { Promote } from './promote'; + +/** + * Effect of the rule. For more information, see [Consequences](https://www.algolia.com/doc/guides/managing-results/rules/rules-overview/#consequences). + */ +export type Consequence = { + params?: ConsequenceParams; + + /** + * Records you want to pin to a specific position in the search results. You can promote up to 300 records, either individually, or as groups of up to 100 records each. + */ + promote?: Array; + + /** + * Whether promoted records must match an active filter for the consequence to be applied. This ensures that user actions (filtering the search) are given a higher precendence. For example, if you promote a record with the `color: red` attribute, and the user filters the search for `color: blue`, the \"red\" record won\'t be shown. + */ + filterPromotes?: boolean; + + /** + * Records you want to hide from the search results. + */ + hide?: Array; + + /** + * A JSON object with custom data that will be appended to the `userData` array in the response. This object isn\'t interpreted by the API and is limited to 1 kB of minified JSON. + */ + userData?: Record; +}; diff --git a/packages/client-search/model/consequenceHide.ts b/packages/client-search/model/consequenceHide.ts new file mode 100644 index 000000000..9ef5cf251 --- /dev/null +++ b/packages/client-search/model/consequenceHide.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Object ID of the record to hide. + */ +export type ConsequenceHide = { + /** + * Unique record identifier. + */ + objectID: string; +}; diff --git a/packages/client-search/model/consequenceParams.ts b/packages/client-search/model/consequenceParams.ts new file mode 100644 index 000000000..94b26e7fc --- /dev/null +++ b/packages/client-search/model/consequenceParams.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchParamsWithoutQuery } from './baseSearchParamsWithoutQuery'; +import type { IndexSettingsAsSearchParams } from './indexSettingsAsSearchParams'; +import type { Params } from './params'; + +export type ConsequenceParams = BaseSearchParamsWithoutQuery & IndexSettingsAsSearchParams & Params; diff --git a/packages/client-search/model/consequenceQuery.ts b/packages/client-search/model/consequenceQuery.ts new file mode 100644 index 000000000..28d8722a3 --- /dev/null +++ b/packages/client-search/model/consequenceQuery.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ConsequenceQueryObject } from './consequenceQueryObject'; + +/** + * Replace or edit the search query. If `consequenceQuery` is a string, the entire search query is replaced with that string. If `consequenceQuery` is an object, it describes incremental edits made to the query. + */ +export type ConsequenceQuery = ConsequenceQueryObject | string; diff --git a/packages/client-search/model/consequenceQueryObject.ts b/packages/client-search/model/consequenceQueryObject.ts new file mode 100644 index 000000000..483ebf214 --- /dev/null +++ b/packages/client-search/model/consequenceQueryObject.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Edit } from './edit'; + +export type ConsequenceQueryObject = { + /** + * Words to remove from the search query. + */ + remove?: Array; + + /** + * Changes to make to the search query. + */ + edits?: Array; +}; diff --git a/packages/client-search/model/createdAtResponse.ts b/packages/client-search/model/createdAtResponse.ts new file mode 100644 index 000000000..aff26e53b --- /dev/null +++ b/packages/client-search/model/createdAtResponse.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Response and creation timestamp. + */ +export type CreatedAtResponse = { + /** + * Date and time when the object was created, in RFC 3339 format. + */ + createdAt: string; +}; diff --git a/packages/client-search/model/cursor.ts b/packages/client-search/model/cursor.ts new file mode 100644 index 000000000..db36a6129 --- /dev/null +++ b/packages/client-search/model/cursor.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Cursor = { + /** + * Cursor to get the next page of the response. The parameter must match the value returned in the response of a previous request. The last page of the response does not return a `cursor` attribute. + */ + cursor?: string; +}; diff --git a/packages/client-search/model/deleteApiKeyResponse.ts b/packages/client-search/model/deleteApiKeyResponse.ts new file mode 100644 index 000000000..848689302 --- /dev/null +++ b/packages/client-search/model/deleteApiKeyResponse.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DeleteApiKeyResponse = { + /** + * Date and time when the object was deleted, in RFC 3339 format. + */ + deletedAt: string; +}; diff --git a/packages/client-search/model/deleteByParams.ts b/packages/client-search/model/deleteByParams.ts new file mode 100644 index 000000000..ac77bb7df --- /dev/null +++ b/packages/client-search/model/deleteByParams.ts @@ -0,0 +1,34 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AroundRadius } from './aroundRadius'; +import type { FacetFilters } from './facetFilters'; +import type { InsideBoundingBox } from './insideBoundingBox'; +import type { NumericFilters } from './numericFilters'; +import type { TagFilters } from './tagFilters'; + +export type DeleteByParams = { + facetFilters?: FacetFilters; + + /** + * Filter expression to only include items that match the filter criteria in the response. You can use these filter expressions: - **Numeric filters.** ` `, where `` is one of `<`, `<=`, `=`, `!=`, `>`, `>=`. - **Ranges.** `: TO ` where `` and `` are the lower and upper limits of the range (inclusive). - **Facet filters.** `:` where `` is a facet attribute (case-sensitive) and `` a facet value. - **Tag filters.** `_tags:` or just `` (case-sensitive). - **Boolean filters.** `: true | false`. You can combine filters with `AND`, `OR`, and `NOT` operators with the following restrictions: - You can only combine filters of the same type with `OR`. **Not supported:** `facet:value OR num > 3`. - You can\'t use `NOT` with combinations of filters. **Not supported:** `NOT(facet:value OR facet:value)` - You can\'t combine conjunctions (`AND`) with `OR`. **Not supported:** `facet:value OR (facet:value AND facet:value)` Use quotes around your filters, if the facet attribute name or facet value has spaces, keywords (`OR`, `AND`, `NOT`), or quotes. If a facet attribute is an array, the filter matches if it matches at least one element of the array. For more information, see [Filters](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/). + */ + filters?: string; + + numericFilters?: NumericFilters; + + tagFilters?: TagFilters; + + /** + * Coordinates for the center of a circle, expressed as a comma-separated string of latitude and longitude. Only records included within a circle around this central location are included in the results. The radius of the circle is determined by the `aroundRadius` and `minimumAroundRadius` settings. This parameter is ignored if you also specify `insidePolygon` or `insideBoundingBox`. + */ + aroundLatLng?: string; + + aroundRadius?: AroundRadius; + + insideBoundingBox?: InsideBoundingBox | null; + + /** + * Coordinates of a polygon in which to search. Polygons are defined by 3 to 10,000 points. Each point is represented by its latitude and longitude. Provide multiple polygons as nested arrays. For more information, see [filtering inside polygons](https://www.algolia.com/doc/guides/managing-results/refine-results/geolocation/#filtering-inside-rectangular-or-polygonal-areas). This parameter is ignored if you also specify `insideBoundingBox`. + */ + insidePolygon?: Array>; +}; diff --git a/packages/client-search/model/deleteSourceResponse.ts b/packages/client-search/model/deleteSourceResponse.ts new file mode 100644 index 000000000..1bf596c2b --- /dev/null +++ b/packages/client-search/model/deleteSourceResponse.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DeleteSourceResponse = { + /** + * Date and time when the object was deleted, in RFC 3339 format. + */ + deletedAt: string; +}; diff --git a/packages/client-search/model/deletedAtResponse.ts b/packages/client-search/model/deletedAtResponse.ts new file mode 100644 index 000000000..37181b061 --- /dev/null +++ b/packages/client-search/model/deletedAtResponse.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Response, taskID, and deletion timestamp. + */ +export type DeletedAtResponse = { + /** + * Unique identifier of a task. A successful API response means that a task was added to a queue. It might not run immediately. You can check the task\'s progress with the [`task` operation](#tag/Indices/operation/getTask) and this `taskID`. + */ + taskID: number; + + /** + * Date and time when the object was deleted, in RFC 3339 format. + */ + deletedAt: string; +}; diff --git a/packages/client-search/model/dictionaryAction.ts b/packages/client-search/model/dictionaryAction.ts new file mode 100644 index 000000000..988a9213d --- /dev/null +++ b/packages/client-search/model/dictionaryAction.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Actions to perform. + */ +export type DictionaryAction = 'addEntry' | 'deleteEntry'; diff --git a/packages/client-search/model/dictionaryEntry.ts b/packages/client-search/model/dictionaryEntry.ts new file mode 100644 index 000000000..b9964514b --- /dev/null +++ b/packages/client-search/model/dictionaryEntry.ts @@ -0,0 +1,36 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DictionaryEntryState } from './dictionaryEntryState'; +import type { DictionaryEntryType } from './dictionaryEntryType'; +import type { SupportedLanguage } from './supportedLanguage'; + +/** + * Dictionary entry. + */ +export type DictionaryEntry = Record & { + /** + * Unique identifier for the dictionary entry. + */ + objectID: string; + + language?: SupportedLanguage; + + /** + * Matching dictionary word for `stopwords` and `compounds` dictionaries. + */ + word?: string; + + /** + * Matching words in the `plurals` dictionary including declensions. + */ + words?: Array; + + /** + * Invividual components of a compound word in the `compounds` dictionary. + */ + decomposition?: Array; + + state?: DictionaryEntryState; + + type?: DictionaryEntryType; +}; diff --git a/packages/client-search/model/dictionaryEntryState.ts b/packages/client-search/model/dictionaryEntryState.ts new file mode 100644 index 000000000..5355d2e0b --- /dev/null +++ b/packages/client-search/model/dictionaryEntryState.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Whether a dictionary entry is active. + */ +export type DictionaryEntryState = 'enabled' | 'disabled'; diff --git a/packages/client-search/model/dictionaryEntryType.ts b/packages/client-search/model/dictionaryEntryType.ts new file mode 100644 index 000000000..f3f97e15b --- /dev/null +++ b/packages/client-search/model/dictionaryEntryType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Whether a dictionary entry is provided by Algolia (standard), or has been added by you (custom). + */ +export type DictionaryEntryType = 'custom' | 'standard'; diff --git a/packages/client-search/model/dictionaryLanguage.ts b/packages/client-search/model/dictionaryLanguage.ts new file mode 100644 index 000000000..7858762a1 --- /dev/null +++ b/packages/client-search/model/dictionaryLanguage.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Dictionary type. If `null`, this dictionary type isn\'t supported for the language. + */ +export type DictionaryLanguage = { + /** + * Number of custom dictionary entries. + */ + nbCustomEntries?: number; +}; diff --git a/packages/client-search/model/dictionarySettingsParams.ts b/packages/client-search/model/dictionarySettingsParams.ts new file mode 100644 index 000000000..053d5e85d --- /dev/null +++ b/packages/client-search/model/dictionarySettingsParams.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { StandardEntries } from './standardEntries'; + +/** + * Turn on or off the built-in Algolia stop words for a specific language. + */ +export type DictionarySettingsParams = { + disableStandardEntries: StandardEntries; +}; diff --git a/packages/client-search/model/dictionaryType.ts b/packages/client-search/model/dictionaryType.ts new file mode 100644 index 000000000..7b3e1fcf0 --- /dev/null +++ b/packages/client-search/model/dictionaryType.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DictionaryType = 'plurals' | 'stopwords' | 'compounds'; diff --git a/packages/client-search/model/distinct.ts b/packages/client-search/model/distinct.ts new file mode 100644 index 000000000..dc87dfb00 --- /dev/null +++ b/packages/client-search/model/distinct.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Determines how many records of a group are included in the search results. Records with the same value for the `attributeForDistinct` attribute are considered a group. The `distinct` setting controls how many members of the group are returned. This is useful for [deduplication and grouping](https://www.algolia.com/doc/guides/managing-results/refine-results/grouping/#introducing-algolias-distinct-feature). The `distinct` setting is ignored if `attributeForDistinct` is not set. + */ +export type Distinct = boolean | number; diff --git a/packages/client-search/model/edit.ts b/packages/client-search/model/edit.ts new file mode 100644 index 000000000..b77d006e3 --- /dev/null +++ b/packages/client-search/model/edit.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { EditType } from './editType'; + +export type Edit = { + type?: EditType; + + /** + * Text or patterns to remove from the query string. + */ + delete?: string; + + /** + * Text to be added in place of the deleted text inside the query string. + */ + insert?: string; +}; diff --git a/packages/client-search/model/editType.ts b/packages/client-search/model/editType.ts new file mode 100644 index 000000000..27ed9b621 --- /dev/null +++ b/packages/client-search/model/editType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Type of edit. + */ +export type EditType = 'remove' | 'replace'; diff --git a/packages/client-search/model/errorBase.ts b/packages/client-search/model/errorBase.ts new file mode 100644 index 000000000..960e509cb --- /dev/null +++ b/packages/client-search/model/errorBase.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Error. + */ +export type ErrorBase = Record & { + message?: string; +}; diff --git a/packages/client-search/model/exactOnSingleWordQuery.ts b/packages/client-search/model/exactOnSingleWordQuery.ts new file mode 100644 index 000000000..d01b358f6 --- /dev/null +++ b/packages/client-search/model/exactOnSingleWordQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Determines how the [Exact ranking criterion](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/adjust-exact-settings/#turn-off-exact-for-some-attributes) is computed when the search query has only one word. - `attribute`. The Exact ranking criterion is 1 if the query word and attribute value are the same. For example, a search for \"road\" will match the value \"road\", but not \"road trip\". - `none`. The Exact ranking criterion is ignored on single-word searches. - `word`. The Exact ranking criterion is 1 if the query word is found in the attribute value. The query word must have at least 3 characters and must not be a stop word. Only exact matches will be highlighted, partial and prefix matches won\'t. + */ +export type ExactOnSingleWordQuery = 'attribute' | 'none' | 'word'; diff --git a/packages/client-search/model/exhaustive.ts b/packages/client-search/model/exhaustive.ts new file mode 100644 index 000000000..6e578adf1 --- /dev/null +++ b/packages/client-search/model/exhaustive.ts @@ -0,0 +1,31 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Whether certain properties of the search response are calculated exhaustive (exact) or approximated. + */ +export type Exhaustive = { + /** + * Whether the facet count is exhaustive (`true`) or approximate (`false`). See the [related discussion](https://support.algolia.com/hc/en-us/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate-). + */ + facetsCount?: boolean; + + /** + * The value is `false` if not all facet values are retrieved. + */ + facetValues?: boolean; + + /** + * Whether the `nbHits` is exhaustive (`true`) or approximate (`false`). When the query takes more than 50ms to be processed, the engine makes an approximation. This can happen when using complex filters on millions of records, when typo-tolerance was not exhaustive, or when enough hits have been retrieved (for example, after the engine finds 10,000 exact matches). `nbHits` is reported as non-exhaustive whenever an approximation is made, even if the approximation didn’t, in the end, impact the exhaustivity of the query. + */ + nbHits?: boolean; + + /** + * Rules matching exhaustivity. The value is `false` if rules were enable for this query, and could not be fully processed due a timeout. This is generally caused by the number of alternatives (such as typos) which is too large. + */ + rulesMatch?: boolean; + + /** + * Whether the typo search was exhaustive (`true`) or approximate (`false`). An approximation is done when the typo search query part takes more than 10% of the query budget (ie. 5ms by default) to be processed (this can happen when a lot of typo alternatives exist for the query). This field will not be included when typo-tolerance is entirely disabled. + */ + typo?: boolean; +}; diff --git a/packages/client-search/model/facetFilters.ts b/packages/client-search/model/facetFilters.ts new file mode 100644 index 000000000..0dc5e336e --- /dev/null +++ b/packages/client-search/model/facetFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter the search by facet values, so that only records with the same facet values are retrieved. **Prefer using the `filters` parameter, which supports all filter types and combinations with boolean operators.** - `[filter1, filter2]` is interpreted as `filter1 AND filter2`. - `[[filter1, filter2], filter3]` is interpreted as `filter1 OR filter2 AND filter3`. - `facet:-value` is interpreted as `NOT facet:value`. While it\'s best to avoid attributes that start with a `-`, you can still filter them by escaping with a backslash: `facet:\\-value`. + */ +export type FacetFilters = Array | string; diff --git a/packages/client-search/model/facetHits.ts b/packages/client-search/model/facetHits.ts new file mode 100644 index 000000000..bd205a61e --- /dev/null +++ b/packages/client-search/model/facetHits.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type FacetHits = { + /** + * Facet value. + */ + value: string; + + /** + * Highlighted attribute value, including HTML tags. + */ + highlighted: string; + + /** + * Number of records with this facet value. [The count may be approximated](https://support.algolia.com/hc/en-us/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate-). + */ + count: number; +}; diff --git a/packages/client-search/model/facetOrdering.ts b/packages/client-search/model/facetOrdering.ts new file mode 100644 index 000000000..18b84be27 --- /dev/null +++ b/packages/client-search/model/facetOrdering.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Facets } from './facets'; +import type { Value } from './value'; + +/** + * Order of facet names and facet values in your UI. + */ +export type FacetOrdering = { + facets?: Facets; + + /** + * Order of facet values. One object for each facet. + */ + values?: { [key: string]: Value }; +}; diff --git a/packages/client-search/model/facetStats.ts b/packages/client-search/model/facetStats.ts new file mode 100644 index 000000000..f8bb276a8 --- /dev/null +++ b/packages/client-search/model/facetStats.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type FacetStats = { + /** + * Minimum value in the results. + */ + min?: number; + + /** + * Maximum value in the results. + */ + max?: number; + + /** + * Average facet value in the results. + */ + avg?: number; + + /** + * Sum of all values in the results. + */ + sum?: number; +}; diff --git a/packages/client-search/model/facets.ts b/packages/client-search/model/facets.ts new file mode 100644 index 000000000..d99f83ff2 --- /dev/null +++ b/packages/client-search/model/facets.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Order of facet names. + */ +export type Facets = { + /** + * Explicit order of facets or facet values. This setting lets you always show specific facets or facet values at the top of the list. + */ + order?: Array; +}; diff --git a/packages/client-search/model/fetchedIndex.ts b/packages/client-search/model/fetchedIndex.ts new file mode 100644 index 000000000..c463d407d --- /dev/null +++ b/packages/client-search/model/fetchedIndex.ts @@ -0,0 +1,63 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type FetchedIndex = { + /** + * Index name. + */ + name: string; + + /** + * Index creation date. An empty string means that the index has no records. + */ + createdAt: string; + + /** + * Date and time when the object was updated, in RFC 3339 format. + */ + updatedAt: string; + + /** + * Number of records contained in the index. + */ + entries: number; + + /** + * Number of bytes of the index in minified format. + */ + dataSize: number; + + /** + * Number of bytes of the index binary file. + */ + fileSize: number; + + /** + * Last build time. + */ + lastBuildTimeS: number; + + /** + * Number of pending indexing operations. This value is deprecated and should not be used. + */ + numberOfPendingTasks: number; + + /** + * A boolean which says whether the index has pending tasks. This value is deprecated and should not be used. + */ + pendingTask: boolean; + + /** + * Only present if the index is a replica. Contains the name of the related primary index. + */ + primary?: string; + + /** + * Only present if the index is a primary index with replicas. Contains the names of all linked replicas. + */ + replicas?: Array; + + /** + * Only present if the index is a [virtual replica](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/how-to/sort-an-index-alphabetically/#virtual-replicas). + */ + virtual?: boolean; +}; diff --git a/packages/client-search/model/getApiKeyResponse.ts b/packages/client-search/model/getApiKeyResponse.ts new file mode 100644 index 000000000..f88d1005d --- /dev/null +++ b/packages/client-search/model/getApiKeyResponse.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ApiKey } from './apiKey'; +import type { BaseGetApiKeyResponse } from './baseGetApiKeyResponse'; + +export type GetApiKeyResponse = BaseGetApiKeyResponse & ApiKey; diff --git a/packages/client-search/model/getDictionarySettingsResponse.ts b/packages/client-search/model/getDictionarySettingsResponse.ts new file mode 100644 index 000000000..fcd0a145a --- /dev/null +++ b/packages/client-search/model/getDictionarySettingsResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { StandardEntries } from './standardEntries'; + +export type GetDictionarySettingsResponse = { + disableStandardEntries: StandardEntries; +}; diff --git a/packages/client-search/model/getLogsResponse.ts b/packages/client-search/model/getLogsResponse.ts new file mode 100644 index 000000000..eb2e90c6e --- /dev/null +++ b/packages/client-search/model/getLogsResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Log } from './log'; + +export type GetLogsResponse = { + logs: Array; +}; diff --git a/packages/client-search/model/getObjectsParams.ts b/packages/client-search/model/getObjectsParams.ts new file mode 100644 index 000000000..637737cf1 --- /dev/null +++ b/packages/client-search/model/getObjectsParams.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { GetObjectsRequest } from './getObjectsRequest'; + +/** + * Request parameters. + */ +export type GetObjectsParams = { + requests: Array; +}; diff --git a/packages/client-search/model/getObjectsRequest.ts b/packages/client-search/model/getObjectsRequest.ts new file mode 100644 index 000000000..0c701e0e6 --- /dev/null +++ b/packages/client-search/model/getObjectsRequest.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Request body for retrieving records. + */ +export type GetObjectsRequest = { + /** + * Attributes to retrieve. If not specified, all retrievable attributes are returned. + */ + attributesToRetrieve?: Array; + + /** + * Object ID for the record to retrieve. + */ + objectID: string; + + /** + * Index from which to retrieve the records. + */ + indexName: string; +}; diff --git a/packages/client-search/model/getObjectsResponse.ts b/packages/client-search/model/getObjectsResponse.ts new file mode 100644 index 000000000..7d78ce6cc --- /dev/null +++ b/packages/client-search/model/getObjectsResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type GetObjectsResponse> = { + /** + * An optional status message. + */ + message?: string; + + /** + * Retrieved records. + */ + results: T[]; +}; diff --git a/packages/client-search/model/getTaskResponse.ts b/packages/client-search/model/getTaskResponse.ts new file mode 100644 index 000000000..b8a4c6b85 --- /dev/null +++ b/packages/client-search/model/getTaskResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TaskStatus } from './taskStatus'; + +export type GetTaskResponse = { + status: TaskStatus; +}; diff --git a/packages/client-search/model/getTopUserIdsResponse.ts b/packages/client-search/model/getTopUserIdsResponse.ts new file mode 100644 index 000000000..8af7dc18c --- /dev/null +++ b/packages/client-search/model/getTopUserIdsResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { UserId } from './userId'; + +/** + * User IDs and clusters. + */ +export type GetTopUserIdsResponse = { + /** + * Key-value pairs with cluster names as keys and lists of users with the highest number of records per cluster as values. + */ + topUsers: Array<{ [key: string]: Array }>; +}; diff --git a/packages/client-search/model/hasPendingMappingsResponse.ts b/packages/client-search/model/hasPendingMappingsResponse.ts new file mode 100644 index 000000000..2c4a41138 --- /dev/null +++ b/packages/client-search/model/hasPendingMappingsResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type HasPendingMappingsResponse = { + /** + * Whether there are clusters undergoing migration, creation, or deletion. + */ + pending: boolean; + + /** + * Cluster pending mapping state: migrating, creating, deleting. + */ + clusters?: { [key: string]: Array }; +}; diff --git a/packages/client-search/model/highlightResult.ts b/packages/client-search/model/highlightResult.ts new file mode 100644 index 000000000..102271a17 --- /dev/null +++ b/packages/client-search/model/highlightResult.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { HighlightResultOption } from './highlightResultOption'; + +export type HighlightResult = HighlightResultOption | { [key: string]: HighlightResult } | Array; diff --git a/packages/client-search/model/highlightResultOption.ts b/packages/client-search/model/highlightResultOption.ts new file mode 100644 index 000000000..47ab0b748 --- /dev/null +++ b/packages/client-search/model/highlightResultOption.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchLevel } from './matchLevel'; + +/** + * Surround words that match the query with HTML tags for highlighting. + */ +export type HighlightResultOption = { + /** + * Highlighted attribute value, including HTML tags. + */ + value: string; + + matchLevel: MatchLevel; + + /** + * List of matched words from the search query. + */ + matchedWords: Array; + + /** + * Whether the entire attribute value is highlighted. + */ + fullyHighlighted?: boolean; +}; diff --git a/packages/client-search/model/hit.ts b/packages/client-search/model/hit.ts new file mode 100644 index 000000000..da626f902 --- /dev/null +++ b/packages/client-search/model/hit.ts @@ -0,0 +1,29 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { HighlightResult } from './highlightResult'; +import type { RankingInfo } from './rankingInfo'; +import type { SnippetResult } from './snippetResult'; + +/** + * Search result. A hit is a record from your index, augmented with special attributes for highlighting, snippeting, and ranking. + */ +export type Hit> = T & { + /** + * Unique record identifier. + */ + objectID: string; + + /** + * Surround words that match the query with HTML tags for highlighting. + */ + _highlightResult?: { [key: string]: HighlightResult }; + + /** + * Snippets that show the context around a matching search query. + */ + _snippetResult?: { [key: string]: SnippetResult }; + + _rankingInfo?: RankingInfo; + + _distinctSeqID?: number; +}; diff --git a/packages/client-search/model/ignorePlurals.ts b/packages/client-search/model/ignorePlurals.ts new file mode 100644 index 000000000..5e4ac00cb --- /dev/null +++ b/packages/client-search/model/ignorePlurals.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BooleanString } from './booleanString'; +import type { SupportedLanguage } from './supportedLanguage'; + +/** + * Treat singular, plurals, and other forms of declensions as equivalent. You should only use this feature for the languages used in your index. + */ +export type IgnorePlurals = Array | BooleanString | boolean; diff --git a/packages/client-search/model/index.ts b/packages/client-search/model/index.ts new file mode 100644 index 000000000..678803dc8 --- /dev/null +++ b/packages/client-search/model/index.ts @@ -0,0 +1,183 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export * from './acl'; +export * from './action'; +export * from './addApiKeyResponse'; +export * from './advancedSyntaxFeatures'; +export * from './alternativesAsExact'; +export * from './anchoring'; +export * from './apiKey'; +export * from './apiKeyOperation'; +export * from './aroundPrecision'; +export * from './aroundRadius'; +export * from './aroundRadiusAll'; +export * from './assignUserIdParams'; +export * from './attributeToUpdate'; +export * from './automaticFacetFilter'; +export * from './automaticFacetFilters'; +export * from './banner'; +export * from './bannerImage'; +export * from './bannerImageUrl'; +export * from './bannerLink'; +export * from './baseGetApiKeyResponse'; +export * from './baseIndexSettings'; +export * from './baseSearchParams'; +export * from './baseSearchParamsWithoutQuery'; +export * from './baseSearchResponse'; +export * from './batchAssignUserIdsParams'; +export * from './batchDictionaryEntriesParams'; +export * from './batchDictionaryEntriesRequest'; +export * from './batchParams'; +export * from './batchRequest'; +export * from './batchResponse'; +export * from './batchWriteParams'; +export * from './booleanString'; +export * from './browsePagination'; +export * from './browseParams'; +export * from './browseParamsObject'; +export * from './browseResponse'; +export * from './builtInOperation'; +export * from './builtInOperationType'; +export * from './builtInOperationValue'; +export * from './clientMethodProps'; +export * from './condition'; +export * from './consequence'; +export * from './consequenceHide'; +export * from './consequenceParams'; +export * from './consequenceQuery'; +export * from './consequenceQueryObject'; +export * from './createdAtResponse'; +export * from './cursor'; +export * from './deleteApiKeyResponse'; +export * from './deleteByParams'; +export * from './deletedAtResponse'; +export * from './deleteSourceResponse'; +export * from './dictionaryAction'; +export * from './dictionaryEntry'; +export * from './dictionaryEntryState'; +export * from './dictionaryEntryType'; +export * from './dictionaryLanguage'; +export * from './dictionarySettingsParams'; +export * from './dictionaryType'; +export * from './distinct'; +export * from './edit'; +export * from './editType'; +export * from './errorBase'; +export * from './exactOnSingleWordQuery'; +export * from './exhaustive'; +export * from './facetFilters'; +export * from './facetHits'; +export * from './facetOrdering'; +export * from './facets'; +export * from './facetStats'; +export * from './fetchedIndex'; +export * from './getApiKeyResponse'; +export * from './getDictionarySettingsResponse'; +export * from './getLogsResponse'; +export * from './getObjectsParams'; +export * from './getObjectsRequest'; +export * from './getObjectsResponse'; +export * from './getTaskResponse'; +export * from './getTopUserIdsResponse'; +export * from './hasPendingMappingsResponse'; +export * from './highlightResult'; +export * from './highlightResultOption'; +export * from './hit'; +export * from './ignorePlurals'; +export * from './indexSettings'; +export * from './indexSettingsAsSearchParams'; +export * from './insideBoundingBox'; +export * from './languages'; +export * from './listApiKeysResponse'; +export * from './listClustersResponse'; +export * from './listIndicesResponse'; +export * from './listUserIdsResponse'; +export * from './log'; +export * from './logQuery'; +export * from './logType'; +export * from './matchedGeoLocation'; +export * from './matchLevel'; +export * from './mode'; +export * from './multipleBatchRequest'; +export * from './multipleBatchResponse'; +export * from './numericFilters'; +export * from './operationIndexParams'; +export * from './operationType'; +export * from './optionalFilters'; +export * from './optionalWords'; +export * from './params'; +export * from './personalization'; +export * from './promote'; +export * from './promoteObjectID'; +export * from './promoteObjectIDs'; +export * from './queryType'; +export * from './range'; +export * from './rankingInfo'; +export * from './redirect'; +export * from './redirectRuleIndexData'; +export * from './redirectRuleIndexMetadata'; +export * from './redirectURL'; +export * from './removeStopWords'; +export * from './removeUserIdResponse'; +export * from './removeWordsIfNoResults'; +export * from './renderingContent'; +export * from './replaceAllObjectsResponse'; +export * from './replaceSourceResponse'; +export * from './reRankingApplyFilter'; +export * from './rule'; +export * from './saveObjectResponse'; +export * from './saveSynonymResponse'; +export * from './scopeType'; +export * from './searchDictionaryEntriesParams'; +export * from './searchDictionaryEntriesResponse'; +export * from './searchForFacets'; +export * from './searchForFacetsOptions'; +export * from './searchForFacetValuesRequest'; +export * from './searchForFacetValuesResponse'; +export * from './searchForHits'; +export * from './searchForHitsOptions'; +export * from './searchHits'; +export * from './searchMethodParams'; +export * from './searchPagination'; +export * from './searchParams'; +export * from './searchParamsObject'; +export * from './searchParamsQuery'; +export * from './searchParamsString'; +export * from './searchQuery'; +export * from './searchResponse'; +export * from './searchResponses'; +export * from './searchResult'; +export * from './searchRulesParams'; +export * from './searchRulesResponse'; +export * from './searchStrategy'; +export * from './searchSynonymsParams'; +export * from './searchSynonymsResponse'; +export * from './searchTypeDefault'; +export * from './searchTypeFacet'; +export * from './searchUserIdsParams'; +export * from './searchUserIdsResponse'; +export * from './securedApiKeyRestrictions'; +export * from './semanticSearch'; +export * from './settingsResponse'; +export * from './snippetResult'; +export * from './snippetResultOption'; +export * from './sortRemainingBy'; +export * from './source'; +export * from './standardEntries'; +export * from './supportedLanguage'; +export * from './synonymHit'; +export * from './synonymType'; +export * from './tagFilters'; +export * from './taskStatus'; +export * from './timeRange'; +export * from './typoTolerance'; +export * from './typoToleranceEnum'; +export * from './updateApiKeyResponse'; +export * from './updatedAtResponse'; +export * from './updatedAtWithObjectIdResponse'; +export * from './userHighlightResult'; +export * from './userHit'; +export * from './userId'; +export * from './value'; +export * from './widgets'; +export * from './withPrimary'; diff --git a/packages/client-search/model/indexSettings.ts b/packages/client-search/model/indexSettings.ts new file mode 100644 index 000000000..7f2e9acde --- /dev/null +++ b/packages/client-search/model/indexSettings.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseIndexSettings } from './baseIndexSettings'; +import type { IndexSettingsAsSearchParams } from './indexSettingsAsSearchParams'; + +/** + * Index settings. + */ +export type IndexSettings = BaseIndexSettings & IndexSettingsAsSearchParams; diff --git a/packages/client-search/model/indexSettingsAsSearchParams.ts b/packages/client-search/model/indexSettingsAsSearchParams.ts new file mode 100644 index 000000000..6d54e76c2 --- /dev/null +++ b/packages/client-search/model/indexSettingsAsSearchParams.ts @@ -0,0 +1,188 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AdvancedSyntaxFeatures } from './advancedSyntaxFeatures'; +import type { AlternativesAsExact } from './alternativesAsExact'; +import type { Distinct } from './distinct'; +import type { ExactOnSingleWordQuery } from './exactOnSingleWordQuery'; +import type { IgnorePlurals } from './ignorePlurals'; +import type { Mode } from './mode'; +import type { OptionalWords } from './optionalWords'; +import type { QueryType } from './queryType'; +import type { ReRankingApplyFilter } from './reRankingApplyFilter'; +import type { RemoveStopWords } from './removeStopWords'; +import type { RemoveWordsIfNoResults } from './removeWordsIfNoResults'; +import type { RenderingContent } from './renderingContent'; +import type { SemanticSearch } from './semanticSearch'; +import type { SupportedLanguage } from './supportedLanguage'; +import type { TypoTolerance } from './typoTolerance'; + +export type IndexSettingsAsSearchParams = { + /** + * Attributes to include in the API response. To reduce the size of your response, you can retrieve only some of the attributes. Attribute names are case-sensitive. - `*` retrieves all attributes, except attributes included in the `customRanking` and `unretrievableAttributes` settings. - To retrieve all attributes except a specific one, prefix the attribute with a dash and combine it with the `*`: `[\"*\", \"-ATTRIBUTE\"]`. - The `objectID` attribute is always included. + */ + attributesToRetrieve?: Array; + + /** + * Determines the order in which Algolia returns your results. By default, each entry corresponds to a [ranking criteria](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/). The tie-breaking algorithm sequentially applies each criterion in the order they\'re specified. If you configure a replica index for [sorting by an attribute](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/how-to/sort-by-attribute/), you put the sorting attribute at the top of the list. **Modifiers** - `asc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in ascending order. - `desc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in descending order. Before you modify the default setting, you should test your changes in the dashboard, and by [A/B testing](https://www.algolia.com/doc/guides/ab-testing/what-is-ab-testing/). + */ + ranking?: Array; + + /** + * Relevancy threshold below which less relevant results aren\'t included in the results. You can only set `relevancyStrictness` on [virtual replica indices](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/replicas/#what-are-virtual-replicas). Use this setting to strike a balance between the relevance and number of returned results. + */ + relevancyStrictness?: number; + + /** + * Attributes to highlight. By default, all searchable attributes are highlighted. Use `*` to highlight all attributes or use an empty array `[]` to turn off highlighting. Attribute names are case-sensitive. With highlighting, strings that match the search query are surrounded by HTML tags defined by `highlightPreTag` and `highlightPostTag`. You can use this to visually highlight matching parts of a search query in your UI. For more information, see [Highlighting and snippeting](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/highlighting-snippeting/js/). + */ + attributesToHighlight?: Array; + + /** + * Attributes for which to enable snippets. Attribute names are case-sensitive. Snippets provide additional context to matched words. If you enable snippets, they include 10 words, including the matched word. The matched word will also be wrapped by HTML tags for highlighting. You can adjust the number of words with the following notation: `ATTRIBUTE:NUMBER`, where `NUMBER` is the number of words to be extracted. + */ + attributesToSnippet?: Array; + + /** + * HTML tag to insert before the highlighted parts in all highlighted results and snippets. + */ + highlightPreTag?: string; + + /** + * HTML tag to insert after the highlighted parts in all highlighted results and snippets. + */ + highlightPostTag?: string; + + /** + * String used as an ellipsis indicator when a snippet is truncated. + */ + snippetEllipsisText?: string; + + /** + * Whether to restrict highlighting and snippeting to items that at least partially matched the search query. By default, all items are highlighted and snippeted. + */ + restrictHighlightAndSnippetArrays?: boolean; + + /** + * Number of hits per page. + */ + hitsPerPage?: number; + + /** + * Minimum number of characters a word in the search query must contain to accept matches with [one typo](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#configuring-word-length-for-typos). + */ + minWordSizefor1Typo?: number; + + /** + * Minimum number of characters a word in the search query must contain to accept matches with [two typos](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#configuring-word-length-for-typos). + */ + minWordSizefor2Typos?: number; + + typoTolerance?: TypoTolerance; + + /** + * Whether to allow typos on numbers in the search query. Turn off this setting to reduce the number of irrelevant matches when searching in large sets of similar numbers. + */ + allowTyposOnNumericTokens?: boolean; + + /** + * Attributes for which you want to turn off [typo tolerance](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/). Attribute names are case-sensitive. Returning only exact matches can help when: - [Searching in hyphenated attributes](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/how-to/how-to-search-in-hyphenated-attributes/). - Reducing the number of matches when you have too many. This can happen with attributes that are long blocks of text, such as product descriptions. Consider alternatives such as `disableTypoToleranceOnWords` or adding synonyms if your attributes have intentional unusual spellings that might look like typos. + */ + disableTypoToleranceOnAttributes?: Array; + + ignorePlurals?: IgnorePlurals; + + removeStopWords?: RemoveStopWords; + + /** + * Languages for language-specific query processing steps such as plurals, stop-word removal, and word-detection dictionaries. This setting sets a default list of languages used by the `removeStopWords` and `ignorePlurals` settings. This setting also sets a dictionary for word detection in the logogram-based [CJK](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/normalization/#normalization-for-logogram-based-languages-cjk) languages. To support this, you must place the CJK language **first**. **You should always specify a query language.** If you don\'t specify an indexing language, the search engine uses all [supported languages](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/supported-languages/), or the languages you specified with the `ignorePlurals` or `removeStopWords` parameters. This can lead to unexpected search results. For more information, see [Language-specific configuration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/). + */ + queryLanguages?: Array; + + /** + * Whether to split compound words in the query into their building blocks. For more information, see [Word segmentation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/#splitting-compound-words). Word segmentation is supported for these languages: German, Dutch, Finnish, Swedish, and Norwegian. Decompounding doesn\'t work for words with [non-spacing mark Unicode characters](https://www.charactercodes.net/category/non-spacing_mark). For example, `Gartenstühle` won\'t be decompounded if the `ü` consists of `u` (U+0075) and `◌̈` (U+0308). + */ + decompoundQuery?: boolean; + + /** + * Whether to enable rules. + */ + enableRules?: boolean; + + /** + * Whether to enable Personalization. + */ + enablePersonalization?: boolean; + + queryType?: QueryType; + + removeWordsIfNoResults?: RemoveWordsIfNoResults; + + mode?: Mode; + + semanticSearch?: SemanticSearch; + + /** + * Whether to support phrase matching and excluding words from search queries. Use the `advancedSyntaxFeatures` parameter to control which feature is supported. + */ + advancedSyntax?: boolean; + + optionalWords?: OptionalWords | null; + + /** + * Searchable attributes for which you want to [turn off the Exact ranking criterion](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/adjust-exact-settings/#turn-off-exact-for-some-attributes). Attribute names are case-sensitive. This can be useful for attributes with long values, where the likelihood of an exact match is high, such as product descriptions. Turning off the Exact ranking criterion for these attributes favors exact matching on other attributes. This reduces the impact of individual attributes with a lot of content on ranking. + */ + disableExactOnAttributes?: Array; + + exactOnSingleWordQuery?: ExactOnSingleWordQuery; + + /** + * Determine which plurals and synonyms should be considered an exact matches. By default, Algolia treats singular and plural forms of a word, and single-word synonyms, as [exact](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#exact) matches when searching. For example: - \"swimsuit\" and \"swimsuits\" are treated the same - \"swimsuit\" and \"swimwear\" are treated the same (if they are [synonyms](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/adding-synonyms/#regular-synonyms)). - `ignorePlurals`. Plurals and similar declensions added by the `ignorePlurals` setting are considered exact matches. - `singleWordSynonym`. Single-word synonyms, such as \"NY\" = \"NYC\", are considered exact matches. - `multiWordsSynonym`. Multi-word synonyms, such as \"NY\" = \"New York\", are considered exact matches. + */ + alternativesAsExact?: Array; + + /** + * Advanced search syntax features you want to support. - `exactPhrase`. Phrases in quotes must match exactly. For example, `sparkly blue \"iPhone case\"` only returns records with the exact string \"iPhone case\". - `excludeWords`. Query words prefixed with a `-` must not occur in a record. For example, `search -engine` matches records that contain \"search\" but not \"engine\". This setting only has an effect if `advancedSyntax` is true. + */ + advancedSyntaxFeatures?: Array; + + distinct?: Distinct; + + /** + * Whether to replace a highlighted word with the matched synonym. By default, the original words are highlighted even if a synonym matches. For example, with `home` as a synonym for `house` and a search for `home`, records matching either \"home\" or \"house\" are included in the search results, and either \"home\" or \"house\" are highlighted. With `replaceSynonymsInHighlight` set to `true`, a search for `home` still matches the same records, but all occurrences of \"house\" are replaced by \"home\" in the highlighted response. + */ + replaceSynonymsInHighlight?: boolean; + + /** + * Minimum proximity score for two matching words. This adjusts the [Proximity ranking criterion](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#proximity) by equally scoring matches that are farther apart. For example, if `minProximity` is 2, neighboring matches and matches with one word between them would have the same score. + */ + minProximity?: number; + + /** + * Properties to include in the API response of search and browse requests. By default, all response properties are included. To reduce the response size, you can select which properties should be included. An empty list may lead to an empty API response (except properties you can\'t exclude). You can\'t exclude these properties: `message`, `warning`, `cursor`, `abTestVariantID`, or any property added by setting `getRankingInfo` to true. Your search depends on the `hits` field. If you omit this field, searches won\'t return any results. Your UI might also depend on other properties, for example, for pagination. Before restricting the response size, check the impact on your search experience. + */ + responseFields?: Array; + + /** + * Maximum number of facet values to return for each facet. + */ + maxValuesPerFacet?: number; + + /** + * Order in which to retrieve facet values. - `count`. Facet values are retrieved by decreasing count. The count is the number of matching records containing this facet value. - `alpha`. Retrieve facet values alphabetically. This setting doesn\'t influence how facet values are displayed in your UI (see `renderingContent`). For more information, see [facet value display](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/facet-display/js/). + */ + sortFacetValuesBy?: string; + + /** + * Whether the best matching attribute should be determined by minimum proximity. This setting only affects ranking if the Attribute ranking criterion comes before Proximity in the `ranking` setting. If true, the best matching attribute is selected based on the minimum proximity of multiple matches. Otherwise, the best matching attribute is determined by the order in the `searchableAttributes` setting. + */ + attributeCriteriaComputedByMinProximity?: boolean; + + renderingContent?: RenderingContent; + + /** + * Whether this search will use [Dynamic Re-Ranking](https://www.algolia.com/doc/guides/algolia-ai/re-ranking/). This setting only has an effect if you activated Dynamic Re-Ranking for this index in the Algolia dashboard. + */ + enableReRanking?: boolean; + + reRankingApplyFilter?: ReRankingApplyFilter | null; +}; diff --git a/packages/client-search/model/insideBoundingBox.ts b/packages/client-search/model/insideBoundingBox.ts new file mode 100644 index 000000000..8a498532f --- /dev/null +++ b/packages/client-search/model/insideBoundingBox.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type InsideBoundingBox = string | Array>; diff --git a/packages/client-search/model/languages.ts b/packages/client-search/model/languages.ts new file mode 100644 index 000000000..879a847e8 --- /dev/null +++ b/packages/client-search/model/languages.ts @@ -0,0 +1,14 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DictionaryLanguage } from './dictionaryLanguage'; + +/** + * Dictionary language. + */ +export type Languages = { + plurals: DictionaryLanguage | null; + + stopwords: DictionaryLanguage | null; + + compounds: DictionaryLanguage | null; +}; diff --git a/packages/client-search/model/listApiKeysResponse.ts b/packages/client-search/model/listApiKeysResponse.ts new file mode 100644 index 000000000..e2f566a7e --- /dev/null +++ b/packages/client-search/model/listApiKeysResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { GetApiKeyResponse } from './getApiKeyResponse'; + +export type ListApiKeysResponse = { + /** + * API keys. + */ + keys: Array; +}; diff --git a/packages/client-search/model/listClustersResponse.ts b/packages/client-search/model/listClustersResponse.ts new file mode 100644 index 000000000..98df77ba5 --- /dev/null +++ b/packages/client-search/model/listClustersResponse.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Clusters. + */ +export type ListClustersResponse = { + /** + * Key-value pairs with cluster names as keys and lists of users with the highest number of records per cluster as values. + */ + topUsers: Array; +}; diff --git a/packages/client-search/model/listIndicesResponse.ts b/packages/client-search/model/listIndicesResponse.ts new file mode 100644 index 000000000..c482300bd --- /dev/null +++ b/packages/client-search/model/listIndicesResponse.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FetchedIndex } from './fetchedIndex'; + +export type ListIndicesResponse = { + /** + * All indices in your Algolia application. + */ + items: Array; + + /** + * Number of pages. + */ + nbPages?: number; +}; diff --git a/packages/client-search/model/listUserIdsResponse.ts b/packages/client-search/model/listUserIdsResponse.ts new file mode 100644 index 000000000..191aba967 --- /dev/null +++ b/packages/client-search/model/listUserIdsResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { UserId } from './userId'; + +/** + * User ID data. + */ +export type ListUserIdsResponse = { + /** + * User IDs. + */ + userIDs: Array; +}; diff --git a/packages/client-search/model/log.ts b/packages/client-search/model/log.ts new file mode 100644 index 000000000..e52327f0e --- /dev/null +++ b/packages/client-search/model/log.ts @@ -0,0 +1,80 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { LogQuery } from './logQuery'; + +export type Log = { + /** + * Date and time of the API request, in RFC 3339 format. + */ + timestamp: string; + + /** + * HTTP method of the request. + */ + method: string; + + /** + * HTTP status code of the response. + */ + answer_code: string; + + /** + * Request body. + */ + query_body: string; + + /** + * Response body. + */ + answer: string; + + /** + * URL of the API endpoint. + */ + url: string; + + /** + * IP address of the client that performed the request. + */ + ip: string; + + /** + * Request headers (API keys are obfuscated). + */ + query_headers: string; + + /** + * SHA1 signature of the log entry. + */ + sha1: string; + + /** + * Number of API requests. + */ + nb_api_calls?: string; + + /** + * Processing time for the query in milliseconds. This doesn\'t include latency due to the network. + */ + processing_time_ms: string; + + /** + * Index targeted by the query. + */ + index?: string; + + /** + * Query parameters sent with the request. + */ + query_params?: string; + + /** + * Number of search results (hits) returned for the query. + */ + query_nb_hits?: string; + + /** + * Queries performed for the given request. + */ + inner_queries?: Array; +}; diff --git a/packages/client-search/model/logQuery.ts b/packages/client-search/model/logQuery.ts new file mode 100644 index 000000000..c821e3d69 --- /dev/null +++ b/packages/client-search/model/logQuery.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type LogQuery = { + /** + * Index targeted by the query. + */ + index_name?: string; + + /** + * A user identifier. + */ + user_token?: string; + + /** + * Unique query identifier. + */ + query_id?: string; +}; diff --git a/packages/client-search/model/logType.ts b/packages/client-search/model/logType.ts new file mode 100644 index 000000000..cb913fade --- /dev/null +++ b/packages/client-search/model/logType.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type LogType = 'all' | 'query' | 'build' | 'error'; diff --git a/packages/client-search/model/matchLevel.ts b/packages/client-search/model/matchLevel.ts new file mode 100644 index 000000000..2cb9f4d21 --- /dev/null +++ b/packages/client-search/model/matchLevel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Whether the whole query string matches or only a part. + */ +export type MatchLevel = 'none' | 'partial' | 'full'; diff --git a/packages/client-search/model/matchedGeoLocation.ts b/packages/client-search/model/matchedGeoLocation.ts new file mode 100644 index 000000000..018634191 --- /dev/null +++ b/packages/client-search/model/matchedGeoLocation.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type MatchedGeoLocation = { + /** + * Latitude of the matched location. + */ + lat?: number; + + /** + * Longitude of the matched location. + */ + lng?: number; + + /** + * Distance between the matched location and the search location (in meters). + */ + distance?: number; +}; diff --git a/packages/client-search/model/mode.ts b/packages/client-search/model/mode.ts new file mode 100644 index 000000000..36561b89e --- /dev/null +++ b/packages/client-search/model/mode.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Search mode the index will use to query for results. This setting only applies to indices, for which Algolia enabled NeuralSearch for you. + */ +export type Mode = 'neuralSearch' | 'keywordSearch'; diff --git a/packages/client-search/model/multipleBatchRequest.ts b/packages/client-search/model/multipleBatchRequest.ts new file mode 100644 index 000000000..05413d51b --- /dev/null +++ b/packages/client-search/model/multipleBatchRequest.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Action } from './action'; + +export type MultipleBatchRequest = { + action: Action; + + /** + * Operation arguments (varies with specified `action`). + */ + body?: Record; + + /** + * Index name (case-sensitive). + */ + indexName: string; +}; diff --git a/packages/client-search/model/multipleBatchResponse.ts b/packages/client-search/model/multipleBatchResponse.ts new file mode 100644 index 000000000..8cbecbbb3 --- /dev/null +++ b/packages/client-search/model/multipleBatchResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type MultipleBatchResponse = { + /** + * Task IDs. One for each index. + */ + taskID: { [key: string]: number }; + + /** + * Unique record identifiers. + */ + objectIDs: Array; +}; diff --git a/packages/client-search/model/numericFilters.ts b/packages/client-search/model/numericFilters.ts new file mode 100644 index 000000000..6129dc5d3 --- /dev/null +++ b/packages/client-search/model/numericFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter by numeric facets. **Prefer using the `filters` parameter, which supports all filter types and combinations with boolean operators.** You can use numeric comparison operators: `<`, `<=`, `=`, `!=`, `>`, `>=`. Comparisons are precise up to 3 decimals. You can also provide ranges: `facet: TO `. The range includes the lower and upper boundaries. The same combination rules apply as for `facetFilters`. + */ +export type NumericFilters = Array | string; diff --git a/packages/client-search/model/operationIndexParams.ts b/packages/client-search/model/operationIndexParams.ts new file mode 100644 index 000000000..d2adbc0af --- /dev/null +++ b/packages/client-search/model/operationIndexParams.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { OperationType } from './operationType'; +import type { ScopeType } from './scopeType'; + +export type OperationIndexParams = { + operation: OperationType; + + /** + * Index name (case-sensitive). + */ + destination: string; + + /** + * **Only for copying.** If you specify a scope, only the selected scopes are copied. Records and the other scopes are left unchanged. If you omit the `scope` parameter, everything is copied: records, settings, synonyms, and rules. + */ + scope?: Array; +}; diff --git a/packages/client-search/model/operationType.ts b/packages/client-search/model/operationType.ts new file mode 100644 index 000000000..7706bfcae --- /dev/null +++ b/packages/client-search/model/operationType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Operation to perform on the index. + */ +export type OperationType = 'move' | 'copy'; diff --git a/packages/client-search/model/optionalFilters.ts b/packages/client-search/model/optionalFilters.ts new file mode 100644 index 000000000..677b9239c --- /dev/null +++ b/packages/client-search/model/optionalFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filters to promote or demote records in the search results. Optional filters work like facet filters, but they don\'t exclude records from the search results. Records that match the optional filter rank before records that don\'t match. If you\'re using a negative filter `facet:-value`, matching records rank after records that don\'t match. - Optional filters don\'t work on virtual replicas. - Optional filters are applied _after_ sort-by attributes. - Optional filters are applied _before_ custom ranking attributes (in the default [ranking](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/)). - Optional filters don\'t work with numeric attributes. + */ +export type OptionalFilters = Array | string; diff --git a/packages/client-search/model/optionalWords.ts b/packages/client-search/model/optionalWords.ts new file mode 100644 index 000000000..2eed87ef2 --- /dev/null +++ b/packages/client-search/model/optionalWords.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Words that should be considered optional when found in the query. By default, records must match all words in the search query to be included in the search results. Adding optional words can help to increase the number of search results by running an additional search query that doesn\'t include the optional words. For example, if the search query is \"action video\" and \"video\" is an optional word, the search engine runs two queries. One for \"action video\" and one for \"action\". Records that match all words are ranked higher. For a search query with 4 or more words **and** all its words are optional, the number of matched words required for a record to be included in the search results increases for every 1,000 records: - If `optionalWords` has less than 10 words, the required number of matched words increases by 1: results 1 to 1,000 require 1 matched word, results 1,001 to 2000 need 2 matched words. - If `optionalWords` has 10 or more words, the number of required matched words increases by the number of optional words divided by 5 (rounded down). For example, with 18 optional words: results 1 to 1,000 require 1 matched word, results 1,001 to 2000 need 4 matched words. For more information, see [Optional words](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/empty-or-insufficient-results/#creating-a-list-of-optional-words). + */ +export type OptionalWords = string | Array; diff --git a/packages/client-search/model/params.ts b/packages/client-search/model/params.ts new file mode 100644 index 000000000..8dbd02c2f --- /dev/null +++ b/packages/client-search/model/params.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AutomaticFacetFilters } from './automaticFacetFilters'; +import type { ConsequenceQuery } from './consequenceQuery'; +import type { RenderingContent } from './renderingContent'; + +/** + * Parameters to apply to this search. You can use all search parameters, plus special `automaticFacetFilters`, `automaticOptionalFacetFilters`, and `query`. + */ +export type Params = { + query?: ConsequenceQuery; + + automaticFacetFilters?: AutomaticFacetFilters; + + automaticOptionalFacetFilters?: AutomaticFacetFilters; + + renderingContent?: RenderingContent; +}; diff --git a/packages/client-search/model/personalization.ts b/packages/client-search/model/personalization.ts new file mode 100644 index 000000000..c8efd58b1 --- /dev/null +++ b/packages/client-search/model/personalization.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Personalization = { + /** + * The score of the filters. + */ + filtersScore?: number; + + /** + * The score of the ranking. + */ + rankingScore?: number; + + /** + * The score of the event. + */ + score?: number; +}; diff --git a/packages/client-search/model/promote.ts b/packages/client-search/model/promote.ts new file mode 100644 index 000000000..c5dae881e --- /dev/null +++ b/packages/client-search/model/promote.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { PromoteObjectID } from './promoteObjectID'; +import type { PromoteObjectIDs } from './promoteObjectIDs'; + +export type Promote = PromoteObjectIDs | PromoteObjectID; diff --git a/packages/client-search/model/promoteObjectID.ts b/packages/client-search/model/promoteObjectID.ts new file mode 100644 index 000000000..6e2f37992 --- /dev/null +++ b/packages/client-search/model/promoteObjectID.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Record to promote. + */ +export type PromoteObjectID = { + /** + * Unique record identifier. + */ + objectID: string; + + /** + * Position in the search results where you want to show the promoted records. + */ + position: number; +}; diff --git a/packages/client-search/model/promoteObjectIDs.ts b/packages/client-search/model/promoteObjectIDs.ts new file mode 100644 index 000000000..dbf27be6c --- /dev/null +++ b/packages/client-search/model/promoteObjectIDs.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Records to promote. + */ +export type PromoteObjectIDs = { + /** + * Object IDs of the records you want to promote. The records are placed as a group at the `position`. For example, if you want to promote four records to position `0`, they will be the first four search results. + */ + objectIDs: Array; + + /** + * Position in the search results where you want to show the promoted records. + */ + position: number; +}; diff --git a/packages/client-search/model/queryType.ts b/packages/client-search/model/queryType.ts new file mode 100644 index 000000000..b16a40de3 --- /dev/null +++ b/packages/client-search/model/queryType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Determines if and how query words are interpreted as prefixes. By default, only the last query word is treated as a prefix (`prefixLast`). To turn off prefix search, use `prefixNone`. Avoid `prefixAll`, which treats all query words as prefixes. This might lead to counterintuitive results and makes your search slower. For more information, see [Prefix searching](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/prefix-searching/). + */ +export type QueryType = 'prefixLast' | 'prefixAll' | 'prefixNone'; diff --git a/packages/client-search/model/range.ts b/packages/client-search/model/range.ts new file mode 100644 index 000000000..780b75be7 --- /dev/null +++ b/packages/client-search/model/range.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Range object with lower and upper values in meters to define custom ranges. + */ +export type Range = { + /** + * Lower boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. + */ + from?: number; + + /** + * Upper boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. + */ + value?: number; +}; diff --git a/packages/client-search/model/rankingInfo.ts b/packages/client-search/model/rankingInfo.ts new file mode 100644 index 000000000..50c5a3058 --- /dev/null +++ b/packages/client-search/model/rankingInfo.ts @@ -0,0 +1,68 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchedGeoLocation } from './matchedGeoLocation'; +import type { Personalization } from './personalization'; + +/** + * Object with detailed information about the record\'s ranking. + */ +export type RankingInfo = { + /** + * Whether a filter matched the query. + */ + filters?: number; + + /** + * Position of the first matched word in the best matching attribute of the record. + */ + firstMatchedWord: number; + + /** + * Distance between the geo location in the search query and the best matching geo location in the record, divided by the geo precision (in meters). + */ + geoDistance: number; + + /** + * Precision used when computing the geo distance, in meters. + */ + geoPrecision?: number; + + matchedGeoLocation?: MatchedGeoLocation; + + personalization?: Personalization; + + /** + * Number of exactly matched words. + */ + nbExactWords: number; + + /** + * Number of typos encountered when matching the record. + */ + nbTypos: number; + + /** + * Whether the record was promoted by a rule. + */ + promoted?: boolean; + + /** + * Number of words between multiple matches in the query plus 1. For single word queries, `proximityDistance` is 0. + */ + proximityDistance?: number; + + /** + * Overall ranking of the record, expressed as a single integer. This attribute is internal. + */ + userScore: number; + + /** + * Number of matched words. + */ + words?: number; + + /** + * Whether the record is re-ranked. + */ + promotedByReRanking?: boolean; +}; diff --git a/packages/client-search/model/reRankingApplyFilter.ts b/packages/client-search/model/reRankingApplyFilter.ts new file mode 100644 index 000000000..6d4bd8b9f --- /dev/null +++ b/packages/client-search/model/reRankingApplyFilter.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Restrict [Dynamic Re-Ranking](https://www.algolia.com/doc/guides/algolia-ai/re-ranking/) to records that match these filters. + */ +export type ReRankingApplyFilter = Array | string; diff --git a/packages/client-search/model/redirect.ts b/packages/client-search/model/redirect.ts new file mode 100644 index 000000000..fa3ea30ff --- /dev/null +++ b/packages/client-search/model/redirect.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RedirectRuleIndexMetadata } from './redirectRuleIndexMetadata'; + +/** + * [Redirect results to a URL](https://www.algolia.com/doc/guides/managing-results/rules/merchandising-and-promoting/how-to/redirects/), this this parameter is for internal use only. + */ +export type Redirect = { + index?: Array; +}; diff --git a/packages/client-search/model/redirectRuleIndexData.ts b/packages/client-search/model/redirectRuleIndexData.ts new file mode 100644 index 000000000..fbb7ea140 --- /dev/null +++ b/packages/client-search/model/redirectRuleIndexData.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Redirect rule data. + */ +export type RedirectRuleIndexData = { + ruleObjectID: string; +}; diff --git a/packages/client-search/model/redirectRuleIndexMetadata.ts b/packages/client-search/model/redirectRuleIndexMetadata.ts new file mode 100644 index 000000000..33802fc69 --- /dev/null +++ b/packages/client-search/model/redirectRuleIndexMetadata.ts @@ -0,0 +1,27 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RedirectRuleIndexData } from './redirectRuleIndexData'; + +export type RedirectRuleIndexMetadata = { + /** + * Source index for the redirect rule. + */ + source: string; + + /** + * Destination index for the redirect rule. + */ + dest: string; + + /** + * Reason for the redirect rule. + */ + reason: string; + + /** + * Redirect rule status. + */ + succeed: boolean; + + data: RedirectRuleIndexData; +}; diff --git a/packages/client-search/model/redirectURL.ts b/packages/client-search/model/redirectURL.ts new file mode 100644 index 000000000..8f66f7ee2 --- /dev/null +++ b/packages/client-search/model/redirectURL.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * The redirect rule container. + */ +export type RedirectURL = { + url?: string; +}; diff --git a/packages/client-search/model/removeStopWords.ts b/packages/client-search/model/removeStopWords.ts new file mode 100644 index 000000000..263ad1184 --- /dev/null +++ b/packages/client-search/model/removeStopWords.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SupportedLanguage } from './supportedLanguage'; + +/** + * Removes stop words from the search query. Stop words are common words like articles, conjunctions, prepositions, or pronouns that have little or no meaning on their own. In English, \"the\", \"a\", or \"and\" are stop words. You should only use this feature for the languages used in your index. + */ +export type RemoveStopWords = Array | boolean; diff --git a/packages/client-search/model/removeUserIdResponse.ts b/packages/client-search/model/removeUserIdResponse.ts new file mode 100644 index 000000000..f9aab707a --- /dev/null +++ b/packages/client-search/model/removeUserIdResponse.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type RemoveUserIdResponse = { + /** + * Date and time when the object was deleted, in RFC 3339 format. + */ + deletedAt: string; +}; diff --git a/packages/client-search/model/removeWordsIfNoResults.ts b/packages/client-search/model/removeWordsIfNoResults.ts new file mode 100644 index 000000000..3b61da6d8 --- /dev/null +++ b/packages/client-search/model/removeWordsIfNoResults.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Strategy for removing words from the query when it doesn\'t return any results. This helps to avoid returning empty search results. - `none`. No words are removed when a query doesn\'t return results. - `lastWords`. Treat the last (then second to last, then third to last) word as optional, until there are results or at most 5 words have been removed. - `firstWords`. Treat the first (then second, then third) word as optional, until there are results or at most 5 words have been removed. - `allOptional`. Treat all words as optional. For more information, see [Remove words to improve results](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/empty-or-insufficient-results/in-depth/why-use-remove-words-if-no-results/). + */ +export type RemoveWordsIfNoResults = 'none' | 'lastWords' | 'firstWords' | 'allOptional'; diff --git a/packages/client-search/model/renderingContent.ts b/packages/client-search/model/renderingContent.ts new file mode 100644 index 000000000..ddb01bde8 --- /dev/null +++ b/packages/client-search/model/renderingContent.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FacetOrdering } from './facetOrdering'; +import type { RedirectURL } from './redirectURL'; +import type { Widgets } from './widgets'; + +/** + * Extra data that can be used in the search UI. You can use this to control aspects of your search UI, such as the order of facet names and values without changing your frontend code. + */ +export type RenderingContent = { + facetOrdering?: FacetOrdering; + + redirect?: RedirectURL; + + widgets?: Widgets; +}; diff --git a/packages/client-search/model/replaceAllObjectsResponse.ts b/packages/client-search/model/replaceAllObjectsResponse.ts new file mode 100644 index 000000000..43f5d4ab9 --- /dev/null +++ b/packages/client-search/model/replaceAllObjectsResponse.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BatchResponse } from './batchResponse'; +import type { UpdatedAtResponse } from './updatedAtResponse'; + +export type ReplaceAllObjectsResponse = { + copyOperationResponse: UpdatedAtResponse; + + /** + * The response of the `batch` request(s). + */ + batchResponses: Array; + + moveOperationResponse: UpdatedAtResponse; +}; diff --git a/packages/client-search/model/replaceSourceResponse.ts b/packages/client-search/model/replaceSourceResponse.ts new file mode 100644 index 000000000..4569548aa --- /dev/null +++ b/packages/client-search/model/replaceSourceResponse.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type ReplaceSourceResponse = { + /** + * Date and time when the object was updated, in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/client-search/model/rule.ts b/packages/client-search/model/rule.ts new file mode 100644 index 000000000..528eba465 --- /dev/null +++ b/packages/client-search/model/rule.ts @@ -0,0 +1,37 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Condition } from './condition'; +import type { Consequence } from './consequence'; +import type { TimeRange } from './timeRange'; + +/** + * Rule object. + */ +export type Rule = { + /** + * Unique identifier of a rule object. + */ + objectID: string; + + /** + * Conditions that trigger a rule. Some consequences require specific conditions or don\'t require any condition. For more information, see [Conditions](https://www.algolia.com/doc/guides/managing-results/rules/rules-overview/#conditions). + */ + conditions?: Array; + + consequence: Consequence; + + /** + * Description of the rule\'s purpose to help you distinguish between different rules. + */ + description?: string; + + /** + * Whether the rule is active. + */ + enabled?: boolean; + + /** + * Time periods when the rule is active. + */ + validity?: Array; +}; diff --git a/packages/client-search/model/saveObjectResponse.ts b/packages/client-search/model/saveObjectResponse.ts new file mode 100644 index 000000000..908ebb4dd --- /dev/null +++ b/packages/client-search/model/saveObjectResponse.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SaveObjectResponse = { + /** + * Date and time when the object was created, in RFC 3339 format. + */ + createdAt: string; + + /** + * Unique identifier of a task. A successful API response means that a task was added to a queue. It might not run immediately. You can check the task\'s progress with the [`task` operation](#tag/Indices/operation/getTask) and this `taskID`. + */ + taskID: number; + + /** + * Unique record identifier. + */ + objectID?: string; +}; diff --git a/packages/client-search/model/saveSynonymResponse.ts b/packages/client-search/model/saveSynonymResponse.ts new file mode 100644 index 000000000..24c3d5aeb --- /dev/null +++ b/packages/client-search/model/saveSynonymResponse.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SaveSynonymResponse = { + /** + * Unique identifier of a task. A successful API response means that a task was added to a queue. It might not run immediately. You can check the task\'s progress with the [`task` operation](#tag/Indices/operation/getTask) and this `taskID`. + */ + taskID: number; + + /** + * Date and time when the object was updated, in RFC 3339 format. + */ + updatedAt: string; + + /** + * Unique identifier of a synonym object. + */ + id: string; +}; diff --git a/packages/client-search/model/scopeType.ts b/packages/client-search/model/scopeType.ts new file mode 100644 index 000000000..f4937cfef --- /dev/null +++ b/packages/client-search/model/scopeType.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type ScopeType = 'settings' | 'synonyms' | 'rules'; diff --git a/packages/client-search/model/searchDictionaryEntriesParams.ts b/packages/client-search/model/searchDictionaryEntriesParams.ts new file mode 100644 index 000000000..aa0769d3a --- /dev/null +++ b/packages/client-search/model/searchDictionaryEntriesParams.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SupportedLanguage } from './supportedLanguage'; + +/** + * Search parameter. + */ +export type SearchDictionaryEntriesParams = { + /** + * Search query. + */ + query: string; + + /** + * Page of search results to retrieve. + */ + page?: number; + + /** + * Number of hits per page. + */ + hitsPerPage?: number; + + language?: SupportedLanguage; +}; diff --git a/packages/client-search/model/searchDictionaryEntriesResponse.ts b/packages/client-search/model/searchDictionaryEntriesResponse.ts new file mode 100644 index 000000000..f29bc8664 --- /dev/null +++ b/packages/client-search/model/searchDictionaryEntriesResponse.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DictionaryEntry } from './dictionaryEntry'; + +export type SearchDictionaryEntriesResponse = { + /** + * Dictionary entries matching the search criteria. + */ + hits: Array; + + /** + * Requested page of the API response. Algolia uses `page` and `hitsPerPage` to control how search results are displayed ([paginated](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/pagination/js/)). - `hitsPerPage`: sets the number of search results (_hits_) displayed per page. - `page`: specifies the page number of the search results you want to retrieve. Page numbering starts at 0, so the first page is `page=0`, the second is `page=1`, and so on. For example, to display 10 results per page starting from the third page, set `hitsPerPage` to 10 and `page` to 2. + */ + page: number; + + /** + * Number of results (hits). + */ + nbHits: number; + + /** + * Number of pages of results. + */ + nbPages: number; +}; diff --git a/packages/client-search/model/searchForFacetValuesRequest.ts b/packages/client-search/model/searchForFacetValuesRequest.ts new file mode 100644 index 000000000..03118e161 --- /dev/null +++ b/packages/client-search/model/searchForFacetValuesRequest.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SearchForFacetValuesRequest = { + /** + * Search parameters as a URL-encoded query string. + */ + params?: string; + + /** + * Text to search inside the facet\'s values. + */ + facetQuery?: string; + + /** + * Maximum number of facet values to return when [searching for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ + maxFacetHits?: number; +}; diff --git a/packages/client-search/model/searchForFacetValuesResponse.ts b/packages/client-search/model/searchForFacetValuesResponse.ts new file mode 100644 index 000000000..423e0f5eb --- /dev/null +++ b/packages/client-search/model/searchForFacetValuesResponse.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FacetHits } from './facetHits'; + +export type SearchForFacetValuesResponse = { + /** + * Matching facet values. + */ + facetHits: Array; + + /** + * Whether the facet count is exhaustive (true) or approximate (false). For more information, see [Why are my facet and hit counts not accurate](https://support.algolia.com/hc/en-us/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate-). + */ + exhaustiveFacetsCount: boolean; + + /** + * Time the server took to process the request, in milliseconds. + */ + processingTimeMS?: number; +}; diff --git a/packages/client-search/model/searchForFacets.ts b/packages/client-search/model/searchForFacets.ts new file mode 100644 index 000000000..00b710fff --- /dev/null +++ b/packages/client-search/model/searchForFacets.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchForFacetsOptions } from './searchForFacetsOptions'; +import type { SearchParams } from './searchParams'; + +export type SearchForFacets = SearchParams & SearchForFacetsOptions; diff --git a/packages/client-search/model/searchForFacetsOptions.ts b/packages/client-search/model/searchForFacetsOptions.ts new file mode 100644 index 000000000..eea336342 --- /dev/null +++ b/packages/client-search/model/searchForFacetsOptions.ts @@ -0,0 +1,27 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchTypeFacet } from './searchTypeFacet'; + +export type SearchForFacetsOptions = { + /** + * Facet name. + */ + facet: string; + + /** + * Index name (case-sensitive). + */ + indexName: string; + + /** + * Text to search inside the facet\'s values. + */ + facetQuery?: string; + + /** + * Maximum number of facet values to return when [searching for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ + maxFacetHits?: number; + + type: SearchTypeFacet; +}; diff --git a/packages/client-search/model/searchForHits.ts b/packages/client-search/model/searchForHits.ts new file mode 100644 index 000000000..91f65b1d8 --- /dev/null +++ b/packages/client-search/model/searchForHits.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchForHitsOptions } from './searchForHitsOptions'; +import type { SearchParams } from './searchParams'; + +export type SearchForHits = SearchParams & SearchForHitsOptions; diff --git a/packages/client-search/model/searchForHitsOptions.ts b/packages/client-search/model/searchForHitsOptions.ts new file mode 100644 index 000000000..85f09a7d5 --- /dev/null +++ b/packages/client-search/model/searchForHitsOptions.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchTypeDefault } from './searchTypeDefault'; + +export type SearchForHitsOptions = { + /** + * Index name (case-sensitive). + */ + indexName: string; + + type?: SearchTypeDefault; +} & { facet?: never; maxFacetHits?: never; facetQuery?: never }; diff --git a/packages/client-search/model/searchHits.ts b/packages/client-search/model/searchHits.ts new file mode 100644 index 000000000..3e410b8a0 --- /dev/null +++ b/packages/client-search/model/searchHits.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Hit } from './hit'; + +export type SearchHits> = Record & { + /** + * Search results (hits). Hits are records from your index that match the search criteria, augmented with additional attributes, such as, for highlighting. + */ + hits: Hit[]; + + /** + * Search query. + */ + query: string; + + /** + * URL-encoded string of all search parameters. + */ + params: string; +}; diff --git a/packages/client-search/model/searchMethodParams.ts b/packages/client-search/model/searchMethodParams.ts new file mode 100644 index 000000000..ca8c960d7 --- /dev/null +++ b/packages/client-search/model/searchMethodParams.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchQuery } from './searchQuery'; +import type { SearchStrategy } from './searchStrategy'; + +export type SearchMethodParams = { + requests: Array; + + strategy?: SearchStrategy; +}; diff --git a/packages/client-search/model/searchPagination.ts b/packages/client-search/model/searchPagination.ts new file mode 100644 index 000000000..284961b8f --- /dev/null +++ b/packages/client-search/model/searchPagination.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SearchPagination = { + /** + * Page of search results to retrieve. + */ + page?: number; + + /** + * Number of results (hits). + */ + nbHits?: number; + + /** + * Number of pages of results. + */ + nbPages?: number; + + /** + * Number of hits per page. + */ + hitsPerPage?: number; +}; diff --git a/packages/client-search/model/searchParams.ts b/packages/client-search/model/searchParams.ts new file mode 100644 index 000000000..38bf1b3bd --- /dev/null +++ b/packages/client-search/model/searchParams.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchParamsObject } from './searchParamsObject'; +import type { SearchParamsString } from './searchParamsString'; + +export type SearchParams = SearchParamsString | SearchParamsObject; diff --git a/packages/client-search/model/searchParamsObject.ts b/packages/client-search/model/searchParamsObject.ts new file mode 100644 index 000000000..b79d4f8f3 --- /dev/null +++ b/packages/client-search/model/searchParamsObject.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchParams } from './baseSearchParams'; +import type { IndexSettingsAsSearchParams } from './indexSettingsAsSearchParams'; + +/** + * Each parameter value, including the `query` must not be larger than 512 bytes. + */ +export type SearchParamsObject = BaseSearchParams & IndexSettingsAsSearchParams; diff --git a/packages/client-search/model/searchParamsQuery.ts b/packages/client-search/model/searchParamsQuery.ts new file mode 100644 index 000000000..9f1926f6c --- /dev/null +++ b/packages/client-search/model/searchParamsQuery.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SearchParamsQuery = { + /** + * Search query. + */ + query?: string; +}; diff --git a/packages/client-search/model/searchParamsString.ts b/packages/client-search/model/searchParamsString.ts new file mode 100644 index 000000000..78e0b5950 --- /dev/null +++ b/packages/client-search/model/searchParamsString.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Search parameters as query string. + */ +export type SearchParamsString = { + /** + * Search parameters as a URL-encoded query string. + */ + params?: string; +}; diff --git a/packages/client-search/model/searchQuery.ts b/packages/client-search/model/searchQuery.ts new file mode 100644 index 000000000..27971258b --- /dev/null +++ b/packages/client-search/model/searchQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchForFacets } from './searchForFacets'; +import type { SearchForHits } from './searchForHits'; + +export type SearchQuery = SearchForHits | SearchForFacets; diff --git a/packages/client-search/model/searchResponse.ts b/packages/client-search/model/searchResponse.ts new file mode 100644 index 000000000..e6a626fd8 --- /dev/null +++ b/packages/client-search/model/searchResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchResponse } from './baseSearchResponse'; +import type { SearchHits } from './searchHits'; +import type { SearchPagination } from './searchPagination'; + +export type SearchResponse> = BaseSearchResponse & SearchPagination & SearchHits; diff --git a/packages/client-search/model/searchResponses.ts b/packages/client-search/model/searchResponses.ts new file mode 100644 index 000000000..8510fb9cf --- /dev/null +++ b/packages/client-search/model/searchResponses.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchResult } from './searchResult'; + +export type SearchResponses> = { + results: SearchResult[]; +}; diff --git a/packages/client-search/model/searchResult.ts b/packages/client-search/model/searchResult.ts new file mode 100644 index 000000000..f3a0d3d33 --- /dev/null +++ b/packages/client-search/model/searchResult.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchForFacetValuesResponse } from './searchForFacetValuesResponse'; +import type { SearchResponse } from './searchResponse'; + +export type SearchResult> = SearchResponse | SearchForFacetValuesResponse; diff --git a/packages/client-search/model/searchRulesParams.ts b/packages/client-search/model/searchRulesParams.ts new file mode 100644 index 000000000..10a71bbec --- /dev/null +++ b/packages/client-search/model/searchRulesParams.ts @@ -0,0 +1,35 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Anchoring } from './anchoring'; + +/** + * Rules search parameters. + */ +export type SearchRulesParams = { + /** + * Search query for rules. + */ + query?: string; + + anchoring?: Anchoring; + + /** + * Only return rules that match the context (exact match). + */ + context?: string; + + /** + * Requested page of the API response. Algolia uses `page` and `hitsPerPage` to control how search results are displayed ([paginated](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/pagination/js/)). - `hitsPerPage`: sets the number of search results (_hits_) displayed per page. - `page`: specifies the page number of the search results you want to retrieve. Page numbering starts at 0, so the first page is `page=0`, the second is `page=1`, and so on. For example, to display 10 results per page starting from the third page, set `hitsPerPage` to 10 and `page` to 2. + */ + page?: number; + + /** + * Maximum number of hits per page. Algolia uses `page` and `hitsPerPage` to control how search results are displayed ([paginated](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/pagination/js/)). - `hitsPerPage`: sets the number of search results (_hits_) displayed per page. - `page`: specifies the page number of the search results you want to retrieve. Page numbering starts at 0, so the first page is `page=0`, the second is `page=1`, and so on. For example, to display 10 results per page starting from the third page, set `hitsPerPage` to 10 and `page` to 2. + */ + hitsPerPage?: number; + + /** + * If `true`, return only enabled rules. If `false`, return only inactive rules. By default, _all_ rules are returned. + */ + enabled?: boolean | null; +}; diff --git a/packages/client-search/model/searchRulesResponse.ts b/packages/client-search/model/searchRulesResponse.ts new file mode 100644 index 000000000..1e35d7cfd --- /dev/null +++ b/packages/client-search/model/searchRulesResponse.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Rule } from './rule'; + +export type SearchRulesResponse = { + /** + * Rules that matched the search criteria. + */ + hits: Array; + + /** + * Number of rules that matched the search criteria. + */ + nbHits: number; + + /** + * Current page. + */ + page: number; + + /** + * Number of pages. + */ + nbPages: number; +}; diff --git a/packages/client-search/model/searchStrategy.ts b/packages/client-search/model/searchStrategy.ts new file mode 100644 index 000000000..1bda46977 --- /dev/null +++ b/packages/client-search/model/searchStrategy.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Strategy for multiple search queries: - `none`. Run all queries. - `stopIfEnoughMatches`. Run the queries one by one, stopping as soon as a query matches at least the `hitsPerPage` number of results. + */ +export type SearchStrategy = 'none' | 'stopIfEnoughMatches'; diff --git a/packages/client-search/model/searchSynonymsParams.ts b/packages/client-search/model/searchSynonymsParams.ts new file mode 100644 index 000000000..aba75f43f --- /dev/null +++ b/packages/client-search/model/searchSynonymsParams.ts @@ -0,0 +1,22 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SynonymType } from './synonymType'; + +export type SearchSynonymsParams = { + /** + * Search query. + */ + query?: string; + + type?: SynonymType; + + /** + * Page of search results to retrieve. + */ + page?: number; + + /** + * Number of hits per page. + */ + hitsPerPage?: number; +}; diff --git a/packages/client-search/model/searchSynonymsResponse.ts b/packages/client-search/model/searchSynonymsResponse.ts new file mode 100644 index 000000000..181876ce0 --- /dev/null +++ b/packages/client-search/model/searchSynonymsResponse.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SynonymHit } from './synonymHit'; + +export type SearchSynonymsResponse = Record & { + /** + * Matching synonyms. + */ + hits: Array; + + /** + * Number of results (hits). + */ + nbHits: number; +}; diff --git a/packages/client-search/model/searchTypeDefault.ts b/packages/client-search/model/searchTypeDefault.ts new file mode 100644 index 000000000..7bba6c55d --- /dev/null +++ b/packages/client-search/model/searchTypeDefault.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * - `default`: perform a search query - `facet` [searches for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ +export type SearchTypeDefault = 'default'; diff --git a/packages/client-search/model/searchTypeFacet.ts b/packages/client-search/model/searchTypeFacet.ts new file mode 100644 index 000000000..a6168e735 --- /dev/null +++ b/packages/client-search/model/searchTypeFacet.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * - `default`: perform a search query - `facet` [searches for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ +export type SearchTypeFacet = 'facet'; diff --git a/packages/client-search/model/searchUserIdsParams.ts b/packages/client-search/model/searchUserIdsParams.ts new file mode 100644 index 000000000..754bcf243 --- /dev/null +++ b/packages/client-search/model/searchUserIdsParams.ts @@ -0,0 +1,26 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * OK + */ +export type SearchUserIdsParams = { + /** + * Query to search. The search is a prefix search with [typo tolerance](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/) enabled. An empty query will retrieve all users. + */ + query: string; + + /** + * Cluster name. + */ + clusterName?: string; + + /** + * Page of search results to retrieve. + */ + page?: number; + + /** + * Number of hits per page. + */ + hitsPerPage?: number; +}; diff --git a/packages/client-search/model/searchUserIdsResponse.ts b/packages/client-search/model/searchUserIdsResponse.ts new file mode 100644 index 000000000..498a185d5 --- /dev/null +++ b/packages/client-search/model/searchUserIdsResponse.ts @@ -0,0 +1,33 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { UserHit } from './userHit'; + +/** + * userIDs data. + */ +export type SearchUserIdsResponse = { + /** + * User objects that match the query. + */ + hits: Array; + + /** + * Number of results (hits). + */ + nbHits: number; + + /** + * Page of search results to retrieve. + */ + page: number; + + /** + * Maximum number of hits per page. Algolia uses `page` and `hitsPerPage` to control how search results are displayed ([paginated](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/pagination/js/)). - `hitsPerPage`: sets the number of search results (_hits_) displayed per page. - `page`: specifies the page number of the search results you want to retrieve. Page numbering starts at 0, so the first page is `page=0`, the second is `page=1`, and so on. For example, to display 10 results per page starting from the third page, set `hitsPerPage` to 10 and `page` to 2. + */ + hitsPerPage: number; + + /** + * Date and time when the object was updated, in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/client-search/model/securedApiKeyRestrictions.ts b/packages/client-search/model/securedApiKeyRestrictions.ts new file mode 100644 index 000000000..3e13cf4db --- /dev/null +++ b/packages/client-search/model/securedApiKeyRestrictions.ts @@ -0,0 +1,32 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchParamsObject } from './searchParamsObject'; + +export type SecuredApiKeyRestrictions = { + searchParams?: SearchParamsObject; + + /** + * Filters that apply to every search made with the secured API key. Extra filters added at search time will be combined with `AND`. For example, if you set `group:admin` as fixed filter on your generated API key, and add `groups:visitors` to the search query, the complete set of filters will be `group:admin AND groups:visitors`. + */ + filters?: string; + + /** + * Timestamp when the secured API key expires, measured in seconds since the Unix epoch. + */ + validUntil?: number; + + /** + * Index names or patterns that this API key can access. By default, an API key can access all indices in the same application. You can use leading and trailing wildcard characters (`*`): - `dev_*` matches all indices starting with \"dev_\". - `*_dev` matches all indices ending with \"_dev\". - `*_products_*` matches all indices containing \"_products_\". + */ + restrictIndices?: Array; + + /** + * IP network that are allowed to use this key. You can only add a single source, but you can provide a range of IP addresses. Use this to protect against API key leaking and reuse. + */ + restrictSources?: string; + + /** + * Pseudonymous user identifier to restrict usage of this API key to specific users. By default, rate limits are set based on IP addresses. This can be an issue if many users search from the same IP address. To avoid this, add a user token to each generated API key. + */ + userToken?: string; +}; diff --git a/packages/client-search/model/semanticSearch.ts b/packages/client-search/model/semanticSearch.ts new file mode 100644 index 000000000..851ce7838 --- /dev/null +++ b/packages/client-search/model/semanticSearch.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Settings for the semantic search part of NeuralSearch. Only used when `mode` is `neuralSearch`. + */ +export type SemanticSearch = { + /** + * Indices from which to collect click and conversion events. If null, the current index and all its replicas are used. + */ + eventSources?: Array | null; +}; diff --git a/packages/client-search/model/settingsResponse.ts b/packages/client-search/model/settingsResponse.ts new file mode 100644 index 000000000..339a3a220 --- /dev/null +++ b/packages/client-search/model/settingsResponse.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { IndexSettings } from './indexSettings'; +import type { WithPrimary } from './withPrimary'; + +export type SettingsResponse = IndexSettings & WithPrimary; diff --git a/packages/client-search/model/snippetResult.ts b/packages/client-search/model/snippetResult.ts new file mode 100644 index 000000000..0d9abff48 --- /dev/null +++ b/packages/client-search/model/snippetResult.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SnippetResultOption } from './snippetResultOption'; + +export type SnippetResult = SnippetResultOption | { [key: string]: SnippetResult } | Array; diff --git a/packages/client-search/model/snippetResultOption.ts b/packages/client-search/model/snippetResultOption.ts new file mode 100644 index 000000000..daab65f2d --- /dev/null +++ b/packages/client-search/model/snippetResultOption.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchLevel } from './matchLevel'; + +/** + * Snippets that show the context around a matching search query. + */ +export type SnippetResultOption = { + /** + * Highlighted attribute value, including HTML tags. + */ + value: string; + + matchLevel: MatchLevel; +}; diff --git a/packages/client-search/model/sortRemainingBy.ts b/packages/client-search/model/sortRemainingBy.ts new file mode 100644 index 000000000..85fc5bd88 --- /dev/null +++ b/packages/client-search/model/sortRemainingBy.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Order of facet values that aren\'t explicitly positioned with the `order` setting. - `count`. Order remaining facet values by decreasing count. The count is the number of matching records containing this facet value. - `alpha`. Sort facet values alphabetically. - `hidden`. Don\'t show facet values that aren\'t explicitly positioned. + */ +export type SortRemainingBy = 'count' | 'alpha' | 'hidden'; diff --git a/packages/client-search/model/source.ts b/packages/client-search/model/source.ts new file mode 100644 index 000000000..75925a57e --- /dev/null +++ b/packages/client-search/model/source.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Source. + */ +export type Source = { + /** + * IP address range of the source. + */ + source: string; + + /** + * Source description. + */ + description?: string; +}; diff --git a/packages/client-search/model/standardEntries.ts b/packages/client-search/model/standardEntries.ts new file mode 100644 index 000000000..368b717e4 --- /dev/null +++ b/packages/client-search/model/standardEntries.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Key-value pairs of [supported language ISO codes](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/supported-languages/) and boolean values. + */ +export type StandardEntries = { + /** + * Key-value pair of a language ISO code and a boolean value. + */ + plurals?: { [key: string]: boolean } | null; + + /** + * Key-value pair of a language ISO code and a boolean value. + */ + stopwords?: { [key: string]: boolean } | null; + + /** + * Key-value pair of a language ISO code and a boolean value. + */ + compounds?: { [key: string]: boolean } | null; +}; diff --git a/packages/client-search/model/supportedLanguage.ts b/packages/client-search/model/supportedLanguage.ts new file mode 100644 index 000000000..85f2111cc --- /dev/null +++ b/packages/client-search/model/supportedLanguage.ts @@ -0,0 +1,74 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * ISO code for a supported language. + */ +export type SupportedLanguage = + | 'af' + | 'ar' + | 'az' + | 'bg' + | 'bn' + | 'ca' + | 'cs' + | 'cy' + | 'da' + | 'de' + | 'el' + | 'en' + | 'eo' + | 'es' + | 'et' + | 'eu' + | 'fa' + | 'fi' + | 'fo' + | 'fr' + | 'ga' + | 'gl' + | 'he' + | 'hi' + | 'hu' + | 'hy' + | 'id' + | 'is' + | 'it' + | 'ja' + | 'ka' + | 'kk' + | 'ko' + | 'ku' + | 'ky' + | 'lt' + | 'lv' + | 'mi' + | 'mn' + | 'mr' + | 'ms' + | 'mt' + | 'nb' + | 'nl' + | 'no' + | 'ns' + | 'pl' + | 'ps' + | 'pt' + | 'pt-br' + | 'qu' + | 'ro' + | 'ru' + | 'sk' + | 'sq' + | 'sv' + | 'sw' + | 'ta' + | 'te' + | 'th' + | 'tl' + | 'tn' + | 'tr' + | 'tt' + | 'uk' + | 'ur' + | 'uz' + | 'zh'; diff --git a/packages/client-search/model/synonymHit.ts b/packages/client-search/model/synonymHit.ts new file mode 100644 index 000000000..51a2013bd --- /dev/null +++ b/packages/client-search/model/synonymHit.ts @@ -0,0 +1,45 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SynonymType } from './synonymType'; + +/** + * Synonym object. + */ +export type SynonymHit = { + /** + * Unique identifier of a synonym object. + */ + objectID: string; + + type: SynonymType; + + /** + * Words or phrases considered equivalent. + */ + synonyms?: Array; + + /** + * Word or phrase to appear in query strings (for [`onewaysynonym`s](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/adding-synonyms/in-depth/one-way-synonyms/)). + */ + input?: string; + + /** + * Word or phrase to appear in query strings (for [`altcorrection1` and `altcorrection2`](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/adding-synonyms/in-depth/synonyms-alternative-corrections/)). + */ + word?: string; + + /** + * Words to be matched in records. + */ + corrections?: Array; + + /** + * [Placeholder token](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/adding-synonyms/in-depth/synonyms-placeholders/) to be put inside records. + */ + placeholder?: string; + + /** + * Query words that will match the [placeholder token](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/adding-synonyms/in-depth/synonyms-placeholders/). + */ + replacements?: Array; +}; diff --git a/packages/client-search/model/synonymType.ts b/packages/client-search/model/synonymType.ts new file mode 100644 index 000000000..776565665 --- /dev/null +++ b/packages/client-search/model/synonymType.ts @@ -0,0 +1,14 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Synonym type. + */ +export type SynonymType = + | 'synonym' + | 'onewaysynonym' + | 'altcorrection1' + | 'altcorrection2' + | 'placeholder' + | 'oneWaySynonym' + | 'altCorrection1' + | 'altCorrection2'; diff --git a/packages/client-search/model/tagFilters.ts b/packages/client-search/model/tagFilters.ts new file mode 100644 index 000000000..b13f801cf --- /dev/null +++ b/packages/client-search/model/tagFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter the search by values of the special `_tags` attribute. **Prefer using the `filters` parameter, which supports all filter types and combinations with boolean operators.** Different from regular facets, `_tags` can only be used for filtering (including or excluding records). You won\'t get a facet count. The same combination and escaping rules apply as for `facetFilters`. + */ +export type TagFilters = Array | string; diff --git a/packages/client-search/model/taskStatus.ts b/packages/client-search/model/taskStatus.ts new file mode 100644 index 000000000..5b312a99c --- /dev/null +++ b/packages/client-search/model/taskStatus.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Task status, `published` if the task is completed, `notPublished` otherwise. + */ +export type TaskStatus = 'published' | 'notPublished'; diff --git a/packages/client-search/model/timeRange.ts b/packages/client-search/model/timeRange.ts new file mode 100644 index 000000000..dee6043c9 --- /dev/null +++ b/packages/client-search/model/timeRange.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type TimeRange = { + /** + * When the rule should start to be active, in Unix epoch time. + */ + from: number; + + /** + * When the rule should stop to be active, in Unix epoch time. + */ + until: number; +}; diff --git a/packages/client-search/model/typoTolerance.ts b/packages/client-search/model/typoTolerance.ts new file mode 100644 index 000000000..767e63229 --- /dev/null +++ b/packages/client-search/model/typoTolerance.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TypoToleranceEnum } from './typoToleranceEnum'; + +/** + * Whether [typo tolerance](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/) is enabled and how it is applied. If typo tolerance is true, `min`, or `strict`, [word splitting and concatenation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/splitting-and-concatenation/) are also active. + */ +export type TypoTolerance = boolean | TypoToleranceEnum; diff --git a/packages/client-search/model/typoToleranceEnum.ts b/packages/client-search/model/typoToleranceEnum.ts new file mode 100644 index 000000000..a33877b0d --- /dev/null +++ b/packages/client-search/model/typoToleranceEnum.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * - `min`. Return matches with the lowest number of typos. For example, if you have matches without typos, only include those. But if there are no matches without typos (with 1 typo), include matches with 1 typo (2 typos). - `strict`. Return matches with the two lowest numbers of typos. With `strict`, the Typo ranking criterion is applied first in the `ranking` setting. + */ +export type TypoToleranceEnum = 'min' | 'strict'; diff --git a/packages/client-search/model/updateApiKeyResponse.ts b/packages/client-search/model/updateApiKeyResponse.ts new file mode 100644 index 000000000..ee94ec780 --- /dev/null +++ b/packages/client-search/model/updateApiKeyResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type UpdateApiKeyResponse = { + /** + * API key. + */ + key: string; + + /** + * Date and time when the object was updated, in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/client-search/model/updatedAtResponse.ts b/packages/client-search/model/updatedAtResponse.ts new file mode 100644 index 000000000..d15fae047 --- /dev/null +++ b/packages/client-search/model/updatedAtResponse.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Response, taskID, and update timestamp. + */ +export type UpdatedAtResponse = { + /** + * Unique identifier of a task. A successful API response means that a task was added to a queue. It might not run immediately. You can check the task\'s progress with the [`task` operation](#tag/Indices/operation/getTask) and this `taskID`. + */ + taskID: number; + + /** + * Date and time when the object was updated, in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/client-search/model/updatedAtWithObjectIdResponse.ts b/packages/client-search/model/updatedAtWithObjectIdResponse.ts new file mode 100644 index 000000000..1537eefd8 --- /dev/null +++ b/packages/client-search/model/updatedAtWithObjectIdResponse.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Response, taskID, unique object identifier, and an update timestamp. + */ +export type UpdatedAtWithObjectIdResponse = { + /** + * Unique identifier of a task. A successful API response means that a task was added to a queue. It might not run immediately. You can check the task\'s progress with the [`task` operation](#tag/Indices/operation/getTask) and this `taskID`. + */ + taskID?: number; + + /** + * Date and time when the object was updated, in RFC 3339 format. + */ + updatedAt?: string; + + /** + * Unique record identifier. + */ + objectID?: string; +}; diff --git a/packages/client-search/model/userHighlightResult.ts b/packages/client-search/model/userHighlightResult.ts new file mode 100644 index 000000000..7973efc4d --- /dev/null +++ b/packages/client-search/model/userHighlightResult.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { HighlightResult } from './highlightResult'; + +export type UserHighlightResult = { + userID: HighlightResult; + + clusterName: HighlightResult; +}; diff --git a/packages/client-search/model/userHit.ts b/packages/client-search/model/userHit.ts new file mode 100644 index 000000000..8832c8e3b --- /dev/null +++ b/packages/client-search/model/userHit.ts @@ -0,0 +1,32 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { UserHighlightResult } from './userHighlightResult'; + +export type UserHit = { + /** + * Unique identifier of the user who makes the search request. + */ + userID: string; + + /** + * Cluster name. + */ + clusterName: string; + + /** + * Number of records in the cluster. + */ + nbRecords: number; + + /** + * Data size taken by all the users assigned to the cluster. + */ + dataSize: number; + + /** + * userID of the requested user. Same as userID. + */ + objectID: string; + + _highlightResult: UserHighlightResult; +}; diff --git a/packages/client-search/model/userId.ts b/packages/client-search/model/userId.ts new file mode 100644 index 000000000..0a2d72bb3 --- /dev/null +++ b/packages/client-search/model/userId.ts @@ -0,0 +1,26 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Unique user ID. + */ +export type UserId = { + /** + * Unique identifier of the user who makes the search request. + */ + userID: string; + + /** + * Cluster to which the user is assigned. + */ + clusterName: string; + + /** + * Number of records belonging to the user. + */ + nbRecords: number; + + /** + * Data size used by the user. + */ + dataSize: number; +}; diff --git a/packages/client-search/model/value.ts b/packages/client-search/model/value.ts new file mode 100644 index 000000000..72cd05add --- /dev/null +++ b/packages/client-search/model/value.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SortRemainingBy } from './sortRemainingBy'; + +export type Value = { + /** + * Explicit order of facets or facet values. This setting lets you always show specific facets or facet values at the top of the list. + */ + order?: Array; + + sortRemainingBy?: SortRemainingBy; + + /** + * Hide facet values. + */ + hide?: Array; +}; diff --git a/packages/client-search/model/widgets.ts b/packages/client-search/model/widgets.ts new file mode 100644 index 000000000..ee0f95779 --- /dev/null +++ b/packages/client-search/model/widgets.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Banner } from './banner'; + +/** + * Widgets returned from any rules that are applied to the current search. + */ +export type Widgets = { + /** + * Banners defined in the Merchandising Studio for a given search. + */ + banners?: Array; +}; diff --git a/packages/client-search/model/withPrimary.ts b/packages/client-search/model/withPrimary.ts new file mode 100644 index 000000000..552384167 --- /dev/null +++ b/packages/client-search/model/withPrimary.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type WithPrimary = { + /** + * Replica indices only: the name of the primary index for this replica. + */ + primary?: string; +}; diff --git a/packages/client-search/package.json b/packages/client-search/package.json index ac1c11c8e..ef07a85bc 100644 --- a/packages/client-search/package.json +++ b/packages/client-search/package.json @@ -1,23 +1,68 @@ { - "name": "@algolia/client-search", - "version": "4.13.1", - "private": false, + "version": "5.23.3", "repository": { "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/client-search#readme", + "type": "module", "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/client-search.esm.js", - "types": "dist/client-search.d.ts", + "author": "Algolia", + "scripts": { + "build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js", + "clean": "rm -rf ./dist || true", + "test:bundle": "publint . && attw --pack ." + }, + "name": "@algolia/client-search", + "description": "JavaScript client for client-search", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/builds/node.js", + "module": "./dist/builds/node.js", + "require": "./dist/builds/node.cjs" + }, + "worker": { + "types": "./dist/worker.d.ts", + "default": "./dist/builds/worker.js" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/builds/browser.js", + "import": "./dist/builds/browser.js", + "default": "./dist/builds/browser.umd.js" + } + }, + "./dist/builds/*": "./dist/builds/*.js" + }, + "jsdelivr": "./dist/builds/browser.umd.js", + "unpkg": "./dist/builds/browser.umd.js", + "react-native": "./dist/builds/browser.js", "files": [ + "dist", "index.js", - "dist" + "index.d.ts" ], "dependencies": { - "@algolia/client-common": "4.13.1", - "@algolia/requester-common": "4.13.1", - "@algolia/transporter": "4.13.1" + "@algolia/client-common": "5.23.3", + "@algolia/requester-browser-xhr": "5.23.3", + "@algolia/requester-fetch": "5.23.3", + "@algolia/requester-node-http": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "publint": "0.3.10", + "rollup": "4.39.0", + "tsup": "8.4.0", + "typescript": "5.8.3" + }, + "engines": { + "node": ">= 14.0.0" } } diff --git a/packages/client-search/rollup.config.js b/packages/client-search/rollup.config.js new file mode 100644 index 000000000..7b5f529f9 --- /dev/null +++ b/packages/client-search/rollup.config.js @@ -0,0 +1,17 @@ +export default [ + { + input: 'dist/builds/browser.min.js', + external: ['dom'], + cache: false, + output: { + esModule: false, + file: 'dist/builds/browser.umd.js', + name: '@algolia/client-search', + format: 'umd', + sourcemap: false, + globals: { + ['searchClient']: 'searchClient', + }, + }, + }, +]; diff --git a/packages/client-search/src/__tests__/integration/api-keys.test.ts b/packages/client-search/src/__tests__/integration/api-keys.test.ts deleted file mode 100644 index eb91d2e9c..000000000 --- a/packages/client-search/src/__tests__/integration/api-keys.test.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { createRetryablePromise } from '@algolia/client-common'; - -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('api_keys'); - -test(testSuite.testName, async () => { - const client = testSuite.makeSearchClient(); - - const apiKeyOptions = { - description: 'A description', - indexes: ['index'], - maxHitsPerQuery: 1000, - maxQueriesPerIPPerHour: 1000, - queryParameters: 'typoTolerance=strict', - referers: ['referer'], - validity: 600, - }; - - const addApiKeyResponse = await client.addApiKey(['search'], apiKeyOptions).wait(); - - expect(Object.keys(addApiKeyResponse)).toEqual(['key', 'createdAt']); - - const getApiKeyResponse = await client.getApiKey(addApiKeyResponse.key); - const apiKeyOptionsWithoutValidity = Object.assign({}, apiKeyOptions); - delete apiKeyOptionsWithoutValidity.validity; - - expect(getApiKeyResponse).toMatchObject(apiKeyOptionsWithoutValidity); - expect(getApiKeyResponse.value).toEqual(addApiKeyResponse.key); - expect(getApiKeyResponse.acl).toEqual(['search']); - - const listApiKeysResponse = await client.listApiKeys(); - expect(listApiKeysResponse.keys.length).toBeGreaterThan(0); - expect(listApiKeysResponse.keys.map(apiKey => apiKey.value)).toContainEqual( - addApiKeyResponse.key - ); - - await expect( - client - .updateApiKey(addApiKeyResponse.key, { - maxHitsPerQuery: 42, - queryParameters: 'typoTolerance=min', - }) - .wait() - ).resolves.toMatchObject({ - updatedAt: expect.any(String), - key: addApiKeyResponse.key, - }); - - await expect(client.getApiKey(addApiKeyResponse.key)).resolves.toMatchObject({ - maxHitsPerQuery: 42, - queryParameters: 'typoTolerance=min', - }); - - await expect(client.deleteApiKey(addApiKeyResponse.key).wait()).resolves.toMatchObject({ - deletedAt: expect.any(String), - }); - - await expect(client.getApiKey(addApiKeyResponse.key)).rejects.toMatchObject({ - name: 'ApiError', - message: 'Key does not exist', - status: 404, - }); - - const restoreApiKey = createRetryablePromise(async retry => { - try { - return await client.restoreApiKey(addApiKeyResponse.key).wait(); - } catch (e) { - if (e.message !== 'Key already exists') { - throw e; - } - - return retry(); - } - }); - - await expect(restoreApiKey).resolves.toMatchObject({ - createdAt: expect.any(String), - }); - - await expect(client.getApiKey(addApiKeyResponse.key)).resolves.toMatchObject({ - maxHitsPerQuery: 42, - queryParameters: 'typoTolerance=min', - }); - - await expect(client.deleteApiKey(addApiKeyResponse.key).wait()).resolves.toMatchObject({ - deletedAt: expect.any(String), - }); -}); diff --git a/packages/client-search/src/__tests__/integration/batching.test.ts b/packages/client-search/src/__tests__/integration/batching.test.ts deleted file mode 100644 index 0df68354d..000000000 --- a/packages/client-search/src/__tests__/integration/batching.test.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; -import { ObjectWithObjectID } from '../../types'; - -const testSuite = new TestSuite('batching'); - -test(testSuite.testName, async () => { - const index = testSuite.makeIndex(); - - await index - .saveObjects([ - { objectID: 'one', key: 'value' }, - { objectID: 'two', key: 'value' }, - { objectID: 'three', key: 'value' }, - { objectID: 'four', key: 'value' }, - { objectID: 'five', key: 'value' }, - ]) - .wait(); - - await index - .batch([ - { action: 'addObject', body: { objectID: 'zero', key: 'value' } }, - { action: 'updateObject', body: { objectID: 'one', k: 'v' } }, - { action: 'partialUpdateObject', body: { objectID: 'two', k: 'v' } }, - { action: 'partialUpdateObject', body: { objectID: 'two_bis', key: 'value' } }, - { action: 'partialUpdateObjectNoCreate', body: { objectID: 'three', k: 'v' } }, - { action: 'deleteObject', body: { objectID: 'four' } }, - ]) - .wait(); - - expect((await index.search('', { cacheable: false })).nbHits).toBe(6); - - let objects: ObjectWithObjectID[] = []; - await index.browseObjects({ - batch(objectsBatch) { - objects = objects.concat(objectsBatch); - }, - }); - - expect(objects.length).toBe(6); - - [ - { objectID: 'zero', key: 'value' }, - { objectID: 'one', k: 'v' }, - { objectID: 'two', key: 'value', k: 'v' }, - { objectID: 'two_bis', key: 'value' }, - { objectID: 'three', key: 'value', k: 'v' }, - { objectID: 'five', key: 'value' }, - ].forEach(object => { - expect(objects).toContainEqual(object); - }); -}); diff --git a/packages/client-search/src/__tests__/integration/browsing.test.ts b/packages/client-search/src/__tests__/integration/browsing.test.ts deleted file mode 100644 index 00676c74e..000000000 --- a/packages/client-search/src/__tests__/integration/browsing.test.ts +++ /dev/null @@ -1,197 +0,0 @@ -import { - browseObjects, - BrowseOptions, - browseRules, - browseSynonyms, - ObjectWithObjectID, - SearchIndex, -} from '../..'; -import { createFaker } from '../../../../client-common/src/__tests__/createFaker'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; -import { SearchOptions } from '../../types'; - -const testSuite = new TestSuite('browsing'); - -let index: ReturnType; -let browse: ( - method: (index: SearchIndex) => any, - options?: BrowseOptions<{}> & SearchOptions -) => Promise<{ - hitsCount: number; - batchCount: number; -}>; - -beforeAll(async () => { - index = testSuite.makeIndex(); - - // First lets create the index. - await index.setSettings({}).wait(); - - // Then, let's create a generic browse function that - // will take a browseMethod, and get metrics such as - // the number of retrieved hits and number of batches. - browse = async (method, options = {}) => { - const result = { - hitsCount: 0, - batchCount: 0, - }; - - const browseOptions: BrowseOptions = { - ...options, - batch(batch) { - result.batchCount++; - result.hitsCount = result.hitsCount + batch.length; - }, - }; - - await method(index)(browseOptions); - - return result; - }; -}); - -describe.each([ - [ - 'browseObjects', - { - method: browseObjects, - async withDataset(number: number) { - await index.clearObjects(); - - await index.saveObjects(createFaker().objects(number)).wait(); - }, - cursorBased: true, - }, - ], - [ - 'browseRules', - { - method: browseRules, - async withDataset(number: number) { - await index.clearRules(); - - await index - .saveRules( - [...Array(number).keys()].map(objectID => ({ - objectID: objectID.toString(), - consequence: { params: { filters: 'brand:OnePlus' } }, - })) - ) - .wait(); - }, - cursorBased: false, - }, - ], - [ - 'browseSynonyms', - { - method: browseSynonyms, - async withDataset(number: number) { - await index.clearSynonyms(); - - await index - .saveSynonyms( - [...Array(number).keys()].map(objectID => ({ - objectID: objectID.toString(), - type: 'synonym', - synonyms: ['gba', 'gameboy advance', 'game boy advance'], - })) - ) - .wait(); - }, - cursorBased: false, - }, - ], -])(`${testSuite.testName}: %s`, (_methodName, testCase) => { - test('empty', async () => { - await expect(browse(testCase.method)).resolves.toEqual({ - hitsCount: 0, - batchCount: 1, - }); - }); - - test('dataset 10', async () => { - await testCase.withDataset(10); - - await Promise.all([ - expect(browse(testCase.method)).resolves.toEqual({ - hitsCount: 10, - batchCount: 1, - }), - - expect(browse(testCase.method, { hitsPerPage: 9 })).resolves.toEqual({ - hitsCount: 10, - batchCount: 2, - }), - - expect(browse(testCase.method, { hitsPerPage: 10 })).resolves.toEqual({ - hitsCount: 10, - batchCount: testCase.cursorBased ? 1 : 2, - }), - - expect(browse(testCase.method, { hitsPerPage: 11 })).resolves.toEqual({ - hitsCount: 10, - batchCount: 1, - }), - ]); - }); - - test('dataset 1000', async () => { - await testCase.withDataset(1000); - - await Promise.all([ - expect(browse(testCase.method)).resolves.toEqual({ - hitsCount: 1000, - batchCount: testCase.cursorBased ? 1 : 2, - }), - - expect(browse(testCase.method, { hitsPerPage: 999 })).resolves.toEqual({ - hitsCount: 1000, - batchCount: 2, - }), - ]); - }); - - test('should stop', async () => { - await testCase.withDataset(10); - - await Promise.all([ - expect( - browse(testCase.method, { - // Should stop on the very first batch. Therefore, the number - // of hits should be 1, and the batch count should be 1 - shouldStop: () => true, - hitsPerPage: 1, - }) - ).resolves.toEqual({ - hitsCount: 1, - batchCount: 1, - }), - - expect( - browse(testCase.method, { - // Should stop on the second batch. The one that was the objectID "7". Therefore, - // the number of hits should be 4, and the batch count should be 2 - shouldStop: res => res.hits[0].objectID === '7', - hitsPerPage: 2, - }) - ).resolves.toEqual({ - hitsCount: 4, - batchCount: 2, - }), - ]); - }); - - test('error inside browse method', async () => { - await expect( - testCase.method(index)({ - unknownParameter: 'fail', - }) - ).rejects.toEqual( - expect.objectContaining({ - message: expect.any(String), - name: 'ApiError', - }) - ); - }); -}); diff --git a/packages/client-search/src/__tests__/integration/chunked-batch.test.ts b/packages/client-search/src/__tests__/integration/chunked-batch.test.ts deleted file mode 100644 index 0539a8e54..000000000 --- a/packages/client-search/src/__tests__/integration/chunked-batch.test.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('chunked_batch'); - -test(testSuite.testName, async () => { - const index = testSuite.makeIndex(); - - const saveObjectResponse = await index.saveObject({ objectID: 1 }); - expect(saveObjectResponse.objectID).toEqual('1'); - expect(saveObjectResponse.taskID).toBeDefined(); - - const saveObjectsResponse = await index.saveObjects([{ objectID: 1 }]); - expect(saveObjectsResponse.objectIDs).toEqual(['1']); - expect(saveObjectsResponse.taskIDs).toHaveLength(1); - - const secondSaveObjectsResponse = await index.saveObjects([{ objectID: 1 }, { objectID: 2 }], { - batchSize: 1, - }); - expect(secondSaveObjectsResponse.objectIDs).toEqual(['1', '2']); - expect(secondSaveObjectsResponse.taskIDs).toHaveLength(2); - - const partialUpdateObjectResponse = await index.partialUpdateObject({ - objectID: 1, - }); - expect(partialUpdateObjectResponse.objectID).toEqual('1'); - expect(partialUpdateObjectResponse.taskID).toBeDefined(); - - const partialUpdateObjectsResponse = await index.partialUpdateObjects([{ objectID: 1 }]); - expect(partialUpdateObjectsResponse.objectIDs).toEqual(['1']); - expect(partialUpdateObjectsResponse.taskIDs).toHaveLength(1); - - const deleteObjectResponse = await index.deleteObject('1'); - expect(deleteObjectResponse.taskID).toBeDefined(); - - const deleteObjectsResponse = await index.deleteObjects(['1']); - expect(deleteObjectsResponse.objectIDs).toEqual(['1']); - expect(deleteObjectsResponse.taskIDs).toHaveLength(1); -}); diff --git a/packages/client-search/src/__tests__/integration/copy-and-move-index.test.ts b/packages/client-search/src/__tests__/integration/copy-and-move-index.test.ts deleted file mode 100644 index a0b6d6598..000000000 --- a/packages/client-search/src/__tests__/integration/copy-and-move-index.test.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { waitResponses } from '../../../../client-common/src/__tests__/helpers'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('copy_and_move_index'); - -test(testSuite.testName, async () => { - const client = testSuite.makeSearchClient(); - const index = client.initIndex(testSuite.makeIndexName()); - - let responses = []; - - responses.push( - index.saveObjects([ - { objectID: 'one', company: 'apple' }, - { objectID: 'two', company: 'algolia' }, - ]) - ); - - responses.push(index.setSettings({ attributesForFaceting: ['company'] })); - responses.push( - index.saveSynonym({ - objectID: 'google_placeholder', - type: 'placeholder', - placeholder: '', - replacements: ['Google', 'GOOG'], - }) - ); - - responses.push( - index.saveRule({ - objectID: 'company_auto_faceting', - condition: { - anchoring: 'contains', - pattern: '{facet:company}', - }, - consequence: { - params: { automaticFacetFilters: ['company'] }, - }, - }) - ); - - await waitResponses(responses); - responses = []; - - const indexSettings = client.initIndex(`${index.indexName}copy_index_settings`); - responses.push(client.copySettings(index.indexName, indexSettings.indexName)); - - const indexSynonyms = client.initIndex(`${index.indexName}copy_index_synonyms`); - responses.push(client.copySynonyms(index.indexName, indexSynonyms.indexName)); - - const indexRules = client.initIndex(`${index.indexName}copy_index_rules`); - responses.push(client.copyRules(index.indexName, indexRules.indexName)); - - const indexFull = client.initIndex(`${index.indexName}copy_index_full`); - responses.push(client.copyIndex(index.indexName, indexFull.indexName)); - - await waitResponses(responses); - responses = []; - - const synonyms = await index.searchSynonyms(''); - const rules = await index.searchRules(''); - const settings = await index.getSettings(); - - expect((await indexSettings.getSettings()).attributesForFaceting).toEqual( - settings.attributesForFaceting - ); - - expect(await indexSynonyms.searchSynonyms('')).toEqual(synonyms); - expect(await indexFull.searchSynonyms('')).toEqual(synonyms); - expect((await indexRules.searchSynonyms('')).hits).toEqual([]); - expect((await indexSettings.searchSynonyms('')).hits).toEqual([]); - - expect(await indexRules.searchRules('')).toEqual(rules); - expect(await indexFull.searchRules('')).toEqual(rules); - expect((await indexSynonyms.searchRules('')).hits).toEqual([]); - expect((await indexSettings.searchRules('')).hits).toEqual([]); - - expect(await indexSettings.getSettings()).toEqual(settings); - expect(await indexFull.getSettings()).toEqual(settings); - expect((await indexRules.getSettings()).attributesForFaceting).toEqual(null); - expect((await indexSynonyms.getSettings()).attributesForFaceting).toEqual(null); - - const indexMoved = client.initIndex(`${index.indexName}move_index`); - await client.moveIndex(index.indexName, indexMoved.indexName).wait(); - - expect(await index.exists()).toBe(false); - expect(await indexMoved.getSettings()).toEqual(settings); - expect(await indexMoved.searchSynonyms('')).toEqual(synonyms); - expect(await indexMoved.searchRules('')).toEqual(rules); -}); diff --git a/packages/client-search/src/__tests__/integration/dictionary.test.ts b/packages/client-search/src/__tests__/integration/dictionary.test.ts deleted file mode 100644 index cc48b123c..000000000 --- a/packages/client-search/src/__tests__/integration/dictionary.test.ts +++ /dev/null @@ -1,145 +0,0 @@ -/* eslint-disable no-param-reassign */ -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('dictionary'); -import crypto from 'crypto'; - -describe(testSuite.testName, () => { - const client = testSuite.makeSearchClient('ALGOLIA_APPLICATION_ID_2', 'ALGOLIA_ADMIN_KEY_2'); - - test('stopwords', async () => { - const stopwordEntry = { - objectID: crypto.randomBytes(16).toString('hex'), - language: 'en', - word: 'down', - }; - - // clean past entries - await client - .deleteDictionaryEntries( - 'stopwords', - (await client.searchDictionaryEntries('stopwords', stopwordEntry.objectID)).hits.map( - hit => hit.objectID - ) - ) - .wait(); - - const nbSearchEntries = ( - await client.searchDictionaryEntries('stopwords', stopwordEntry.objectID) - ).nbHits; - - await client.saveDictionaryEntries('stopwords', [stopwordEntry]).wait(); - - const stopwords = await client.searchDictionaryEntries('stopwords', stopwordEntry.objectID); - - expect(stopwords.nbHits).toEqual(nbSearchEntries + 1); - expect(stopwords.hits).toEqual( - expect.arrayContaining([expect.objectContaining(stopwordEntry)]) - ); - - await client.deleteDictionaryEntries('stopwords', [stopwordEntry.objectID]).wait(); - expect( - (await client.searchDictionaryEntries('stopwords', stopwordEntry.objectID)).nbHits - ).toEqual(0); - - const oldDictionaryState = await client.searchDictionaryEntries('stopwords', ''); - const oldDictionaryEntries = oldDictionaryState.hits.map(hit => { - // @ts-ignore - delete hit.type; - - return hit; - }); - - await client.saveDictionaryEntries('stopwords', [stopwordEntry]).wait(); - expect( - (await client.searchDictionaryEntries('stopwords', stopwordEntry.objectID)).nbHits - ).toEqual(1); - - await client.replaceDictionaryEntries('stopwords', oldDictionaryEntries).wait(); - expect( - (await client.searchDictionaryEntries('stopwords', stopwordEntry.objectID)).nbHits - ).toEqual(0); - - const stopwordsSettings = { - disableStandardEntries: { - stopwords: { - en: true, - fr: true, - }, - }, - }; - - await client.setDictionarySettings(stopwordsSettings); - expect(await client.getDictionarySettings()).toEqual(stopwordsSettings); - }); - - test('plurals', async () => { - const pluralEntry = { - objectID: crypto.randomBytes(16).toString('hex'), - language: 'fr', - words: ['cheval', 'chevaux'], - }; - - // clean past entries - await client - .deleteDictionaryEntries( - 'plurals', - (await client.searchDictionaryEntries('plurals', pluralEntry.objectID)).hits.map( - hit => hit.objectID - ) - ) - .wait(); - - const nbSearchEntries = (await client.searchDictionaryEntries('plurals', pluralEntry.objectID)) - .nbHits; - - await client.saveDictionaryEntries('plurals', [pluralEntry]).wait(); - - const plurals = await client.searchDictionaryEntries('plurals', pluralEntry.objectID); - - expect(plurals.nbHits).toEqual(nbSearchEntries + 1); - expect(plurals.hits).toEqual(expect.arrayContaining([expect.objectContaining(pluralEntry)])); - - await client.deleteDictionaryEntries('plurals', [pluralEntry.objectID]).wait(); - expect((await client.searchDictionaryEntries('plurals', pluralEntry.objectID)).nbHits).toEqual( - 0 - ); - }); - - test('compounds', async () => { - const compoundEntry = { - objectID: crypto.randomBytes(16).toString('hex'), - language: 'de', - word: 'kopfschmerztablette', - decomposition: ['kopf', 'schmerz', 'tablette'], - }; - - // clean past entries - await client - .deleteDictionaryEntries( - 'compounds', - (await client.searchDictionaryEntries('compounds', compoundEntry.objectID)).hits.map( - hit => hit.objectID - ) - ) - .wait(); - - const nbSearchEntries = ( - await client.searchDictionaryEntries('compounds', compoundEntry.objectID) - ).nbHits; - - await client.saveDictionaryEntries('compounds', [compoundEntry]).wait(); - - const compounds = await client.searchDictionaryEntries('compounds', compoundEntry.objectID); - - expect(compounds.nbHits).toEqual(nbSearchEntries + 1); - expect(compounds.hits).toEqual( - expect.arrayContaining([expect.objectContaining(compoundEntry)]) - ); - - await client.deleteDictionaryEntries('compounds', [compoundEntry.objectID]).wait(); - expect( - (await client.searchDictionaryEntries('compounds', compoundEntry.objectID)).nbHits - ).toEqual(0); - }); -}); diff --git a/packages/client-search/src/__tests__/integration/exists.test.ts b/packages/client-search/src/__tests__/integration/exists.test.ts deleted file mode 100644 index 4e7b49f42..000000000 --- a/packages/client-search/src/__tests__/integration/exists.test.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('exists'); - -test(testSuite.testName, async () => { - const index = testSuite.makeIndex(); - - expect(await index.exists()).toBe(false); - await index.saveObject({ objectID: '1' }).wait(); - expect(await index.exists()).toBe(true); -}); diff --git a/packages/client-search/src/__tests__/integration/get-logs.test.ts b/packages/client-search/src/__tests__/integration/get-logs.test.ts deleted file mode 100644 index c98abca90..000000000 --- a/packages/client-search/src/__tests__/integration/get-logs.test.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Log } from '../..'; -import { RequiredKeys } from '../../../../client-common/src/__tests__/helpers'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('get_logs'); - -test(testSuite.testName, async () => { - const client = testSuite.makeSearchClient(); - - const indices = await client.listIndices(); - expect(indices.nbPages).toBeGreaterThan(0); - await client.listIndices(); - - const getLogsResponse = await client.getLogs({ - length: 2, - offset: 0, - type: 'all', - }); - - expect(getLogsResponse.logs).toHaveLength(2); - const keys: Array> = [ - 'timestamp', - 'method', - 'answer_code', - 'query_body', - 'answer', - 'url', - 'ip', - 'sha1', - 'query_headers', - 'processing_time_ms', - ]; - expect(Object.keys(getLogsResponse.logs[0])).toEqual(expect.arrayContaining(keys)); -}); diff --git a/packages/client-search/src/__tests__/integration/indexing.test.ts b/packages/client-search/src/__tests__/integration/indexing.test.ts deleted file mode 100644 index 69e511ae5..000000000 --- a/packages/client-search/src/__tests__/integration/indexing.test.ts +++ /dev/null @@ -1,159 +0,0 @@ -import { createFaker } from '../../../../client-common/src/__tests__/createFaker'; -import { waitResponses } from '../../../../client-common/src/__tests__/helpers'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; -import { ObjectWithObjectID } from '../../types'; - -const testSuite = new TestSuite('indexing'); - -test(testSuite.testName, async () => { - const index = testSuite.makeIndex(); - - await expect(index.saveObject(createFaker().object(''))).rejects.toMatchObject({ - status: 400, - }); - - let responses: any = []; - - const object1 = createFaker().object('object1'); - responses.push(index.saveObject(object1)); - - const object2 = createFaker().object(); - const response2 = index.saveObject(object2, { - autoGenerateObjectIDIfNotExist: true, - }); - - responses.push(response2); - - responses = responses.concat(index.saveObjects([])); - - const object3 = { - ...createFaker().object('object3'), - _tags: ['algolia'], - }; - - const object4 = { - ...createFaker().object('object4'), - _tags: ['algolia'], - }; - - responses = responses.concat(index.saveObjects([object3, object4])); - - const object5 = createFaker().object(); - const object6 = createFaker().object(); - const response5and6 = index.saveObjects([object5, object6], { - autoGenerateObjectIDIfNotExist: true, - }); - responses = responses.concat(response5and6); - - const object7 = createFaker().object('object7'); - const response7 = index.batch([ - { - action: 'addObject', - body: object7, - }, - ]); - - responses = responses.concat(response7); - - const remain1000objects = createFaker().objects(1000); - - responses = responses.concat( - index.saveObjects(remain1000objects, { - batchSize: 100, - }) - ); - - await waitResponses(responses); - responses = []; - - await expect(index.getObject('object1')).resolves.toStrictEqual(object1); - - const objectID2 = (await response2).objectID; - await expect(index.getObject(objectID2)).resolves.toStrictEqual( - Object.assign(object2, { objectID: objectID2 }) - ); - await expect(index.getObject('object3')).resolves.toStrictEqual(object3); - await expect(index.getObject('object4')).resolves.toStrictEqual(object4); - - const objectID5 = (await response5and6).objectIDs[0]; - await expect(index.getObject(objectID5)).resolves.toStrictEqual( - Object.assign(object5, { objectID: objectID5 }) - ); - - const objectID6 = (await response5and6).objectIDs[1]; - await expect(index.getObject(objectID6)).resolves.toStrictEqual( - Object.assign(object6, { objectID: objectID6 }) - ); - - await expect(index.getObject('object7')).resolves.toStrictEqual(object7); - - // Do not contains age. - await expect( - index.getObject('object7', { - attributesToRetrieve: ['objectID'], - }) - ).resolves.toStrictEqual({ - objectID: 'object7', - }); - - await expect( - index.getObjects(Array.from(Array(1000).keys()).map((objectID: number) => objectID.toString())) - ).resolves.toStrictEqual({ - results: remain1000objects, - }); - - const updatedObject1 = { - ...object1, - name: 'This is an altered name', - }; - - responses.push(index.partialUpdateObject(updatedObject1)); - - const updatedObject3 = { - ...object3, - bar: 40, - }; - - const updatedObject4 = { - ...object4, - foo: 30, - }; - - responses.push(index.partialUpdateObjects([updatedObject3, updatedObject4])); - - await waitResponses(responses); - responses = []; - - expect(await index.getObject('object1')).toEqual(updatedObject1); - expect(await index.getObject('object3')).toEqual(updatedObject3); - expect(await index.getObject('object4')).toEqual(updatedObject4); - - let objects1: ObjectWithObjectID[] = []; - await index.browseObjects({ - batch: objectsBatch => (objects1 = objects1.concat(objectsBatch)), - }); - - expect(objects1.length).toBe(1007); - - await index.deleteObject('object1').wait(); - expect((await index.search('', { cacheable: false })).nbHits).toBe(1006); - - await index.deleteObject(objectID2).wait(); - expect((await index.search('', { cacheable: false })).nbHits).toBe(1005); - - await index.deleteBy({ tagFilters: ['algolia'] }).wait(); - expect((await index.search('', { cacheable: false })).nbHits).toBe(1003); - - await index.deleteObjects([objectID5, objectID6]).wait(); - expect((await index.search('', { cacheable: false })).nbHits).toBe(1001); - - await index.clearObjects().wait(); - expect((await index.search('', { cacheable: false })).nbHits).toBe(0); - - let objects2: ObjectWithObjectID[] = []; - await index.browseObjects({ - batch: objectsBatch => (objects2 = objects2.concat(objectsBatch)), - }); - - expect(objects2.length).toBe(0); -}); diff --git a/packages/client-search/src/__tests__/integration/mcm.test.ts b/packages/client-search/src/__tests__/integration/mcm.test.ts deleted file mode 100644 index b67ef9a5e..000000000 --- a/packages/client-search/src/__tests__/integration/mcm.test.ts +++ /dev/null @@ -1,187 +0,0 @@ -/* eslint sonarjs/cognitive-complexity: 0 */ // --> OFF - -import { createRetryablePromise } from '@algolia/client-common'; -import { ApiError, Transporter } from '@algolia/transporter'; - -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('mcm'); - -const createRetryableTransporter = (client: Transporter): Transporter => { - return new Proxy(client, { - get(obj: any, method: string) { - return (...args: any) => { - return createRetryablePromise(retry => { - return obj[method](...args).catch((err: ApiError) => { - if (err.message === 'Remote side is unreachable') { - return retry(); - } - - throw err; - }); - }); - }; - }, - }); -}; - -test(testSuite.testName, async () => { - const client = testSuite.makeSearchClient('ALGOLIA_APPLICATION_ID_MCM', 'ALGOLIA_ADMIN_KEY_MCM'); - - // @ts-ignore - client.transporter = createRetryableTransporter(client.transporter); - - const response = await client.listClusters(); - - expect(response.clusters).toHaveLength(2); - const prefix = testSuite.makeIndexName(); - const firstClusterName = response.clusters[0].clusterName; - const userID = (number: number) => - `${prefix}-${number}` - .replace(/_/g, '-') - .replace(/:/g, '-') - .replace(/\./g, '-'); - - await expect(client.assignUserID(userID(0), firstClusterName)).resolves.toHaveProperty( - 'createdAt' - ); - - await expect( - client.assignUserIDs([userID(1), userID(2)], firstClusterName) - ).resolves.toHaveProperty('createdAt'); - - const waitAssign = (number: number) => { - return createRetryablePromise(async retry => { - try { - return await client.getUserID(userID(number)); - } catch (e) { - if (e.status !== 404 || e.message !== 'Mapping does not exist for this userID') { - throw e; - } - - return retry(); - } - }); - }; - - await Promise.all([0, 1, 2].map(waitAssign)); - - for (let number = 0; number < 3; number++) { - await expect(client.getUserID(userID(number))).resolves.toMatchObject({ - userID: userID(number), - clusterName: firstClusterName, - nbRecords: 0, - dataSize: 0, - }); - } - - const searchUserIDsResponses = await Promise.all( - [0, 1, 2].map(number => client.searchUserIDs(userID(number), { cluster: firstClusterName })) - ); - - [0, 1, 2].forEach(number => { - expect(searchUserIDsResponses[number].nbHits).toBe(1); - expect(searchUserIDsResponses[number].page).toBe(0); - expect(searchUserIDsResponses[number]).toHaveProperty('updatedAt'); - expect(searchUserIDsResponses[number].hits[0].userID).toEqual(userID(number)); - expect(searchUserIDsResponses[number].hits[0].clusterName).toEqual(firstClusterName); - }); - - const listUserIDsResponse = await client.listUserIDs(); - - expect(listUserIDsResponse.userIDs.length > 0).toBe(true); - expect(Object.keys(listUserIDsResponse.userIDs[0])).toEqual([ - 'userID', - 'clusterName', - 'nbRecords', - 'dataSize', - ]); - - await expect( - client.listUserIDs({ - hitsPerPage: 1, - }) - ).resolves.toMatchObject({ - hitsPerPage: 1, - page: 0, - }); - - expect(listUserIDsResponse.userIDs.length > 0).toBe(true); - expect(Object.keys(listUserIDsResponse.userIDs[0])).toEqual([ - 'userID', - 'clusterName', - 'nbRecords', - 'dataSize', - ]); - - const getTopUserIDsResponse = await client.getTopUserIDs(); - - expect(getTopUserIDsResponse.topUsers[firstClusterName].length > 0).toBe(true); - expect(Object.keys(getTopUserIDsResponse.topUsers[firstClusterName][0])).toEqual([ - 'userID', - 'nbRecords', - 'dataSize', - ]); - - const removeUserID = async (number: number) => { - // eslint-disable-next-line no-constant-condition - while (true) { - try { - return await client.removeUserID(userID(number)); - } catch (e) { - if (e.status !== 400 || e.message !== `User '${userID(number)}' is already migrating`) { - throw e; - } - } - } - }; - - for (let number = 0; number < 3; number++) { - await expect(removeUserID(number)).resolves.toHaveProperty('deletedAt'); - } - - const waitRemove = (number: number) => { - return createRetryablePromise(async retry => { - try { - await client.getUserID(userID(number)); - - return retry(); - } catch (e) { - if (e.status !== 404) { - throw e; - } - } - - return Promise.resolve(); - }); - }; - - await Promise.all([0, 1, 2].map(waitRemove)); - - for (let number = 0; number < 3; number++) { - await expect(client.getUserID(userID(number))).rejects.toMatchObject({ - message: 'Mapping does not exist for this userID', - name: 'ApiError', - status: 404, - }); - } - - await expect(client.hasPendingMappings({ retrieveMappings: true })).resolves.toMatchObject({ - clusters: expect.any(Object), - pending: expect.any(Boolean), - }); - - await expect(client.hasPendingMappings({ getClusters: true })).resolves.toMatchObject({ - clusters: expect.any(Object), - pending: expect.any(Boolean), - }); - - /* eslint-disable-next-line jest/valid-expect */ - const assertion = await expect(client.hasPendingMappings()).resolves; - - assertion.toMatchObject({ - pending: expect.any(Boolean), - }); - - assertion.not.toHaveProperty('clusters'); -}); diff --git a/packages/client-search/src/__tests__/integration/multiple-operations.test.ts b/packages/client-search/src/__tests__/integration/multiple-operations.test.ts deleted file mode 100644 index 7d8804384..000000000 --- a/packages/client-search/src/__tests__/integration/multiple-operations.test.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { BatchActionEnum, StrategyEnum } from '../..'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; -import { MultipleBatchRequest } from '../../types'; - -const testSuite = new TestSuite('multiple_operations'); - -test(testSuite.testName, async () => { - const client = testSuite.makeSearchClient(); - - const index = testSuite.makeIndex(); - const index2 = testSuite.makeIndex(`${index.indexName}_dev`); - - const queries: MultipleBatchRequest[] = [ - { - indexName: index.indexName, - action: BatchActionEnum.AddObject, - body: { firstname: 'Jimmie' }, - }, - { - indexName: index.indexName, - action: BatchActionEnum.AddObject, - body: { firstname: 'Jimmie' }, - }, - { - indexName: index2.indexName, - action: BatchActionEnum.AddObject, - body: { firstname: 'Jimmie' }, - }, - { - indexName: index2.indexName, - action: BatchActionEnum.AddObject, - body: { firstname: 'Jimmie' }, - }, - ]; - - await index.setSettings({ attributesForFaceting: ['searchable(firstname)'] }).wait(); - - const responses = await client.multipleBatch(queries).wait(); - const objectIDs = responses.objectIDs.map(objectID => objectID); - - const result = await client.multipleGetObjects([ - { indexName: index.indexName, objectID: objectIDs[0] }, - { indexName: index.indexName, objectID: objectIDs[1] }, - { indexName: index2.indexName, objectID: objectIDs[2] }, - { indexName: index2.indexName, objectID: objectIDs[3] }, - ]); - - expect(result.results).toEqual( - objectIDs.map(objectID => { - return { - firstname: 'Jimmie', - objectID, - }; - }) - ); - - const multipleQueriesResponse1 = await client.multipleQueries( - [ - { indexName: index.indexName, query: '', params: { hitsPerPage: 2 } }, - { indexName: index2.indexName, params: { hitsPerPage: 2 } }, - ], - { strategy: StrategyEnum.None } - ); - - expect(multipleQueriesResponse1.results[0].hits).toHaveLength(2); - expect(multipleQueriesResponse1.results[1].hits).toHaveLength(2); - - const multipleQueriesResponse2 = await client.search( - [ - { indexName: index.indexName, query: '', params: { hitsPerPage: 2 } }, - { indexName: index2.indexName, params: { hitsPerPage: 2 } }, - ], - { strategy: StrategyEnum.StopIfEnoughMatches } - ); - - expect(multipleQueriesResponse2.results[0].hits).toHaveLength(2); - expect(multipleQueriesResponse2.results[1].hits).toHaveLength(0); - - const searchForFacetValuesResponse = await client.searchForFacetValues([ - { - indexName: index.indexName, - params: { - facetName: 'firstname', - facetQuery: 'Jimmie', - }, - }, - ]); - - expect(searchForFacetValuesResponse[0].facetHits).toEqual([ - { - count: 2, - highlighted: 'Jimmie', - value: 'Jimmie', - }, - ]); -}); diff --git a/packages/client-search/src/__tests__/integration/replacing.test.ts b/packages/client-search/src/__tests__/integration/replacing.test.ts deleted file mode 100644 index 7c1c36ea6..000000000 --- a/packages/client-search/src/__tests__/integration/replacing.test.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { Rule, Synonym } from '../..'; -import { waitResponses } from '../../../../client-common/src/__tests__/helpers'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('replacing'); - -test(testSuite.testName, async () => { - const index = testSuite.makeIndex(); - let responses: any = []; - - responses.push(index.saveObject({ objectID: 'one' })); - responses.push( - index.saveSynonym({ - objectID: 'one', - type: 'synonym', - synonyms: ['one', 'two'], - }) - ); - responses.push( - index.saveRule({ - objectID: 'one', - condition: { anchoring: 'is', pattern: 'pattern' }, - consequence: { - params: { - query: { - edits: [{ type: 'remove', delete: 'pattern' }], - }, - }, - }, - }) - ); - - await waitResponses(responses); - responses = []; - - let replaceAllObjectsResponse = await index.replaceAllObjects([{ objectID: 'two' }]).wait(); - - const synonym2: Synonym = { - objectID: 'two', - type: 'synonym', - synonyms: ['one', 'two'], - }; - - responses.push(index.replaceAllSynonyms([synonym2])); - - const rule2: Rule = { - objectID: 'two', - condition: { anchoring: 'is', pattern: 'pattern' }, - consequence: { - params: { - query: { - edits: [{ type: 'remove', delete: 'pattern' }], - }, - }, - }, - }; - - responses.push(index.replaceAllRules([rule2])); - - await waitResponses(responses); - - await expect(index.getObject('one')).rejects.toMatchObject({ - name: 'ApiError', - message: 'ObjectID does not exist', - status: 404, - }); - - await expect(index.getObject('two')).resolves.toEqual({ objectID: 'two' }); - - await expect(index.getSynonym('two')).resolves.toEqual(synonym2); - await expect(index.getSynonym('one')).rejects.toMatchObject({ - name: 'ApiError', - message: 'Synonym set does not exist', - status: 404, - }); - - await expect(index.getRule('two')).resolves.toMatchObject(rule2); - await expect(index.getRule('one')).rejects.toMatchObject({ - name: 'ApiError', - message: 'ObjectID does not exist', - status: 404, - }); - - expect(replaceAllObjectsResponse.objectIDs).toEqual(['two']); - expect(replaceAllObjectsResponse.taskIDs).toHaveLength(3); - - replaceAllObjectsResponse = await index.replaceAllObjects( - [{ withoutObjectID: 'three' }, { withoutObjectID: 'four' }], - { - safe: true, // should wait task - autoGenerateObjectIDIfNotExist: true, - batchSize: 1, - } - ); - - expect(replaceAllObjectsResponse.objectIDs).toHaveLength(2); - expect(replaceAllObjectsResponse.taskIDs).toHaveLength(4); - - await expect(index.getObject(replaceAllObjectsResponse.objectIDs[0])).resolves.toEqual({ - objectID: replaceAllObjectsResponse.objectIDs[0], - withoutObjectID: 'three', - }); - - await expect(index.getObject(replaceAllObjectsResponse.objectIDs[1])).resolves.toEqual({ - objectID: replaceAllObjectsResponse.objectIDs[1], - withoutObjectID: 'four', - }); -}); diff --git a/packages/client-search/src/__tests__/integration/rules.test.ts b/packages/client-search/src/__tests__/integration/rules.test.ts deleted file mode 100644 index 7665094e6..000000000 --- a/packages/client-search/src/__tests__/integration/rules.test.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { Rule, Settings } from '../..'; -import { waitResponses } from '../../../../client-common/src/__tests__/helpers'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('rules'); - -test(testSuite.testName, async () => { - const index = testSuite.makeIndex(); - const responses = []; - responses.push( - index.saveObjects([ - { objectID: 'iphone_7', brand: 'Apple', model: '7' }, - { objectID: 'iphone_8', brand: 'Apple', model: '8' }, - { objectID: 'iphone_x', brand: 'Apple', model: 'X' }, - { objectID: 'one_plus_one', brand: 'OnePlus', model: 'One' }, - { objectID: 'one_plus_two', brand: 'OnePlus', model: 'Two' }, - ]) - ); - - const settings: Settings = { - attributesForFaceting: ['brand', 'model'], - }; - - responses.push(index.setSettings(settings)); - - const ruleToSave: Rule = { - objectID: 'brand_automatic_faceting', - enabled: false, - condition: { anchoring: 'is', pattern: '{facet:brand}' }, - consequence: { - params: { - automaticFacetFilters: [{ facet: 'brand', disjunctive: true, score: 42 }], - }, - }, - validity: [ - { from: 1532439300, until: 1532525700 }, - { from: 1532612100, until: 1532698500 }, - ], - description: 'Automatic apply the faceting on `brand` if a brand value is found in the query', - }; - - responses.push(index.saveRule(ruleToSave)); - - const ruleToSave2: Rule = { - objectID: 'query_edits', - conditions: [{ anchoring: 'is', pattern: 'mobile phone', alternatives: true }], - consequence: { - params: { - query: { - edits: [ - { type: 'remove', delete: 'mobile' }, - { type: 'replace', delete: 'phone', insert: 'ihpone' }, - ], - }, - }, - }, - }; - - const ruleToSave3: Rule = { - objectID: 'query_promo', - consequence: { params: { filters: 'brand:OnePlus' } }, - }; - - const ruleToSave4: Rule = { - objectID: 'query_promo_only_summer', - consequence: { params: { filters: 'model:One' } }, - condition: { context: 'summer' }, - }; - - const rulesToSaves: Rule[] = [ruleToSave2, ruleToSave3, ruleToSave4]; - responses.push(index.saveRules(rulesToSaves)); - await waitResponses(responses); - - expect(await index.getRule(ruleToSave.objectID)).toMatchObject(ruleToSave); - expect(await index.getRule(ruleToSave2.objectID)).toMatchObject(ruleToSave2); - expect(await index.getRule(ruleToSave3.objectID)).toMatchObject(ruleToSave3); - expect(await index.getRule(ruleToSave4.objectID)).toMatchObject(ruleToSave4); - - expect((await index.search('', { ruleContexts: ['summer'] })).hits.length).toEqual(1); - - const searchResult = await index.searchRules(''); - expect(searchResult.nbHits).toEqual(4); - expect( - searchResult.hits.find((rule: Rule) => rule.objectID === ruleToSave.objectID) - ).toMatchObject(ruleToSave); - expect( - searchResult.hits.find((rule: Rule) => rule.objectID === ruleToSave2.objectID) - ).toMatchObject(ruleToSave2); - expect( - searchResult.hits.find((rule: Rule) => rule.objectID === ruleToSave3.objectID) - ).toMatchObject(ruleToSave3); - expect( - searchResult.hits.find((rule: Rule) => rule.objectID === ruleToSave4.objectID) - ).toMatchObject(ruleToSave4); - - let rulesFromBrowse: Rule[] = []; - await index.browseRules({ - batch: rulesBatch => (rulesFromBrowse = rulesFromBrowse.concat(rulesBatch)), - }); - - expect(rulesFromBrowse.length).toEqual(4); - expect(rulesFromBrowse.find((rule: Rule) => rule.objectID === ruleToSave.objectID)).toMatchObject( - ruleToSave - ); - expect( - rulesFromBrowse.find((rule: Rule) => rule.objectID === ruleToSave2.objectID) - ).toMatchObject(ruleToSave2); - expect( - rulesFromBrowse.find((rule: Rule) => rule.objectID === ruleToSave3.objectID) - ).toMatchObject(ruleToSave3); - expect( - rulesFromBrowse.find((rule: Rule) => rule.objectID === ruleToSave4.objectID) - ).toMatchObject(ruleToSave4); - - let emptyRules: Rule[] = []; - await index.browseRules({ - query: 'FGHJKLVFGBHJKJHBGVF', - batch: ruleBatch => (emptyRules = emptyRules.concat(ruleBatch)), - }); - - expect(emptyRules).toHaveLength(0); - - await index.deleteRule(ruleToSave.objectID).wait(); - - const searchResultAfterDelete = await index.searchRules(''); - expect(searchResultAfterDelete.nbHits).toEqual(3); - expect(searchResultAfterDelete.hits).not.toContain(ruleToSave); - - await expect(index.clearRules().wait()).resolves.toHaveProperty('taskID'); - - const searchResultAfterClear = await index.searchRules(''); - expect(searchResultAfterClear.nbHits).toBe(0); -}); diff --git a/packages/client-search/src/__tests__/integration/search.test.ts b/packages/client-search/src/__tests__/integration/search.test.ts deleted file mode 100644 index 577609beb..000000000 --- a/packages/client-search/src/__tests__/integration/search.test.ts +++ /dev/null @@ -1,271 +0,0 @@ -import { createObjectNotFoundError, ListApiKeysResponse, SearchResponse } from '../..'; -import { waitResponses } from '../../../../client-common/src/__tests__/helpers'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('search'); - -test(testSuite.testName, async () => { - const index = testSuite.makeIndex(); - - const responses: any = []; - - responses.push( - index.saveObjects( - [ - { - objectID: 'julien-lemoine', - company: 'Algolia', - name: 'Julien Lemoine', - }, - { - objectID: 'nicolas-dessaigne', - company: 'Algolia', - name: 'Nicolas Dessaigne', - }, - { company: 'Amazon', name: 'Jeff Bezos' }, - { company: 'Apple', name: 'Steve Jobs' }, - { company: 'Apple', name: 'Steve Wozniak' }, - { company: 'Arista Networks', name: 'Jayshree Ullal' }, - { company: 'Google', name: 'Larry Page' }, - { company: 'Google', name: 'Rob Pike' }, - { company: 'Google', name: 'Serguey Brin' }, - { company: 'Microsoft', name: 'Bill Gates' }, - { company: 'SpaceX', name: 'Elon Musk' }, - { company: 'Tesla', name: 'Elon Musk' }, - { company: 'Yahoo', name: 'Marissa Mayer' }, - ], - { - autoGenerateObjectIDIfNotExist: true, - } - ) - ); - - responses.push(index.setSettings({ attributesForFaceting: ['searchable(company)'] })); - - await waitResponses(responses); - - type TObject = { - company: string; - name: string; - }; - - let searchResponse = await index.search('algolia'); - - expect(searchResponse.hits).toHaveLength(2); - - expect(index.getObjectPosition(searchResponse, 'nicolas-dessaigne')).toBe(0); - expect(index.getObjectPosition(searchResponse, 'julien-lemoine')).toBe(1); - expect(index.getObjectPosition(searchResponse, '')).toBe(-1); - - await expect(index.findObject(() => false)).rejects.toEqual(createObjectNotFoundError()); - expect(await index.findObject(() => true)).toMatchObject({ - position: 0, - page: 0, - }); - - const cb = (obj: any) => obj.company === 'Apple'; - - await expect(index.findObject(cb, { query: 'algolia' })).rejects.toEqual( - createObjectNotFoundError() - ); - - await expect( - index.findObject(cb, { - query: '', - paginate: false, - hitsPerPage: 5, - }) - ).rejects.toEqual(createObjectNotFoundError()); - - expect( - await index.findObject(cb, { - query: '', - paginate: true, - hitsPerPage: 5, - }) - ).toMatchObject({ - position: 0, - page: 2, - }); - - searchResponse = await index.search('elon', { - clickAnalytics: true, - }); - - expect(searchResponse.queryID).toBeDefined(); - - searchResponse = await index.search('elon', { - facets: ['*'], - facetFilters: [['company:tesla']], - }); - - expect(searchResponse.hits).toHaveLength(1); - - searchResponse = await index.search('elon', { - facets: ['*'], - facetFilters: [['company:tesla', 'company:spacex']], - }); - - expect(searchResponse.hits).toHaveLength(2); - - const searchForFacetValuesResponse = await index.searchForFacetValues('company', 'a'); - - expect(searchForFacetValuesResponse.facetHits).toEqual([ - { - count: 2, - highlighted: 'Algolia', - value: 'Algolia', - }, - { - count: 2, - highlighted: 'Apple', - value: 'Apple', - }, - { - count: 1, - highlighted: 'Amazon', - value: 'Amazon', - }, - { - count: 1, - highlighted: 'Arista Networks', - value: 'Arista Networks', - }, - ]); -}); - -test('decompounding at query time', async () => { - const index = testSuite.makeIndex(); - - await waitResponses([ - index.setSettings({ - decompoundedAttributes: { - de: ['category', 'type', 'desc'], - }, - queryLanguages: ['de'], - ignorePlurals: true, - }), - index.saveObjects([ - { objectID: 'A...B', category: 'hunde', type: 'Hütte' }, - { objectID: 'AB', desc: 'Ich will ein schöne Hundehütte' }, - { objectID: 'BA', desc: 'Hüttehunde, Es ist eine lustige Verbindung!' }, - { objectID: 'B...A', category: 'Eine Hütte für Hunden' }, - { objectID: 'A', category: 'Hunde' }, - { objectID: 'B', category: 'Hunde' }, - ]), - ]); - - const results = await index.search('Hundehütte', { - explain: ['match.alternatives'], - ignorePlurals: true, - queryParameters: { - foo: 'bar', - }, - }); - - const explain: SearchResponse['explain'] = { - match: { - alternatives: [ - { - types: ['original'], - words: ['hunde'], - typos: 0, - offset: 0, - length: 1, - }, - { - types: ['original'], - words: ['hutte'], - typos: 0, - offset: 1, - length: 1, - }, - { - types: ['compound'], - words: ['hundehutte'], - typos: 0, - offset: 0, - length: 2, - }, - { - types: ['split'], - words: ['hunde', 'hutte'], - typos: 0, - offset: 0, - length: 2, - }, - { - types: ['plural'], - words: ['hund'], - typos: 0, - offset: 0, - length: 1, - }, - { - types: ['plural'], - words: ['hundchen'], - typos: 0, - offset: 0, - length: 1, - }, - { - types: ['plural'], - words: ['hundchens'], - typos: 0, - offset: 0, - length: 1, - }, - { - types: ['plural'], - words: ['hundehutten'], - typos: 0, - offset: 0, - length: 2, - }, - { - types: ['plural'], - words: ['hunden'], - typos: 0, - offset: 0, - length: 1, - }, - { - types: ['plural'], - words: ['hundes'], - typos: 0, - offset: 0, - length: 1, - }, - { - types: ['plural'], - words: ['hundlein'], - typos: 0, - offset: 0, - length: 1, - }, - { - types: ['plural'], - words: ['hunds'], - typos: 0, - offset: 0, - length: 1, - }, - { - types: ['plural'], - words: ['hutten'], - typos: 0, - offset: 1, - length: 1, - }, - ], - }, - }; - - expect(results.explain).toMatchObject(explain); -}); - -it('allows custom request', async () => { - const client = testSuite.makeSearchClient(); - const res = await client.customRequest({ method: 'GET', path: '/1/keys' }); - expect(res.keys.length).toBeGreaterThan(0); -}); diff --git a/packages/client-search/src/__tests__/integration/secured-api-keys.test.ts b/packages/client-search/src/__tests__/integration/secured-api-keys.test.ts deleted file mode 100644 index 96f334736..000000000 --- a/packages/client-search/src/__tests__/integration/secured-api-keys.test.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* eslint sonarjs/cognitive-complexity: 0 */ // --> OFF - -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('secured_api_keys'); - -test(testSuite.testName, async () => { - const client = testSuite.makeSearchClient(); - const index1 = client.initIndex(testSuite.makeIndexName()); - const index2 = client.initIndex(testSuite.makeIndexName()); - - await index1.saveObject({ objectID: 'one' }).wait(); - await index2.saveObject({ objectID: 'one' }).wait(); - - const securedApiKey = await client.generateSecuredApiKey(process.env.ALGOLIA_SEARCH_KEY_1 || '', { - validUntil: Math.round(new Date().getTime() / 1000) + 60, - restrictIndices: index1.indexName, - }); - - await expect( - testSuite - .algoliasearch(index1.appId, securedApiKey, { - hosts: client.transporter.hosts, - }) - .initIndex(index1.indexName) - .search('') - ).resolves.toMatchObject({ - hits: [{ objectID: 'one' }], - nbHits: 1, - }); - - await expect( - testSuite - .algoliasearch(index2.appId, securedApiKey) - .initIndex(index2.indexName) - .search('') - ).rejects.toMatchObject({ - message: 'Index not allowed with this API key', - name: 'ApiError', - status: 403, - }); - - expect(client.getSecuredApiKeyRemainingValidity(securedApiKey)).toBeGreaterThan(0); - - const expiredSecuredApiKey = await client.generateSecuredApiKey( - process.env.ALGOLIA_SEARCH_KEY_1 || '', - { - validUntil: Math.round(new Date().getTime() / 1000) - 60, - restrictIndices: index1.indexName, - } - ); - - expect(client.getSecuredApiKeyRemainingValidity(expiredSecuredApiKey)).toBeLessThan(0); - - expect(() => client.getSecuredApiKeyRemainingValidity('azdza')).toThrow( - 'ValidUntil not found in given secured api key.' - ); -}); diff --git a/packages/client-search/src/__tests__/integration/settings.test.ts b/packages/client-search/src/__tests__/integration/settings.test.ts deleted file mode 100644 index b547e2237..000000000 --- a/packages/client-search/src/__tests__/integration/settings.test.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { Settings } from '@algolia/client-search'; - -import { createFaker } from '../../../../client-common/src/__tests__/createFaker'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('settings'); - -test(testSuite.testName, async () => { - const index = testSuite.makeIndex(); - await index.saveObject(createFaker().object('foo')).wait(); - - const replica1 = testSuite.makeIndex(`${index.indexName}_replica1`); - const replica2 = testSuite.makeIndex(`${index.indexName}_replica2`); - - await index.setSettings({}).wait(); - - const settings1: Settings = { - searchableAttributes: [ - 'attribute1', - 'attribute2', - 'attribute3', - 'ordered(attribute4)', - 'unordered(attribute5)', - ], - attributesForFaceting: ['attribute1', 'filterOnly(attribute2)', 'searchable(attribute3)'], - unretrievableAttributes: ['attribute1', 'attribute2'], - attributesToRetrieve: ['attribute3', 'attribute4'], - ranking: [ - 'asc(attribute1)', - 'desc(attribute2)', - 'attribute', - 'custom', - 'exact', - 'filters', - 'geo', - 'proximity', - 'typo', - 'words', - ], - customRanking: ['asc(attribute1)', 'desc(attribute1)'], - replicas: [replica1.indexName, replica2.indexName], - maxValuesPerFacet: 100, - sortFacetValuesBy: 'count', - attributesToHighlight: ['attribute1', 'attribute2'], - attributesToSnippet: ['attribute1:10', 'attribute2:8'], - highlightPreTag: '', - highlightPostTag: '', - snippetEllipsisText: ' and so on.', - restrictHighlightAndSnippetArrays: true, - hitsPerPage: 42, - paginationLimitedTo: 43, - minWordSizefor1Typo: 2, - minWordSizefor2Typos: 6, - typoTolerance: 'false', - allowTyposOnNumericTokens: false, - ignorePlurals: true, - disableTypoToleranceOnAttributes: ['attribute1', 'attribute2'], - disableTypoToleranceOnWords: ['word1', 'word2'], - separatorsToIndex: '()[]', - queryType: 'prefixNone', - removeWordsIfNoResults: 'allOptional', - advancedSyntax: true, - optionalWords: ['word1', 'word2'], - removeStopWords: true, - disablePrefixOnAttributes: ['attribute1', 'attribute2'], - disableExactOnAttributes: ['attribute1', 'attribute2'], - exactOnSingleWordQuery: 'word', - enableRules: false, - numericAttributesForFiltering: ['attribute1', 'attribute2'], - allowCompressionOfIntegerArray: true, - attributeForDistinct: 'attribute1', - distinct: 2, - replaceSynonymsInHighlight: false, - minProximity: 7, - responseFields: ['hits', 'hitsPerPage'], - maxFacetHits: 100, - camelCaseAttributes: ['attribute1', 'attribute2'], - decompoundedAttributes: { - de: ['attribute1', 'attribute2'], - fi: ['attribute3'], - }, - keepDiacriticsOnCharacters: 'øé', - queryLanguages: ['en', 'fr'], - alternativesAsExact: ['ignorePlurals'], - advancedSyntaxFeatures: ['exactPhrase'], - userData: { - customUserData: 42.0, - }, - indexLanguages: ['ja'], - customNormalization: { default: { ä: 'ae', ö: 'oe' } }, - enablePersonalization: true, - }; - - await index.setSettings(settings1).wait(); - - expect(await index.getSettings()).toMatchObject(settings1); - - const settings2: Settings = { - typoTolerance: 'min', - ignorePlurals: ['en', 'fr'], - removeStopWords: ['en', 'fr'], - distinct: true, - }; - - await index.setSettings(settings2).wait(); - - expect(await index.getSettings()).toMatchObject(settings2); -}); diff --git a/packages/client-search/src/__tests__/integration/synonyms.test.ts b/packages/client-search/src/__tests__/integration/synonyms.test.ts deleted file mode 100644 index 098fa7b13..000000000 --- a/packages/client-search/src/__tests__/integration/synonyms.test.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { Synonym, SynonymEnum } from '../..'; -import { waitResponses } from '../../../../client-common/src/__tests__/helpers'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('synonyms'); - -test(testSuite.testName, async () => { - const index = testSuite.makeIndex(); - const responses = []; - responses.push( - index.saveObjects( - [ - { console: 'Sony PlayStation ' }, - { console: 'Nintendo Switch' }, - { console: 'Nintendo Wii U' }, - { console: 'Nintendo Game Boy Advance' }, - { console: 'Microsoft Xbox' }, - { console: 'Microsoft Xbox 360' }, - { console: 'Microsoft Xbox One' }, - ], - { autoGenerateObjectIDIfNotExist: true } - ) - ); - - const synonym1 = { - objectID: 'gba', - type: SynonymEnum.Synonym, - synonyms: ['gba', 'gameboy advance', 'game boy advance'], - }; - - responses.push(index.saveSynonym(synonym1)); - - const synonym2 = { - objectID: 'wii_to_wii_u', - type: SynonymEnum.OneWaySynonym, - input: 'wii', - synonyms: ['wii U'], - }; - - const synonym3 = { - objectID: 'playstation_version_placeholder', - type: SynonymEnum.Placeholder, - placeholder: '', - replacements: ['1', 'One', '2', '3', '4', '4 Pro'], - }; - - const synonym4 = { - objectID: 'ps4', - type: SynonymEnum.AltCorrection2, - word: 'ps4', - corrections: ['playstation4'], - }; - - const synonym5 = { - objectID: 'psone', - type: SynonymEnum.AltCorrection2, - word: 'psone', - corrections: ['playstationone'], - }; - - const synonyms: Synonym[] = [synonym2, synonym3, synonym4, synonym5]; - - responses.push(index.saveSynonyms([synonym2, synonym3, synonym4, synonym5])); - - await waitResponses(responses); - - synonyms.push(synonym1); - - await synonyms.forEach(async synonym => { - expect(await index.getSynonym(synonym.objectID)).toEqual(synonym); - }); - - expect((await index.searchSynonyms('')).nbHits).toEqual(5); - - let synonymsFromBrowse: Synonym[] = []; - await index.browseSynonyms({ - batch: synonymsBatch => (synonymsFromBrowse = synonymsFromBrowse.concat(synonymsBatch)), - }); - - expect(synonymsFromBrowse).toHaveLength(5); - - synonymsFromBrowse.forEach(synonym => { - expect(synonyms).toContainEqual(synonym); - }); - - let emptySynonyms: Synonym[] = []; - await index.browseSynonyms({ - query: 'GHJKLHGHJKLKJH', - batch: synomyBatch => (emptySynonyms = emptySynonyms.concat(synomyBatch)), - }); - - expect(emptySynonyms).toHaveLength(0); - - await index.deleteSynonym('gba').wait(); - - await expect(index.getSynonym('gba')).rejects.toMatchObject({ - name: 'ApiError', - message: 'Synonym set does not exist', - status: 404, - }); - - await index.clearSynonyms().wait(); - - expect((await index.searchSynonyms('')).nbHits).toEqual(0); -}); diff --git a/packages/client-search/src/__tests__/unit/search-client.test.ts b/packages/client-search/src/__tests__/unit/search-client.test.ts deleted file mode 100644 index 6d4e74acd..000000000 --- a/packages/client-search/src/__tests__/unit/search-client.test.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { anything, spy, verify, when } from 'ts-mockito'; - -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const algoliasearch = new TestSuite().algoliasearch; - -describe('search client', () => { - it('gives access to appId', () => { - expect(algoliasearch('appId', 'apiKey').appId).toEqual('appId'); - }); -}); - -describe('multiple search for facet values', () => { - it('allows to pass search params to the underlying search for facet values of index', async () => { - const client = algoliasearch('appId', 'apiKey'); - const transporterMock = spy(client.transporter); - when(transporterMock.read(anything(), anything())).thenResolve({}); - - const query = { - indexName: 'foo', - params: { - facetName: 'firstname', - facetQuery: 'Jimmie', - something: 'else', - }, - }; - - await client.searchForFacetValues([query, query]); - - verify(transporterMock.read(anything(), anything())).twice(); - }); -}); - -test('get logs', async () => { - const client = algoliasearch('appId', 'apiKey'); - const transporterMock = spy(client.transporter); - when(transporterMock.read(anything(), anything())).thenResolve({}); - - await client.getLogs(); - - verify(transporterMock.read(anything(), undefined)).once(); -}); - -test('clearCache', async () => { - const client = algoliasearch('appId', 'apiKey'); - - client.transporter.requestsCache.set('bla', 'blo'); - client.transporter.responsesCache.set('bla', 'blo'); - - if (testing.isBrowser()) { - await expect( - client.transporter.requestsCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('blo'); - await expect( - client.transporter.responsesCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('blo'); - } else { - // node uses a null cache, so these assertions don't make sense there - await expect( - client.transporter.requestsCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - await expect( - client.transporter.responsesCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - } - - await client.clearCache(); - - await expect( - client.transporter.requestsCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - await expect( - client.transporter.responsesCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); -}); - -test('clearCache without promise', async () => { - const client = algoliasearch('appId', 'apiKey'); - - client.transporter.requestsCache.set('bla', 'blo'); - client.transporter.responsesCache.set('bla', 'blo'); - - if (testing.isBrowser()) { - await expect( - client.transporter.requestsCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('blo'); - await expect( - client.transporter.responsesCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('blo'); - } else { - // node uses a null cache, so these assertions don't make sense there - await expect( - client.transporter.requestsCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - await expect( - client.transporter.responsesCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - } - - // no await, since default memory caches _actually_ are instant - client.clearCache(); - - await expect( - client.transporter.requestsCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - await expect( - client.transporter.responsesCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); -}); diff --git a/packages/client-search/src/__tests__/unit/search-index.test.ts b/packages/client-search/src/__tests__/unit/search-index.test.ts deleted file mode 100644 index e9fd8d921..000000000 --- a/packages/client-search/src/__tests__/unit/search-index.test.ts +++ /dev/null @@ -1,295 +0,0 @@ -import { addMethods, encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions, Transporter } from '@algolia/transporter'; -import { anything, deepEqual, spy, verify, when } from 'ts-mockito'; - -import { BatchActionEnum, SaveObjectsOptions } from '../..'; -import { createFaker } from '../../../../client-common/src/__tests__/createFaker'; -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; -import { chunkedBatch } from '../../methods'; - -const algoliasearch = new TestSuite().algoliasearch; -let index: any; -let transporterMock: Transporter; - -const res: any = { - objectIDs: ['1'], - taskID: '1', -}; - -beforeEach(() => { - index = addMethods(algoliasearch('appId', 'apiKey').initIndex('foo'), { - chunkedBatch, - }); - - transporterMock = spy(index.transporter); - - when(transporterMock.read(anything(), anything())).thenResolve({ - status: 'published', - hits: [ - { - objectID: 1, - name: 'foo', - }, - ], - }); -}); - -describe('save objects', () => { - it('save object proxies down to save objects', async () => { - const obj = createFaker().object(); - const requestOptions = { - autoGenerateObjectIDIfNotExist: true, - timeout: 1, - }; - - const request = { - method: MethodEnum.Post, - path: '1/indexes/foo/batch', - data: { requests: [{ action: 'addObject', body: obj }] }, - }; - - when(transporterMock.write(deepEqual(request), deepEqual({ timeout: 1 }))).thenResolve(res); - - await index.saveObject(obj, requestOptions); - - verify(transporterMock.write(deepEqual(request), deepEqual({ timeout: 1 }))).once(); - }); - - it('uses addObject when `autoGenerateObjectIDIfNotExist` is true', async () => { - const objects = [createFaker().object()]; - const requestOptions: RequestOptions & SaveObjectsOptions = { - autoGenerateObjectIDIfNotExist: true, - }; - - const request = { - method: MethodEnum.Post, - path: '1/indexes/foo/batch', - data: { requests: [{ action: 'addObject', body: objects[0] }] }, - }; - - when(transporterMock.write(deepEqual(request), deepEqual({}))).thenResolve(res); - - await index.saveObjects(objects, requestOptions); - - verify(transporterMock.write(deepEqual(request), deepEqual({}))).once(); - }); - - it('uses updateObject when `autoGenerateObjectIDIfNotExist` is not set', async () => { - const objects = [createFaker().object('1')]; - - const request = { - method: MethodEnum.Post, - path: '1/indexes/foo/batch', - data: { requests: [{ action: 'updateObject', body: objects[0] }] }, - }; - - when(transporterMock.write(deepEqual(request), deepEqual({}))).thenResolve(res); - - await expect(index.saveObjects(objects)).resolves.toMatchObject({ - objectIDs: ['1'], - taskIDs: ['1'], - }); - verify(transporterMock.write(deepEqual(request), deepEqual({}))).once(); - }); - - it('validates the object id when `autoGenerateObjectIDIfNotExist` is !== true', async () => { - const objects = [{ noObjectId: true }]; - - await expect(index.saveObjects(objects)).rejects.toMatchObject({ - message: - 'All objects must have an unique objectID ' + - '(like a primary key) to be valid. ' + - 'Algolia is also able to generate objectIDs ' + - "automatically but *it's not recommended*. " + - "To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option.", - }); - - verify(transporterMock.write(anything(), anything())).never(); - }); -}); - -describe('chunked batch', () => { - it("Don't call batch when no objects", async () => { - await index.chunkedBatch([], BatchActionEnum.AddObject); - await index.chunkedBatch([], BatchActionEnum.UpdateObject); - - verify(transporterMock.write(anything(), anything())).never(); - }); - - it('call batch when there is objects with default batch size', async () => { - when(transporterMock.write(anything(), anything())).thenResolve({ - taskID: 1, - objectIDs: [1], - }); - - await index.chunkedBatch([createFaker().object()], BatchActionEnum.AddObject); - await index.chunkedBatch(createFaker().objects(1001), BatchActionEnum.UpdateObject); - - verify(transporterMock.write(anything(), anything())).times(3); - }); - - it('call batch when there is objects with a given batch size', async () => { - when(transporterMock.write(anything(), anything())).thenResolve({ - taskID: 1, - objectIDs: [1], - }); - - await index.chunkedBatch([createFaker().object()], BatchActionEnum.AddObject); - await index.chunkedBatch(createFaker().objects(1001), BatchActionEnum.UpdateObject, { - batchSize: 100, - }); - - verify(transporterMock.write(anything(), anything())).times(12); - }); - - it('Does not perform one extra call when size of objects is the same as batch size', async () => { - when(transporterMock.write(anything(), anything())).thenResolve({ - taskID: 1, - objectIDs: [1], - }); - - await index.chunkedBatch(createFaker().objects(1000), BatchActionEnum.UpdateObject); - - verify(transporterMock.write(anything(), anything())).once(); - }); -}); - -describe('get object', () => { - it('Passes request options to transporter', async () => { - const requestOptions = { - timeout: 2, - }; - - await index.getObject('bar', requestOptions); - - verify(transporterMock.read(anything(), deepEqual(requestOptions))).once(); - }); -}); - -describe('get settings', () => { - const request = { - method: MethodEnum.Get, - path: '1/indexes/foo/settings', - data: { - getVersion: 2, - }, - }; - - it('Passes getVersion=2 queryParameters without custom request options', async () => { - await index.getSettings(); - await index.getSettings({}); - - verify(transporterMock.read(deepEqual(request), undefined)).once(); - verify(transporterMock.read(deepEqual(request), deepEqual({}))).once(); - }); - - it('Passes getVersion=2 queryParameters and custom request options', async () => { - const requestOptions = { - queryParameters: { foo: 'bar' }, - }; - - await index.getSettings({ - queryParameters: { - foo: 'bar', - }, - }); - - verify(transporterMock.read(deepEqual(request), deepEqual(requestOptions))).once(); - }); -}); - -describe('get objects', () => { - it('Passes request options to transporter', async () => { - const requestOptions = { - timeout: 2, - }; - - await index.getObjects(['bar'], requestOptions); - - verify(transporterMock.read(anything(), deepEqual(requestOptions))).once(); - }); - - it('Allows to pass `attributesToRetrieve`', async () => { - const requestOptions = { - attributesToRetrieve: ['name'], - timeout: 2, - }; - - await index.getObjects(['bar'], requestOptions); - - verify( - transporterMock.read( - deepEqual({ - method: MethodEnum.Post, - path: `1/indexes/*/objects`, - data: { - requests: [ - { - indexName: 'foo', - objectID: 'bar', - attributesToRetrieve: ['name'], - }, - ], - }, - }), - deepEqual({ timeout: 2 }) - ) - ).once(); - }); -}); - -describe('find object', () => { - it('passes request options to search', async () => { - const requestOptions = { - timeout: 10, - page: 0, - }; - - await index.findObject(() => true, requestOptions); - - verify(transporterMock.read(anything(), deepEqual(requestOptions))).once(); - }); -}); - -describe('exists', () => { - it('passes request options to getSettings', async () => { - const requestOptions: RequestOptions = { - data: { - foo: 'bar', - }, - timeout: 10, - headers: {}, - queryParameters: { getVersion: '2' }, - cacheable: undefined, - }; - - await index.exists(requestOptions); - - verify(transporterMock.read(anything(), deepEqual(requestOptions))).once(); - }); -}); - -describe('wait task', () => { - it('passes request options to get task', async () => { - const requestOptions = { - data: {}, - timeout: 10, - headers: {}, - queryParameters: {}, - cacheable: undefined, - }; - - await index.waitTask(1, requestOptions); - - verify( - transporterMock.read( - deepEqual({ - method: MethodEnum.Get, - path: encode('1/indexes/%s/task/%s', 'foo', '1'), - }), - deepEqual(requestOptions) - ) - ).once(); - }); -}); diff --git a/packages/client-search/src/createBrowsablePromise.ts b/packages/client-search/src/createBrowsablePromise.ts deleted file mode 100644 index eb27cc7ca..000000000 --- a/packages/client-search/src/createBrowsablePromise.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { BrowseOptions, BrowseRequestData, BrowseResponse } from '.'; - -export function createBrowsablePromise( - options: { - readonly shouldStop: (response: BrowseResponse) => boolean; - readonly request: (data: BrowseRequestData) => Readonly>>; - } & BrowseOptions -): Readonly> { - const browse = (data: BrowseRequestData): Promise => { - return options.request(data).then(response => { - /** - * First we send to the developer the - * batch retrieved from the API. - */ - if (options.batch !== undefined) { - options.batch(response.hits); - } - - /** - * Then, we ask to the browse concrete implementation - * if we should stop browsing. As example, the `browseObjects` - * method will stop if the cursor is not present on the response. - */ - if (options.shouldStop(response)) { - return undefined; - } - - /** - * Finally, if the response contains a cursor, we browse to the next - * batch using that same cursor. Otherwise, we just use the traditional - * browsing using the page element. - */ - if (response.cursor) { - return browse({ - cursor: response.cursor, - }); - } - - return browse({ - page: (data.page || 0) + 1, - }); - }); - }; - - return browse({}); -} diff --git a/packages/client-search/src/createSearchClient.ts b/packages/client-search/src/createSearchClient.ts deleted file mode 100644 index aa1b80c49..000000000 --- a/packages/client-search/src/createSearchClient.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { - addMethods, - AuthMode, - ClientTransporterOptions, - createAuth, - CreateClient, - shuffle, -} from '@algolia/client-common'; -import { CallEnum, createTransporter, HostOptions } from '@algolia/transporter'; - -import { SearchClient, SearchClientOptions } from './types'; - -export const createSearchClient: CreateClient< - SearchClient, - SearchClientOptions & ClientTransporterOptions -> = options => { - const appId = options.appId; - - const auth = createAuth( - options.authMode !== undefined ? options.authMode : AuthMode.WithinHeaders, - appId, - options.apiKey - ); - - const transporter = createTransporter({ - hosts: ([ - { url: `${appId}-dsn.algolia.net`, accept: CallEnum.Read }, - { url: `${appId}.algolia.net`, accept: CallEnum.Write }, - ] as readonly HostOptions[]).concat( - shuffle([ - { url: `${appId}-1.algolianet.com` }, - { url: `${appId}-2.algolianet.com` }, - { url: `${appId}-3.algolianet.com` }, - ]) - ), - ...options, - headers: { - ...auth.headers(), - ...{ 'content-type': 'application/x-www-form-urlencoded' }, - ...options.headers, - }, - - queryParameters: { - ...auth.queryParameters(), - ...options.queryParameters, - }, - }); - - const base = { - transporter, - appId, - addAlgoliaAgent(segment: string, version?: string): void { - transporter.userAgent.add({ segment, version }); - }, - clearCache(): Readonly> { - return Promise.all([ - transporter.requestsCache.clear(), - transporter.responsesCache.clear(), - ]).then(() => undefined); - }, - }; - - return addMethods(base, options.methods); -}; diff --git a/packages/client-search/src/errors/createMissingObjectIDError.ts b/packages/client-search/src/errors/createMissingObjectIDError.ts deleted file mode 100644 index 59d6483a6..000000000 --- a/packages/client-search/src/errors/createMissingObjectIDError.ts +++ /dev/null @@ -1,11 +0,0 @@ -export function createMissingObjectIDError(): Error { - return { - name: 'MissingObjectIDError', - message: - 'All objects must have an unique objectID ' + - '(like a primary key) to be valid. ' + - 'Algolia is also able to generate objectIDs ' + - "automatically but *it's not recommended*. " + - "To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option.", - }; -} diff --git a/packages/client-search/src/errors/createObjectNotFoundError.ts b/packages/client-search/src/errors/createObjectNotFoundError.ts deleted file mode 100644 index f2edec171..000000000 --- a/packages/client-search/src/errors/createObjectNotFoundError.ts +++ /dev/null @@ -1,6 +0,0 @@ -export function createObjectNotFoundError(): Error { - return { - name: 'ObjectNotFoundError', - message: 'Object not found.', - }; -} diff --git a/packages/client-search/src/errors/createValidUntilNotFoundError.ts b/packages/client-search/src/errors/createValidUntilNotFoundError.ts deleted file mode 100644 index 954de70c7..000000000 --- a/packages/client-search/src/errors/createValidUntilNotFoundError.ts +++ /dev/null @@ -1,6 +0,0 @@ -export function createValidUntilNotFoundError(): Error { - return { - name: 'ValidUntilNotFoundError', - message: 'ValidUntil not found in given secured api key.', - }; -} diff --git a/packages/client-search/src/errors/index.ts b/packages/client-search/src/errors/index.ts deleted file mode 100644 index c52a5b9bb..000000000 --- a/packages/client-search/src/errors/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createMissingObjectIDError'; -export * from './createObjectNotFoundError'; -export * from './createValidUntilNotFoundError'; diff --git a/packages/client-search/src/index.ts b/packages/client-search/src/index.ts deleted file mode 100644 index 81aef0eb3..000000000 --- a/packages/client-search/src/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createBrowsablePromise'; -export * from './createSearchClient'; -export * from './errors/index'; -export * from './methods/index'; -export * from './types/index'; diff --git a/packages/client-search/src/methods/client/addApiKey.ts b/packages/client-search/src/methods/client/addApiKey.ts deleted file mode 100644 index 00c89ed00..000000000 --- a/packages/client-search/src/methods/client/addApiKey.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { - createRetryablePromise, - createWaitablePromise, - Wait, - WaitablePromise, -} from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { ApiError, RequestOptions } from '@algolia/transporter'; - -import { - AddApiKeyOptions, - AddApiKeyResponse, - ApiKeyACLType, - getApiKey, - GetApiKeyResponse, - SearchClient, -} from '../..'; - -export const addApiKey = (base: SearchClient) => { - return ( - acl: readonly ApiKeyACLType[], - requestOptions?: AddApiKeyOptions & - Pick> - ): Readonly> => { - const { queryParameters, ...options } = requestOptions || {}; - - const data = { - acl, - ...(queryParameters !== undefined ? { queryParameters } : {}), - }; - - const wait: Wait = (response, waitRequestOptions) => { - return createRetryablePromise(retry => { - return getApiKey(base)(response.key, waitRequestOptions).catch((apiError: ApiError) => { - if (apiError.status !== 404) { - throw apiError; - } - - return retry(); - }); - }); - }; - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: '1/keys', - data, - }, - options - ), - wait - ); - }; -}; diff --git a/packages/client-search/src/methods/client/assignUserID.ts b/packages/client-search/src/methods/client/assignUserID.ts deleted file mode 100644 index cae4ec9ba..000000000 --- a/packages/client-search/src/methods/client/assignUserID.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { createMappedRequestOptions, RequestOptions } from '@algolia/transporter'; - -import { AssignUserIDResponse, SearchClient } from '../..'; - -export const assignUserID = (base: SearchClient) => { - return ( - userID: string, - clusterName: string, - requestOptions?: RequestOptions - ): Readonly> => { - const mappedRequestOptions = createMappedRequestOptions(requestOptions); - - // eslint-disable-next-line functional/immutable-data - mappedRequestOptions.queryParameters['X-Algolia-User-ID'] = userID; - - return base.transporter.write( - { - method: MethodEnum.Post, - path: '1/clusters/mapping', - data: { cluster: clusterName }, - }, - mappedRequestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/assignUserIDs.ts b/packages/client-search/src/methods/client/assignUserIDs.ts deleted file mode 100644 index 46fe91f60..000000000 --- a/packages/client-search/src/methods/client/assignUserIDs.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { AssignUserIDsResponse, SearchClient } from '../..'; - -export const assignUserIDs = (base: SearchClient) => { - return ( - userIDs: readonly string[], - clusterName: string, - requestOptions?: RequestOptions - ): Readonly> => { - return base.transporter.write( - { - method: MethodEnum.Post, - path: '1/clusters/mapping/batch', - data: { - users: userIDs, - cluster: clusterName, - }, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/clearDictionaryEntries.ts b/packages/client-search/src/methods/client/clearDictionaryEntries.ts deleted file mode 100644 index e89e574de..000000000 --- a/packages/client-search/src/methods/client/clearDictionaryEntries.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - DictionaryEntriesOptions, - DictionaryEntriesResponse, - DictionaryName, - SearchClient, -} from '../..'; -import { waitAppTask } from '.'; - -export const clearDictionaryEntries = (base: SearchClient) => { - return ( - dictionary: DictionaryName, - requestOptions?: RequestOptions & DictionaryEntriesOptions - ): Readonly> => { - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('/1/dictionaries/%s/batch', dictionary), - data: { - clearExistingDictionaryEntries: true, - requests: { action: 'addEntry', body: [] }, - }, - }, - requestOptions - ), - (response, waitRequestOptions) => waitAppTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/client/copyIndex.ts b/packages/client-search/src/methods/client/copyIndex.ts deleted file mode 100644 index e0f1cc6d7..000000000 --- a/packages/client-search/src/methods/client/copyIndex.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { createWaitablePromise, encode, Wait, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { CopyIndexOptions, IndexOperationResponse, initIndex, SearchClient, waitTask } from '../..'; - -export const copyIndex = (base: SearchClient) => { - return ( - from: string, - to: string, - requestOptions?: CopyIndexOptions & RequestOptions - ): Readonly> => { - const wait: Wait = (response, waitRequestOptions) => { - return initIndex(base)(from, { - methods: { waitTask }, - }).waitTask(response.taskID, waitRequestOptions); - }; - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/operation', from), - data: { - operation: 'copy', - destination: to, - }, - }, - requestOptions - ), - wait - ); - }; -}; diff --git a/packages/client-search/src/methods/client/copyRules.ts b/packages/client-search/src/methods/client/copyRules.ts deleted file mode 100644 index a7c8b8328..000000000 --- a/packages/client-search/src/methods/client/copyRules.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { copyIndex, IndexOperationResponse, ScopeEnum, SearchClient } from '../..'; - -export const copyRules = (base: SearchClient) => { - return ( - from: string, - to: string, - requestOptions?: RequestOptions - ): Readonly> => { - return copyIndex(base)(from, to, { - ...requestOptions, - scope: [ScopeEnum.Rules], - }); - }; -}; diff --git a/packages/client-search/src/methods/client/copySettings.ts b/packages/client-search/src/methods/client/copySettings.ts deleted file mode 100644 index c38363bbd..000000000 --- a/packages/client-search/src/methods/client/copySettings.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { copyIndex, IndexOperationResponse, ScopeEnum, SearchClient } from '../..'; - -export const copySettings = (base: SearchClient) => { - return ( - from: string, - to: string, - requestOptions?: RequestOptions - ): Readonly> => { - return copyIndex(base)(from, to, { - ...requestOptions, - scope: [ScopeEnum.Settings], - }); - }; -}; diff --git a/packages/client-search/src/methods/client/copySynonyms.ts b/packages/client-search/src/methods/client/copySynonyms.ts deleted file mode 100644 index f7d1b3b15..000000000 --- a/packages/client-search/src/methods/client/copySynonyms.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { copyIndex, IndexOperationResponse, ScopeEnum, SearchClient } from '../..'; - -export const copySynonyms = (base: SearchClient) => { - return ( - from: string, - to: string, - requestOptions?: RequestOptions - ): Readonly> => { - return copyIndex(base)(from, to, { - ...requestOptions, - scope: [ScopeEnum.Synonyms], - }); - }; -}; diff --git a/packages/client-search/src/methods/client/customRequest.ts b/packages/client-search/src/methods/client/customRequest.ts deleted file mode 100644 index 65ec0850e..000000000 --- a/packages/client-search/src/methods/client/customRequest.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { Request, RequestOptions } from '@algolia/transporter'; - -import { SearchClient } from '../..'; - -export const customRequest = (base: SearchClient) => { - return (request: Request, requestOptions?: RequestOptions): Readonly> => { - if (request.method === MethodEnum.Get) { - return base.transporter.read(request, requestOptions); - } - - return base.transporter.write(request, requestOptions); - }; -}; diff --git a/packages/client-search/src/methods/client/deleteApiKey.ts b/packages/client-search/src/methods/client/deleteApiKey.ts deleted file mode 100644 index aa2332552..000000000 --- a/packages/client-search/src/methods/client/deleteApiKey.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { - createRetryablePromise, - createWaitablePromise, - encode, - Wait, - WaitablePromise, -} from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { ApiError, RequestOptions } from '@algolia/transporter'; - -import { DeleteApiKeyResponse, getApiKey, SearchClient } from '../..'; - -export const deleteApiKey = (base: SearchClient) => { - return ( - apiKey: string, - requestOptions?: RequestOptions - ): Readonly> => { - const wait: Wait = (_, waitRequestOptions) => { - return createRetryablePromise(retry => { - return getApiKey(base)(apiKey, waitRequestOptions) - .then(retry) - .catch((apiError: ApiError) => { - if (apiError.status !== 404) { - throw apiError; - } - }); - }); - }; - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Delete, - path: encode('1/keys/%s', apiKey), - }, - requestOptions - ), - wait - ); - }; -}; diff --git a/packages/client-search/src/methods/client/deleteDictionaryEntries.ts b/packages/client-search/src/methods/client/deleteDictionaryEntries.ts deleted file mode 100644 index c29e4dbf7..000000000 --- a/packages/client-search/src/methods/client/deleteDictionaryEntries.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - DictionaryEntriesOptions, - DictionaryEntriesResponse, - DictionaryName, - SearchClient, -} from '../..'; -import { waitAppTask } from '.'; - -export const deleteDictionaryEntries = (base: SearchClient) => { - return ( - dictionary: DictionaryName, - objectIDs: readonly string[], - requestOptions?: RequestOptions & DictionaryEntriesOptions - ): Readonly> => { - const requests = objectIDs.map(objectID => ({ - action: 'deleteEntry', - body: { objectID }, - })); - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('/1/dictionaries/%s/batch', dictionary), - data: { clearExistingDictionaryEntries: false, requests }, - }, - requestOptions - ), - (response, waitRequestOptions) => waitAppTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/client/generateSecuredApiKey.ts b/packages/client-search/src/methods/client/generateSecuredApiKey.ts deleted file mode 100644 index a2a400d5f..000000000 --- a/packages/client-search/src/methods/client/generateSecuredApiKey.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { serializeQueryParameters } from '@algolia/transporter'; -import * as crypto from 'crypto'; - -import { SecuredApiKeyRestrictions } from '../..'; - -export const generateSecuredApiKey = () => { - return (parentApiKey: string, restrictions: SecuredApiKeyRestrictions): string => { - const queryParameters = serializeQueryParameters(restrictions); - - const securedKey = crypto - .createHmac('sha256', parentApiKey) - .update(queryParameters) - .digest('hex'); - - return Buffer.from(securedKey + queryParameters).toString('base64'); - }; -}; diff --git a/packages/client-search/src/methods/client/getApiKey.ts b/packages/client-search/src/methods/client/getApiKey.ts deleted file mode 100644 index 10740e485..000000000 --- a/packages/client-search/src/methods/client/getApiKey.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { GetApiKeyResponse, SearchClient } from '../..'; - -export const getApiKey = (base: SearchClient) => { - return ( - apiKey: string, - requestOptions?: RequestOptions - ): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: encode('1/keys/%s', apiKey), - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/getAppTask.ts b/packages/client-search/src/methods/client/getAppTask.ts deleted file mode 100644 index 7805babf2..000000000 --- a/packages/client-search/src/methods/client/getAppTask.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { SearchClient, TaskStatusResponse } from '../..'; - -export const getAppTask = (base: SearchClient) => { - return ( - taskID: number, - requestOptions?: RequestOptions - ): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: encode('1/task/%s', taskID.toString()), - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/getDictionarySettings.ts b/packages/client-search/src/methods/client/getDictionarySettings.ts deleted file mode 100644 index cb4758347..000000000 --- a/packages/client-search/src/methods/client/getDictionarySettings.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { GetDictionarySettingsResponse, SearchClient } from '../..'; - -export const getDictionarySettings = (base: SearchClient) => { - return (requestOptions?: RequestOptions): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: '/1/dictionaries/*/settings', - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/getLogs.ts b/packages/client-search/src/methods/client/getLogs.ts deleted file mode 100644 index ec04b6c16..000000000 --- a/packages/client-search/src/methods/client/getLogs.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { GetLogsResponse, SearchClient } from '../..'; - -export const getLogs = (base: SearchClient) => { - return (requestOptions?: RequestOptions): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: '1/logs', - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/getSecuredApiKeyRemainingValidity.ts b/packages/client-search/src/methods/client/getSecuredApiKeyRemainingValidity.ts deleted file mode 100644 index 563516779..000000000 --- a/packages/client-search/src/methods/client/getSecuredApiKeyRemainingValidity.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { createValidUntilNotFoundError } from '../..'; - -export const getSecuredApiKeyRemainingValidity = () => { - return (securedApiKey: string): number => { - const decodedString = Buffer.from(securedApiKey, 'base64').toString('ascii'); - const regex = /validUntil=(\d+)/; - const match = decodedString.match(regex); - - if (match === null) { - throw createValidUntilNotFoundError(); - } - - return parseInt(match[1], 10) - Math.round(new Date().getTime() / 1000); - }; -}; diff --git a/packages/client-search/src/methods/client/getTopUserIDs.ts b/packages/client-search/src/methods/client/getTopUserIDs.ts deleted file mode 100644 index 8b65b58ca..000000000 --- a/packages/client-search/src/methods/client/getTopUserIDs.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { GetTopUserIDsResponse, SearchClient } from '../..'; - -export const getTopUserIDs = (base: SearchClient) => { - return (requestOptions?: RequestOptions): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: '1/clusters/mapping/top', - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/getUserID.ts b/packages/client-search/src/methods/client/getUserID.ts deleted file mode 100644 index f30e7a0c9..000000000 --- a/packages/client-search/src/methods/client/getUserID.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { SearchClient, UserIDResponse } from '../..'; - -export const getUserID = (base: SearchClient) => { - return (userID: string, requestOptions?: RequestOptions): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: encode('1/clusters/mapping/%s', userID), - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/hasPendingMappings.ts b/packages/client-search/src/methods/client/hasPendingMappings.ts deleted file mode 100644 index c4cdbadc8..000000000 --- a/packages/client-search/src/methods/client/hasPendingMappings.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { HasPendingMappingsOptions, HasPendingMappingsResponse, SearchClient } from '../..'; - -export const hasPendingMappings = (base: SearchClient) => { - return ( - requestOptions?: HasPendingMappingsOptions & RequestOptions - ): Readonly> => { - const { retrieveMappings, ...options } = requestOptions || {}; - - if (retrieveMappings === true) { - // eslint-disable-next-line functional/immutable-data - options.getClusters = true; - } - - return base.transporter.read( - { - method: MethodEnum.Get, - path: '1/clusters/mapping/pending', - }, - options - ); - }; -}; diff --git a/packages/client-search/src/methods/client/index.ts b/packages/client-search/src/methods/client/index.ts deleted file mode 100644 index 210702541..000000000 --- a/packages/client-search/src/methods/client/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './addApiKey'; -export * from './assignUserID'; -export * from './assignUserIDs'; -export * from './clearDictionaryEntries'; -export * from './copyIndex'; -export * from './copyRules'; -export * from './copySettings'; -export * from './copySynonyms'; -export * from './customRequest'; -export * from './deleteApiKey'; -export * from './deleteDictionaryEntries'; -export * from './generateSecuredApiKey'; -export * from './getApiKey'; -export * from './getAppTask'; -export * from './getDictionarySettings'; -export * from './getLogs'; -export * from './getSecuredApiKeyRemainingValidity'; -export * from './getTopUserIDs'; -export * from './getUserID'; -export * from './hasPendingMappings'; -export * from './initIndex'; -export * from './listApiKeys'; -export * from './listClusters'; -export * from './listIndices'; -export * from './listUserIDs'; -export * from './moveIndex'; -export * from './multipleBatch'; -export * from './multipleGetObjects'; -export * from './multipleQueries'; -export * from './multipleSearchForFacetValues'; -export * from './removeUserID'; -export * from './replaceDictionaryEntries'; -export * from './restoreApiKey'; -export * from './saveDictionaryEntries'; -export * from './searchDictionaryEntries'; -export * from './searchUserIDs'; -export * from './setDictionarySettings'; -export * from './updateApiKey'; -export * from './waitAppTask'; diff --git a/packages/client-search/src/methods/client/initIndex.ts b/packages/client-search/src/methods/client/initIndex.ts deleted file mode 100644 index ffe48bedc..000000000 --- a/packages/client-search/src/methods/client/initIndex.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { addMethods } from '@algolia/client-common'; - -import { SearchClient, SearchIndex } from '../..'; -import { CreateIndex } from '../../types/CreateIndex'; - -export const initIndex = (base: SearchClient): CreateIndex => { - return (indexName, options = {}) => { - const searchIndex: SearchIndex = { - transporter: base.transporter, - appId: base.appId, - indexName, - }; - - return addMethods(searchIndex, options.methods); - }; -}; diff --git a/packages/client-search/src/methods/client/listApiKeys.ts b/packages/client-search/src/methods/client/listApiKeys.ts deleted file mode 100644 index 7f2d533b7..000000000 --- a/packages/client-search/src/methods/client/listApiKeys.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { ListApiKeysResponse, SearchClient } from '../..'; - -export const listApiKeys = (base: SearchClient) => { - return (requestOptions?: RequestOptions): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: '1/keys', - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/listClusters.ts b/packages/client-search/src/methods/client/listClusters.ts deleted file mode 100644 index b80340080..000000000 --- a/packages/client-search/src/methods/client/listClusters.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { ListClustersResponse, SearchClient } from '../..'; - -export const listClusters = (base: SearchClient) => { - return (requestOptions?: RequestOptions): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: '1/clusters', - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/listIndices.ts b/packages/client-search/src/methods/client/listIndices.ts deleted file mode 100644 index ef6a74ab3..000000000 --- a/packages/client-search/src/methods/client/listIndices.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { ListIndicesResponse, SearchClient } from '../..'; - -export const listIndices = (base: SearchClient) => { - return (requestOptions?: RequestOptions): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: '1/indexes', - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/listUserIDs.ts b/packages/client-search/src/methods/client/listUserIDs.ts deleted file mode 100644 index 9d1e522e9..000000000 --- a/packages/client-search/src/methods/client/listUserIDs.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { ListUserIDsOptions, ListUserIDsResponse, SearchClient } from '../..'; - -export const listUserIDs = (base: SearchClient) => { - return ( - requestOptions?: ListUserIDsOptions & RequestOptions - ): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: '1/clusters/mapping', - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/moveIndex.ts b/packages/client-search/src/methods/client/moveIndex.ts deleted file mode 100644 index 5cb065c66..000000000 --- a/packages/client-search/src/methods/client/moveIndex.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { createWaitablePromise, encode, Wait, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { IndexOperationResponse, initIndex, SearchClient, waitTask } from '../..'; - -export const moveIndex = (base: SearchClient) => { - return ( - from: string, - to: string, - requestOptions?: RequestOptions - ): Readonly> => { - const wait: Wait = (response, waitRequestOptions) => { - return initIndex(base)(from, { - methods: { waitTask }, - }).waitTask(response.taskID, waitRequestOptions); - }; - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/operation', from), - data: { - operation: 'move', - destination: to, - }, - }, - requestOptions - ), - wait - ); - }; -}; diff --git a/packages/client-search/src/methods/client/multipleBatch.ts b/packages/client-search/src/methods/client/multipleBatch.ts deleted file mode 100644 index 402058c3d..000000000 --- a/packages/client-search/src/methods/client/multipleBatch.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { createWaitablePromise, Wait, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - initIndex, - MultipleBatchRequest, - MultipleBatchResponse, - SearchClient, - waitTask, -} from '../..'; - -export const multipleBatch = (base: SearchClient) => { - return ( - requests: readonly MultipleBatchRequest[], - requestOptions?: RequestOptions - ): Readonly> => { - const wait: Wait = (response, waitRequestOptions) => { - return Promise.all( - Object.keys(response.taskID).map(indexName => { - return initIndex(base)(indexName, { - methods: { waitTask }, - }).waitTask(response.taskID[indexName], waitRequestOptions); - }) - ); - }; - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: '1/indexes/*/batch', - data: { - requests, - }, - }, - requestOptions - ), - wait - ); - }; -}; diff --git a/packages/client-search/src/methods/client/multipleGetObjects.ts b/packages/client-search/src/methods/client/multipleGetObjects.ts deleted file mode 100644 index 3052d5990..000000000 --- a/packages/client-search/src/methods/client/multipleGetObjects.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { MultipleGetObject, MultipleGetObjectsResponse, SearchClient } from '../..'; - -export const multipleGetObjects = (base: SearchClient) => { - return ( - requests: readonly MultipleGetObject[], - requestOptions?: RequestOptions - ): Readonly>> => { - return base.transporter.read( - { - method: MethodEnum.Post, - path: '1/indexes/*/objects', - data: { - requests, - }, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/multipleQueries.ts b/packages/client-search/src/methods/client/multipleQueries.ts deleted file mode 100644 index 254468a5b..000000000 --- a/packages/client-search/src/methods/client/multipleQueries.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions, serializeQueryParameters } from '@algolia/transporter'; - -import { - MultipleQueriesOptions, - MultipleQueriesQuery, - MultipleQueriesResponse, - SearchClient, -} from '../..'; - -export const multipleQueries = (base: SearchClient) => { - return ( - queries: readonly MultipleQueriesQuery[], - requestOptions?: RequestOptions & MultipleQueriesOptions - ): Readonly>> => { - const requests = queries.map(query => { - return { - ...query, - params: serializeQueryParameters(query.params || {}), - }; - }); - - return base.transporter.read( - { - method: MethodEnum.Post, - path: '1/indexes/*/queries', - data: { - requests, - }, - cacheable: true, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/multipleSearchForFacetValues.ts b/packages/client-search/src/methods/client/multipleSearchForFacetValues.ts deleted file mode 100644 index b1dd0dcd8..000000000 --- a/packages/client-search/src/methods/client/multipleSearchForFacetValues.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { RequestOptions } from '@algolia/transporter'; - -import { - initIndex, - SearchClient, - searchForFacetValues, - SearchForFacetValuesQueryParams, - SearchForFacetValuesResponse, - SearchOptions, -} from '../..'; - -export const multipleSearchForFacetValues = (base: SearchClient) => { - return ( - queries: ReadonlyArray<{ - readonly indexName: string; - readonly params: SearchForFacetValuesQueryParams & SearchOptions; - }>, - requestOptions?: RequestOptions - ): Readonly> => { - return Promise.all( - queries.map(query => { - const { facetName, facetQuery, ...params } = query.params; - - return initIndex(base)(query.indexName, { - methods: { searchForFacetValues }, - }).searchForFacetValues(facetName, facetQuery, { - ...requestOptions, - ...params, - }); - }) - ); - }; -}; diff --git a/packages/client-search/src/methods/client/removeUserID.ts b/packages/client-search/src/methods/client/removeUserID.ts deleted file mode 100644 index 61c7c122c..000000000 --- a/packages/client-search/src/methods/client/removeUserID.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { createMappedRequestOptions, RequestOptions } from '@algolia/transporter'; - -import { RemoveUserIDResponse, SearchClient } from '../..'; - -export const removeUserID = (base: SearchClient) => { - return ( - userID: string, - requestOptions?: RequestOptions - ): Readonly> => { - const mappedRequestOptions = createMappedRequestOptions(requestOptions); - - // eslint-disable-next-line functional/immutable-data - mappedRequestOptions.queryParameters['X-Algolia-User-ID'] = userID; - - return base.transporter.write( - { - method: MethodEnum.Delete, - path: '1/clusters/mapping', - }, - mappedRequestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/replaceDictionaryEntries.ts b/packages/client-search/src/methods/client/replaceDictionaryEntries.ts deleted file mode 100644 index 4e9c24734..000000000 --- a/packages/client-search/src/methods/client/replaceDictionaryEntries.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - DictionaryEntriesOptions, - DictionaryEntriesResponse, - DictionaryEntry, - DictionaryName, - SearchClient, -} from '../..'; -import { waitAppTask } from '.'; - -export const replaceDictionaryEntries = (base: SearchClient) => { - return ( - dictionary: DictionaryName, - entries: readonly DictionaryEntry[], - requestOptions?: RequestOptions & DictionaryEntriesOptions - ): Readonly> => { - const requests = entries.map(entry => ({ - action: 'addEntry', - body: entry, - })); - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('/1/dictionaries/%s/batch', dictionary), - data: { clearExistingDictionaryEntries: true, requests }, - }, - requestOptions - ), - (response, waitRequestOptions) => waitAppTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/client/restoreApiKey.ts b/packages/client-search/src/methods/client/restoreApiKey.ts deleted file mode 100644 index f6ceb1789..000000000 --- a/packages/client-search/src/methods/client/restoreApiKey.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { - createRetryablePromise, - createWaitablePromise, - encode, - Wait, - WaitablePromise, -} from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { ApiError, RequestOptions } from '@algolia/transporter'; - -import { getApiKey, RestoreApiKeyResponse, SearchClient } from '../..'; - -export const restoreApiKey = (base: SearchClient) => { - return ( - apiKey: string, - requestOptions?: RequestOptions - ): Readonly> => { - const wait: Wait = (_, waitRequestOptions) => { - return createRetryablePromise(retry => { - return getApiKey(base)(apiKey, waitRequestOptions).catch((apiError: ApiError) => { - if (apiError.status !== 404) { - throw apiError; - } - - return retry(); - }); - }); - }; - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('1/keys/%s/restore', apiKey), - }, - requestOptions - ), - wait - ); - }; -}; diff --git a/packages/client-search/src/methods/client/saveDictionaryEntries.ts b/packages/client-search/src/methods/client/saveDictionaryEntries.ts deleted file mode 100644 index 5b6a6b5c4..000000000 --- a/packages/client-search/src/methods/client/saveDictionaryEntries.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - DictionaryEntriesOptions, - DictionaryEntriesResponse, - DictionaryEntry, - DictionaryName, - SearchClient, -} from '../..'; -import { waitAppTask } from '.'; - -export const saveDictionaryEntries = (base: SearchClient) => { - return ( - dictionary: DictionaryName, - entries: readonly DictionaryEntry[], - requestOptions?: RequestOptions & DictionaryEntriesOptions - ): Readonly> => { - const requests = entries.map(entry => ({ - action: 'addEntry', - body: entry, - })); - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('/1/dictionaries/%s/batch', dictionary), - data: { clearExistingDictionaryEntries: false, requests }, - }, - requestOptions - ), - (response, waitRequestOptions) => waitAppTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/client/searchDictionaryEntries.ts b/packages/client-search/src/methods/client/searchDictionaryEntries.ts deleted file mode 100644 index dc45abd90..000000000 --- a/packages/client-search/src/methods/client/searchDictionaryEntries.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { DictionaryName, SearchClient, SearchDictionaryEntriesResponse } from '../..'; - -export const searchDictionaryEntries = (base: SearchClient) => { - return ( - dictionary: DictionaryName, - query: string, - requestOptions?: RequestOptions - ): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Post, - path: encode('/1/dictionaries/%s/search', dictionary), - data: { - query, - }, - cacheable: true, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/searchUserIDs.ts b/packages/client-search/src/methods/client/searchUserIDs.ts deleted file mode 100644 index 08bf24537..000000000 --- a/packages/client-search/src/methods/client/searchUserIDs.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { SearchClient, SearchUserIDsOptions, SearchUserIDsResponse } from '../..'; - -export const searchUserIDs = (base: SearchClient) => { - return ( - query: string, - requestOptions?: SearchUserIDsOptions & RequestOptions - ): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Post, - path: '1/clusters/mapping/search', - data: { - query, - }, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/client/setDictionarySettings.ts b/packages/client-search/src/methods/client/setDictionarySettings.ts deleted file mode 100644 index 5ceebc6d4..000000000 --- a/packages/client-search/src/methods/client/setDictionarySettings.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { createWaitablePromise, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { DictionaryEntriesResponse, DictionarySettings, SearchClient } from '../..'; -import { waitAppTask } from '.'; - -export const setDictionarySettings = (base: SearchClient) => { - return ( - settings: DictionarySettings, - requestOptions?: RequestOptions - ): Readonly> => { - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Put, - path: '/1/dictionaries/*/settings', - data: settings, - }, - requestOptions - ), - (response, waitRequestOptions) => waitAppTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/client/updateApiKey.ts b/packages/client-search/src/methods/client/updateApiKey.ts deleted file mode 100644 index d45c0821c..000000000 --- a/packages/client-search/src/methods/client/updateApiKey.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { - createRetryablePromise, - createWaitablePromise, - encode, - Wait, - WaitablePromise, -} from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - getApiKey, - GetApiKeyResponse, - SearchClient, - UpdateApiKeyOptions, - UpdateApiKeyResponse, -} from '../..'; - -export const updateApiKey = (base: SearchClient) => { - return ( - apiKey: string, - requestOptions?: UpdateApiKeyOptions & - Pick> - ): Readonly> => { - const updatedFields = Object.assign({}, requestOptions); - const { queryParameters, ...options } = requestOptions || {}; - const data = queryParameters ? { queryParameters } : {}; - - const apiKeyFields = [ - 'acl', - 'indexes', - 'referers', - 'restrictSources', - 'queryParameters', - 'description', - 'maxQueriesPerIPPerHour', - 'maxHitsPerQuery', - ] as const; - - const hasChanged = (getApiKeyResponse: GetApiKeyResponse): boolean => { - return Object.keys(updatedFields) - .filter( - (updatedField: any): updatedField is typeof apiKeyFields[number] => - apiKeyFields.indexOf(updatedField) !== -1 - ) - .every(updatedField => { - return getApiKeyResponse[updatedField] === updatedFields[updatedField]; - }); - }; - - const wait: Wait = (_, waitRequestOptions) => - createRetryablePromise(retry => { - return getApiKey(base)(apiKey, waitRequestOptions).then(getApiKeyResponse => { - return hasChanged(getApiKeyResponse) ? Promise.resolve() : retry(); - }); - }); - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Put, - path: encode('1/keys/%s', apiKey), - data, - }, - options - ), - wait - ); - }; -}; diff --git a/packages/client-search/src/methods/client/waitAppTask.ts b/packages/client-search/src/methods/client/waitAppTask.ts deleted file mode 100644 index ae25111ae..000000000 --- a/packages/client-search/src/methods/client/waitAppTask.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { createRetryablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { SearchClient } from '../..'; -import { getAppTask } from '.'; - -export const waitAppTask = (base: SearchClient) => { - return (taskID: number, requestOptions?: RequestOptions): Readonly> => { - return createRetryablePromise(retry => { - return getAppTask(base)(taskID, requestOptions).then(response => { - return response.status !== 'published' ? retry() : undefined; - }); - }); - }; -}; diff --git a/packages/client-search/src/methods/index.ts b/packages/client-search/src/methods/index.ts deleted file mode 100644 index 2d21e0f92..000000000 --- a/packages/client-search/src/methods/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './client/index'; -export * from './index/index'; diff --git a/packages/client-search/src/methods/index/batch.ts b/packages/client-search/src/methods/index/batch.ts deleted file mode 100644 index fba7bc80f..000000000 --- a/packages/client-search/src/methods/index/batch.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { createWaitablePromise, encode, Wait, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { BatchRequest, BatchResponse, SearchIndex, waitTask } from '../..'; - -export const batch = (base: SearchIndex) => { - return ( - requests: readonly BatchRequest[], - requestOptions?: RequestOptions - ): Readonly> => { - const wait: Wait = (response, waitRequestOptions) => { - return waitTask(base)(response.taskID, waitRequestOptions); - }; - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/batch', base.indexName), - data: { - requests, - }, - }, - requestOptions - ), - wait - ); - }; -}; diff --git a/packages/client-search/src/methods/index/browseObjects.ts b/packages/client-search/src/methods/index/browseObjects.ts deleted file mode 100644 index 77ed9df3f..000000000 --- a/packages/client-search/src/methods/index/browseObjects.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - BrowseOptions, - BrowseResponse, - createBrowsablePromise, - SearchIndex, - SearchOptions, -} from '../..'; - -export const browseObjects = (base: SearchIndex) => { - return ( - requestOptions?: SearchOptions & BrowseOptions & RequestOptions - ): Readonly> => { - return createBrowsablePromise({ - shouldStop: response => response.cursor === undefined, - ...requestOptions, - request: (data: Record): Readonly>> => - base.transporter.read( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/browse', base.indexName), - data, - }, - requestOptions - ), - }); - }; -}; diff --git a/packages/client-search/src/methods/index/browseRules.ts b/packages/client-search/src/methods/index/browseRules.ts deleted file mode 100644 index d983bcdfa..000000000 --- a/packages/client-search/src/methods/index/browseRules.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { RequestOptions } from '@algolia/transporter'; - -import { - BrowseOptions, - BrowseResponse, - createBrowsablePromise, - Rule, - SearchIndex, - searchRules, - SearchRulesOptions, -} from '../..'; - -export const browseRules = (base: SearchIndex) => { - return ( - requestOptions?: SearchRulesOptions & BrowseOptions & RequestOptions - ): Readonly> => { - const options = { - hitsPerPage: 1000, - ...requestOptions, - }; - - return createBrowsablePromise({ - shouldStop: response => response.hits.length < options.hitsPerPage, - ...options, - request(data) { - return searchRules(base)('', { ...options, ...data }).then( - (response): BrowseResponse => { - return { - ...response, - hits: response.hits.map(rule => { - // eslint-disable-next-line functional/immutable-data,no-param-reassign - delete (rule as any)._highlightResult; - - return rule; - }), - }; - } - ); - }, - }); - }; -}; diff --git a/packages/client-search/src/methods/index/browseSynonyms.ts b/packages/client-search/src/methods/index/browseSynonyms.ts deleted file mode 100644 index f31580ae5..000000000 --- a/packages/client-search/src/methods/index/browseSynonyms.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { RequestOptions } from '@algolia/transporter'; - -import { - BrowseOptions, - BrowseResponse, - createBrowsablePromise, - SearchIndex, - searchSynonyms, - SearchSynonymsOptions, - Synonym, -} from '../..'; - -export const browseSynonyms = (base: SearchIndex) => { - return ( - requestOptions?: SearchSynonymsOptions & BrowseOptions & RequestOptions - ): Readonly> => { - const options = { - hitsPerPage: 1000, - ...requestOptions, - }; - - return createBrowsablePromise({ - shouldStop: response => response.hits.length < options.hitsPerPage, - ...options, - request(data) { - return searchSynonyms(base)('', { ...options, ...data }).then( - (response): BrowseResponse => { - return { - ...response, - hits: response.hits.map(synonym => { - // eslint-disable-next-line functional/immutable-data,no-param-reassign - delete (synonym as any)._highlightResult; - - return synonym; - }), - }; - } - ); - }, - }); - }; -}; diff --git a/packages/client-search/src/methods/index/chunkedBatch.ts b/packages/client-search/src/methods/index/chunkedBatch.ts deleted file mode 100644 index 48c308469..000000000 --- a/packages/client-search/src/methods/index/chunkedBatch.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { createWaitablePromise, WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - batch, - BatchActionType, - ChunkedBatchResponse, - ChunkOptions, - SearchIndex, - waitTask, -} from '../..'; - -export const chunkedBatch = (base: SearchIndex) => { - return ( - bodies: readonly object[], - action: BatchActionType, - requestOptions?: RequestOptions & ChunkOptions - ): Readonly> => { - const { batchSize, ...options } = requestOptions || {}; - - const response = { - taskIDs: [] as number[], // eslint-disable-line functional/prefer-readonly-type - objectIDs: [] as string[], // eslint-disable-line functional/prefer-readonly-type - }; - - const forEachBatch = (lastIndex: number = 0): Readonly> => { - // eslint-disable-next-line functional/prefer-readonly-type - const bodiesChunk: Array> = []; - // eslint-disable-next-line functional/no-let - let index: number; - - /* eslint-disable-next-line functional/no-loop-statement */ - for (index = lastIndex; index < bodies.length; index++) { - // eslint-disable-next-line functional/immutable-data - bodiesChunk.push(bodies[index]); - - if (bodiesChunk.length === (batchSize || 1000)) { - break; - } - } - - if (bodiesChunk.length === 0) { - return Promise.resolve(response); - } - - return batch(base)( - bodiesChunk.map(body => { - return { - action, - body, - }; - }), - options - ).then(res => { - response.objectIDs = response.objectIDs.concat(res.objectIDs); // eslint-disable-line functional/immutable-data - response.taskIDs.push(res.taskID); // eslint-disable-line functional/immutable-data - - index++; - - return forEachBatch(index); - }); - }; - - return createWaitablePromise(forEachBatch(), (chunkedBatchResponse, waitRequestOptions) => { - return Promise.all( - chunkedBatchResponse.taskIDs.map(taskID => { - return waitTask(base)(taskID, waitRequestOptions); - }) - ); - }); - }; -}; diff --git a/packages/client-search/src/methods/index/clearObjects.ts b/packages/client-search/src/methods/index/clearObjects.ts deleted file mode 100644 index 9557d0bf4..000000000 --- a/packages/client-search/src/methods/index/clearObjects.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { DeleteResponse, SearchIndex } from '../..'; -import { waitTask } from '.'; - -export const clearObjects = (base: SearchIndex) => { - return (requestOptions?: RequestOptions): Readonly> => { - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/clear', base.indexName), - }, - requestOptions - ), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/index/clearRules.ts b/packages/client-search/src/methods/index/clearRules.ts deleted file mode 100644 index ad4edaee1..000000000 --- a/packages/client-search/src/methods/index/clearRules.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { createMappedRequestOptions, RequestOptions } from '@algolia/transporter'; - -import { ClearRulesOptions, DeleteResponse, SearchIndex, waitTask } from '../..'; - -export const clearRules = (base: SearchIndex) => { - return ( - requestOptions?: RequestOptions & ClearRulesOptions - ): Readonly> => { - const { forwardToReplicas, ...options } = requestOptions || {}; - const mappedRequestOptions = createMappedRequestOptions(options); - if (forwardToReplicas) { - mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data - } - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/rules/clear', base.indexName), - }, - mappedRequestOptions - ), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/index/clearSynonyms.ts b/packages/client-search/src/methods/index/clearSynonyms.ts deleted file mode 100644 index c99993be2..000000000 --- a/packages/client-search/src/methods/index/clearSynonyms.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { createMappedRequestOptions, RequestOptions } from '@algolia/transporter'; - -import { ClearSynonymsOptions, DeleteResponse, SearchIndex, waitTask } from '../..'; - -export const clearSynonyms = (base: SearchIndex) => { - return ( - requestOptions?: ClearSynonymsOptions & RequestOptions - ): Readonly> => { - const { forwardToReplicas, ...options } = requestOptions || {}; - - const mappedRequestOptions = createMappedRequestOptions(options); - if (forwardToReplicas) { - mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data - } - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/synonyms/clear', base.indexName), - }, - mappedRequestOptions - ), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/index/deleteBy.ts b/packages/client-search/src/methods/index/deleteBy.ts deleted file mode 100644 index f887c8941..000000000 --- a/packages/client-search/src/methods/index/deleteBy.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { DeleteByFiltersOptions, DeleteResponse, SearchIndex } from '../..'; -import { waitTask } from '.'; - -export const deleteBy = (base: SearchIndex) => { - return ( - filters: DeleteByFiltersOptions, - requestOptions?: RequestOptions - ): Readonly> => { - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/deleteByQuery', base.indexName), - data: filters, - }, - requestOptions - ), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/index/deleteIndex.ts b/packages/client-search/src/methods/index/deleteIndex.ts deleted file mode 100644 index 462c0d595..000000000 --- a/packages/client-search/src/methods/index/deleteIndex.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { DeleteResponse, SearchIndex } from '../..'; -import { waitTask } from '.'; - -export const deleteIndex = (base: SearchIndex) => { - return (requestOptions?: RequestOptions): Readonly> => { - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Delete, - path: encode('1/indexes/%s', base.indexName), - }, - requestOptions - ), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/index/deleteObject.ts b/packages/client-search/src/methods/index/deleteObject.ts deleted file mode 100644 index cb9738714..000000000 --- a/packages/client-search/src/methods/index/deleteObject.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { createWaitablePromise, WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { deleteObjects, DeleteResponse, SearchIndex, waitTask } from '../..'; - -export const deleteObject = (base: SearchIndex) => { - return ( - objectID: string, - requestOptions?: RequestOptions - ): Readonly> => { - return createWaitablePromise( - deleteObjects(base)([objectID], requestOptions).then(response => { - return { taskID: response.taskIDs[0] }; - }), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/index/deleteObjects.ts b/packages/client-search/src/methods/index/deleteObjects.ts deleted file mode 100644 index 8606a7259..000000000 --- a/packages/client-search/src/methods/index/deleteObjects.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - BatchActionEnum, - chunkedBatch, - ChunkedBatchResponse, - ChunkOptions, - SearchIndex, -} from '../..'; - -export const deleteObjects = (base: SearchIndex) => { - return ( - objectIDs: readonly string[], - requestOptions?: RequestOptions & ChunkOptions - ): Readonly> => { - const objects = objectIDs.map(objectID => { - return { objectID }; - }); - - return chunkedBatch(base)(objects, BatchActionEnum.DeleteObject, requestOptions); - }; -}; diff --git a/packages/client-search/src/methods/index/deleteRule.ts b/packages/client-search/src/methods/index/deleteRule.ts deleted file mode 100644 index 0c0fcec86..000000000 --- a/packages/client-search/src/methods/index/deleteRule.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { createMappedRequestOptions, RequestOptions } from '@algolia/transporter'; - -import { DeleteResponse, SearchIndex, waitTask } from '../..'; - -export const deleteRule = (base: SearchIndex) => { - return ( - objectID: string, - requestOptions?: RequestOptions - ): Readonly> => { - const { forwardToReplicas, ...options } = requestOptions || {}; - - const mappedRequestOptions = createMappedRequestOptions(options); - if (forwardToReplicas) { - mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data - } - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Delete, - path: encode('1/indexes/%s/rules/%s', base.indexName, objectID), - }, - mappedRequestOptions - ), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/index/deleteSynonym.ts b/packages/client-search/src/methods/index/deleteSynonym.ts deleted file mode 100644 index 1fc9c80de..000000000 --- a/packages/client-search/src/methods/index/deleteSynonym.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { createMappedRequestOptions, RequestOptions } from '@algolia/transporter'; - -import { DeleteResponse, DeleteSynonymOptions, SearchIndex, waitTask } from '../..'; - -export const deleteSynonym = (base: SearchIndex) => { - return ( - objectID: string, - requestOptions?: RequestOptions & DeleteSynonymOptions - ): Readonly> => { - const { forwardToReplicas, ...options } = requestOptions || {}; - - const mappedRequestOptions = createMappedRequestOptions(options); - if (forwardToReplicas) { - mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data - } - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Delete, - path: encode('1/indexes/%s/synonyms/%s', base.indexName, objectID), - }, - mappedRequestOptions - ), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/index/exists.ts b/packages/client-search/src/methods/index/exists.ts deleted file mode 100644 index 1a5f7e8df..000000000 --- a/packages/client-search/src/methods/index/exists.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { RequestOptions } from '@algolia/transporter'; - -import { SearchIndex } from '../..'; -import { getSettings } from '.'; - -export const exists = (base: SearchIndex) => { - return (requestOptions?: RequestOptions): Readonly> => { - return getSettings(base)(requestOptions) - .then(() => true) - .catch(error => { - if (error.status !== 404) { - throw error; - } - - return false; - }); - }; -}; diff --git a/packages/client-search/src/methods/index/findAnswers.ts b/packages/client-search/src/methods/index/findAnswers.ts deleted file mode 100644 index 6041dbe66..000000000 --- a/packages/client-search/src/methods/index/findAnswers.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { FindAnswersOptions, FindAnswersResponse, SearchIndex } from '../..'; - -export const findAnswers = (base: SearchIndex) => { - return ( - query: string, - queryLanguages: readonly string[], - requestOptions?: RequestOptions & FindAnswersOptions - ): Readonly>> => { - return base.transporter.read( - { - method: MethodEnum.Post, - path: encode('1/answers/%s/prediction', base.indexName), - data: { - query, - queryLanguages, - }, - cacheable: true, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/index/findObject.ts b/packages/client-search/src/methods/index/findObject.ts deleted file mode 100644 index 6225f2721..000000000 --- a/packages/client-search/src/methods/index/findObject.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { RequestOptions } from '@algolia/transporter'; - -import { - createObjectNotFoundError, - FindObjectOptions, - FindObjectResponse, - ObjectWithObjectID, - search, - SearchIndex, -} from '../..'; - -export const findObject = (base: SearchIndex) => { - return ( - callback: (object: TObject & ObjectWithObjectID) => boolean, - requestOptions?: FindObjectOptions & RequestOptions - ): Readonly>> => { - const { query, paginate, ...options } = requestOptions || {}; - - // eslint-disable-next-line functional/no-let - let page = 0; - - const forEachPage = (): Readonly>> => { - return search(base)(query || '', { ...options, page }).then(result => { - // eslint-disable-next-line functional/no-loop-statement - for (const [position, hit] of Object.entries(result.hits)) { - // eslint-disable-next-line promise/no-callback-in-promise - if (callback(hit)) { - return { - object: hit, - position: parseInt(position, 10), - page, - }; - } - } - - page++; - - // paginate if option was set and has next page - if (paginate === false || page >= result.nbPages) { - throw createObjectNotFoundError(); - } - - return forEachPage(); - }); - }; - - return forEachPage(); - }; -}; diff --git a/packages/client-search/src/methods/index/getObject.ts b/packages/client-search/src/methods/index/getObject.ts deleted file mode 100644 index d1eff561c..000000000 --- a/packages/client-search/src/methods/index/getObject.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { GetObjectOptions, ObjectWithObjectID, SearchIndex } from '../..'; - -export const getObject = (base: SearchIndex) => { - return ( - objectID: string, - requestOptions?: RequestOptions & GetObjectOptions - ): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: encode('1/indexes/%s/%s', base.indexName, objectID), - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/index/getObjectPosition.ts b/packages/client-search/src/methods/index/getObjectPosition.ts deleted file mode 100644 index 197f22331..000000000 --- a/packages/client-search/src/methods/index/getObjectPosition.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { SearchResponse } from '../..'; - -export const getObjectPosition = () => { - return (searchResponse: SearchResponse, objectID: string): number => { - // eslint-disable-next-line functional/no-loop-statement - for (const [position, hit] of Object.entries(searchResponse.hits)) { - if (hit.objectID === objectID) { - return parseInt(position, 10); - } - } - - return -1; - }; -}; diff --git a/packages/client-search/src/methods/index/getObjects.ts b/packages/client-search/src/methods/index/getObjects.ts deleted file mode 100644 index 27419ccfb..000000000 --- a/packages/client-search/src/methods/index/getObjects.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { GetObjectsOptions, GetObjectsResponse, SearchIndex } from '../..'; - -export const getObjects = (base: SearchIndex) => { - return ( - objectIDs: readonly string[], - requestOptions?: RequestOptions & GetObjectsOptions - ): Readonly>> => { - const { attributesToRetrieve, ...options } = requestOptions || {}; - - const requests = objectIDs.map(objectID => { - return { - indexName: base.indexName, - objectID, - ...(attributesToRetrieve ? { attributesToRetrieve } : {}), - }; - }); - - return base.transporter.read( - { - method: MethodEnum.Post, - path: '1/indexes/*/objects', - data: { - requests, - }, - }, - options - ); - }; -}; diff --git a/packages/client-search/src/methods/index/getRule.ts b/packages/client-search/src/methods/index/getRule.ts deleted file mode 100644 index bbace8e10..000000000 --- a/packages/client-search/src/methods/index/getRule.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { Rule, SearchIndex } from '../..'; - -export const getRule = (base: SearchIndex) => { - return (objectID: string, requestOptions?: RequestOptions): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: encode('1/indexes/%s/rules/%s', base.indexName, objectID), - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/index/getSettings.ts b/packages/client-search/src/methods/index/getSettings.ts deleted file mode 100644 index bc9032e96..000000000 --- a/packages/client-search/src/methods/index/getSettings.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { SearchIndex, Settings } from '../..'; - -export const getSettings = (base: SearchIndex) => { - return (requestOptions?: RequestOptions): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: encode('1/indexes/%s/settings', base.indexName), - data: { - getVersion: 2, - }, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/index/getSynonym.ts b/packages/client-search/src/methods/index/getSynonym.ts deleted file mode 100644 index 519978346..000000000 --- a/packages/client-search/src/methods/index/getSynonym.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { SearchIndex, Synonym } from '../..'; - -export const getSynonym = (base: SearchIndex) => { - return (objectID: string, requestOptions?: RequestOptions): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: encode(`1/indexes/%s/synonyms/%s`, base.indexName, objectID), - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/index/getTask.ts b/packages/client-search/src/methods/index/getTask.ts deleted file mode 100644 index f01a70c81..000000000 --- a/packages/client-search/src/methods/index/getTask.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { SearchIndex, TaskStatusResponse } from '../..'; - -export const getTask = (base: SearchIndex) => { - return ( - taskID: number, - requestOptions?: RequestOptions - ): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Get, - path: encode('1/indexes/%s/task/%s', base.indexName, taskID.toString()), - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/index/index.ts b/packages/client-search/src/methods/index/index.ts deleted file mode 100644 index 6ff412547..000000000 --- a/packages/client-search/src/methods/index/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './batch'; -export * from './browseObjects'; -export * from './browseRules'; -export * from './browseSynonyms'; -export * from './chunkedBatch'; -export * from './clearObjects'; -export * from './clearRules'; -export * from './clearSynonyms'; -export * from './deleteBy'; -export * from './deleteIndex'; -export * from './deleteObject'; -export * from './deleteObjects'; -export * from './deleteRule'; -export * from './deleteSynonym'; -export * from './exists'; -export * from './findAnswers'; -export * from './findObject'; -export * from './getObject'; -export * from './getObjectPosition'; -export * from './getObjects'; -export * from './getRule'; -export * from './getSettings'; -export * from './getSynonym'; -export * from './getTask'; -export * from './partialUpdateObject'; -export * from './partialUpdateObjects'; -export * from './replaceAllObjects'; -export * from './replaceAllRules'; -export * from './replaceAllSynonyms'; -export * from './saveObject'; -export * from './saveObjects'; -export * from './saveRule'; -export * from './saveRules'; -export * from './saveSynonym'; -export * from './saveSynonyms'; -export * from './search'; -export * from './searchForFacetValues'; -export * from './searchRules'; -export * from './searchSynonyms'; -export * from './setSettings'; -export * from './waitTask'; diff --git a/packages/client-search/src/methods/index/partialUpdateObject.ts b/packages/client-search/src/methods/index/partialUpdateObject.ts deleted file mode 100644 index f5d7d05f7..000000000 --- a/packages/client-search/src/methods/index/partialUpdateObject.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { createWaitablePromise, WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - ChunkOptions, - PartialUpdateObjectResponse, - PartialUpdateObjectsOptions, - SearchIndex, -} from '../..'; -import { partialUpdateObjects, waitTask } from '.'; - -export const partialUpdateObject = (base: SearchIndex) => { - return ( - object: Record, - requestOptions?: RequestOptions & ChunkOptions & PartialUpdateObjectsOptions - ): Readonly> => { - return createWaitablePromise( - partialUpdateObjects(base)([object], requestOptions).then(response => { - return { - objectID: response.objectIDs[0], - taskID: response.taskIDs[0], - }; - }), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/index/partialUpdateObjects.ts b/packages/client-search/src/methods/index/partialUpdateObjects.ts deleted file mode 100644 index 420a40fa5..000000000 --- a/packages/client-search/src/methods/index/partialUpdateObjects.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - BatchActionEnum, - chunkedBatch, - ChunkedBatchResponse, - ChunkOptions, - PartialUpdateObjectsOptions, - SearchIndex, -} from '../..'; - -export const partialUpdateObjects = (base: SearchIndex) => { - return ( - objects: ReadonlyArray>, - requestOptions?: RequestOptions & ChunkOptions & PartialUpdateObjectsOptions - ): Readonly> => { - const { createIfNotExists, ...options } = requestOptions || {}; - - const action = createIfNotExists - ? BatchActionEnum.PartialUpdateObject - : BatchActionEnum.PartialUpdateObjectNoCreate; - - return chunkedBatch(base)(objects, action, options); - }; -}; diff --git a/packages/client-search/src/methods/index/replaceAllObjects.ts b/packages/client-search/src/methods/index/replaceAllObjects.ts deleted file mode 100644 index 945cc7db8..000000000 --- a/packages/client-search/src/methods/index/replaceAllObjects.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - ChunkedBatchResponse, - ChunkOptions, - IndexOperationResponse, - ReplaceAllObjectsOptions, - saveObjects, - SaveObjectsOptions, - SearchIndex, - waitTask, -} from '../..'; - -export const replaceAllObjects = (base: SearchIndex) => { - return ( - objects: ReadonlyArray>>, - requestOptions?: ReplaceAllObjectsOptions & ChunkOptions & SaveObjectsOptions & RequestOptions - ): Readonly> => { - const { safe, autoGenerateObjectIDIfNotExist, batchSize, ...options } = requestOptions || {}; - - const operation = ( - from: string, - to: string, - type: string, - operationRequestOptions?: RequestOptions - ): Readonly> => { - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/operation', from), - data: { - operation: type, - destination: to, - }, - }, - operationRequestOptions - ), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; - - const randomSuffix = Math.random() - .toString(36) - .substring(7); - - const temporaryIndexName = `${base.indexName}_tmp_${randomSuffix}`; - - const saveObjectsInTemporary = saveObjects({ - appId: base.appId, - transporter: base.transporter, - indexName: temporaryIndexName, - }); - - // @ts-ignore - // eslint-disable-next-line prefer-const, functional/no-let, functional/prefer-readonly-type - let responses: [ - WaitablePromise, - WaitablePromise, - WaitablePromise - ] = []; - - const copyWaitablePromise = operation(base.indexName, temporaryIndexName, 'copy', { - ...options, - scope: ['settings', 'synonyms', 'rules'], - }); - - // eslint-disable-next-line functional/immutable-data - responses.push(copyWaitablePromise); - - const result: Promise = (safe - ? copyWaitablePromise.wait(options) - : copyWaitablePromise - ) - .then(() => { - const saveObjectsWaitablePromise = saveObjectsInTemporary(objects, { - ...options, - autoGenerateObjectIDIfNotExist, - batchSize, - }); - - // eslint-disable-next-line functional/immutable-data - responses.push(saveObjectsWaitablePromise); - - return safe ? saveObjectsWaitablePromise.wait(options) : saveObjectsWaitablePromise; - }) - .then(() => { - const moveWaitablePromise = operation(temporaryIndexName, base.indexName, 'move', options); - - // eslint-disable-next-line functional/immutable-data - responses.push(moveWaitablePromise); - - return safe ? moveWaitablePromise.wait(options) : moveWaitablePromise; - }) - .then(() => Promise.all(responses)) - .then(([copyResponse, saveObjectsResponse, moveResponse]) => { - return { - objectIDs: saveObjectsResponse.objectIDs, - taskIDs: [copyResponse.taskID, ...saveObjectsResponse.taskIDs, moveResponse.taskID], - }; - }); - - return createWaitablePromise(result, (_, waitRequestOptions) => { - return Promise.all( - responses.map(response => response.wait(waitRequestOptions) as WaitablePromise) - ); - }); - }; -}; diff --git a/packages/client-search/src/methods/index/replaceAllRules.ts b/packages/client-search/src/methods/index/replaceAllRules.ts deleted file mode 100644 index 3b32a343e..000000000 --- a/packages/client-search/src/methods/index/replaceAllRules.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { Rule, SaveRulesOptions, SaveRulesResponse, SearchIndex } from '../..'; -import { saveRules } from '.'; - -export const replaceAllRules = (base: SearchIndex) => { - return ( - rules: readonly Rule[], - requestOptions?: RequestOptions & SaveRulesOptions - ): Readonly> => { - return saveRules(base)(rules, { - ...requestOptions, - clearExistingRules: true, - }); - }; -}; diff --git a/packages/client-search/src/methods/index/replaceAllSynonyms.ts b/packages/client-search/src/methods/index/replaceAllSynonyms.ts deleted file mode 100644 index 56ffaa48e..000000000 --- a/packages/client-search/src/methods/index/replaceAllSynonyms.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { SaveSynonymsResponse, SearchIndex, Synonym } from '../..'; -import { SaveSynonymsOptions } from '../../types'; -import { saveSynonyms } from '.'; - -export const replaceAllSynonyms = (base: SearchIndex) => { - return ( - synonyms: readonly Synonym[], - requestOptions?: RequestOptions & - Pick< - SaveSynonymsOptions, - Exclude - > - ): Readonly> => { - return saveSynonyms(base)(synonyms, { - ...requestOptions, - clearExistingSynonyms: true, - }); - }; -}; diff --git a/packages/client-search/src/methods/index/saveObject.ts b/packages/client-search/src/methods/index/saveObject.ts deleted file mode 100644 index 367fe7091..000000000 --- a/packages/client-search/src/methods/index/saveObject.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { createWaitablePromise, WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - ChunkOptions, - SaveObjectResponse, - saveObjects, - SaveObjectsOptions, - SearchIndex, - waitTask, -} from '../..'; - -export const saveObject = (base: SearchIndex) => { - return ( - object: Readonly>, - requestOptions?: RequestOptions & ChunkOptions & SaveObjectsOptions - ): Readonly> => { - return createWaitablePromise( - saveObjects(base)([object], requestOptions).then(response => { - return { - objectID: response.objectIDs[0], - taskID: response.taskIDs[0], - }; - }), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/index/saveObjects.ts b/packages/client-search/src/methods/index/saveObjects.ts deleted file mode 100644 index 25b301496..000000000 --- a/packages/client-search/src/methods/index/saveObjects.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { createWaitablePromise, WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - BatchActionEnum, - chunkedBatch, - ChunkedBatchResponse, - ChunkOptions, - createMissingObjectIDError, - SaveObjectsOptions, - SearchIndex, -} from '../..'; - -export const saveObjects = (base: SearchIndex) => { - return ( - objects: ReadonlyArray>>, - requestOptions?: RequestOptions & ChunkOptions & SaveObjectsOptions - ): Readonly> => { - const { autoGenerateObjectIDIfNotExist, ...options } = requestOptions || {}; - - const action = autoGenerateObjectIDIfNotExist - ? BatchActionEnum.AddObject - : BatchActionEnum.UpdateObject; - - if (action === BatchActionEnum.UpdateObject) { - // eslint-disable-next-line functional/no-loop-statement - for (const object of objects) { - if (object.objectID === undefined) { - return createWaitablePromise(Promise.reject(createMissingObjectIDError())); - } - } - } - - return chunkedBatch(base)(objects, action, options); - }; -}; diff --git a/packages/client-search/src/methods/index/saveRule.ts b/packages/client-search/src/methods/index/saveRule.ts deleted file mode 100644 index 393416c2e..000000000 --- a/packages/client-search/src/methods/index/saveRule.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { Rule, SaveRuleResponse, saveRules, SaveRulesOptions, SearchIndex } from '../..'; - -export const saveRule = (base: SearchIndex) => { - return ( - rule: Rule, - requestOptions?: RequestOptions & SaveRulesOptions - ): Readonly> => { - return saveRules(base)([rule], requestOptions); - }; -}; diff --git a/packages/client-search/src/methods/index/saveRules.ts b/packages/client-search/src/methods/index/saveRules.ts deleted file mode 100644 index 337dfdd1a..000000000 --- a/packages/client-search/src/methods/index/saveRules.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { createMappedRequestOptions, RequestOptions } from '@algolia/transporter'; - -import { Rule, SaveRulesOptions, SaveRulesResponse, SearchIndex } from '../..'; -import { waitTask } from '.'; - -export const saveRules = (base: SearchIndex) => { - return ( - rules: readonly Rule[], - requestOptions?: RequestOptions & SaveRulesOptions - ): Readonly> => { - const { forwardToReplicas, clearExistingRules, ...options } = requestOptions || {}; - const mappedRequestOptions = createMappedRequestOptions(options); - - if (forwardToReplicas) { - mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data - } - - if (clearExistingRules) { - mappedRequestOptions.queryParameters.clearExistingRules = 1; // eslint-disable-line functional/immutable-data - } - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/rules/batch', base.indexName), - data: rules, - }, - mappedRequestOptions - ), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/index/saveSynonym.ts b/packages/client-search/src/methods/index/saveSynonym.ts deleted file mode 100644 index e2ac5254d..000000000 --- a/packages/client-search/src/methods/index/saveSynonym.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { WaitablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { - SaveSynonymResponse, - saveSynonyms, - SaveSynonymsOptions, - SearchIndex, - Synonym, -} from '../..'; - -export const saveSynonym = (base: SearchIndex) => { - return ( - synonym: Synonym, - requestOptions?: RequestOptions & SaveSynonymsOptions - ): Readonly> => { - return saveSynonyms(base)([synonym], requestOptions); - }; -}; diff --git a/packages/client-search/src/methods/index/saveSynonyms.ts b/packages/client-search/src/methods/index/saveSynonyms.ts deleted file mode 100644 index a144ddf85..000000000 --- a/packages/client-search/src/methods/index/saveSynonyms.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { createMappedRequestOptions, RequestOptions } from '@algolia/transporter'; - -import { SaveSynonymsOptions, SaveSynonymsResponse, SearchIndex, Synonym } from '../..'; -import { waitTask } from '.'; - -export const saveSynonyms = (base: SearchIndex) => { - return ( - synonyms: readonly Synonym[], - requestOptions?: SaveSynonymsOptions & RequestOptions - ): Readonly> => { - const { forwardToReplicas, clearExistingSynonyms, replaceExistingSynonyms, ...options } = - requestOptions || {}; - const mappedRequestOptions = createMappedRequestOptions(options); - - if (forwardToReplicas) { - mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data - } - - if (replaceExistingSynonyms || clearExistingSynonyms) { - mappedRequestOptions.queryParameters.replaceExistingSynonyms = 1; // eslint-disable-line functional/immutable-data - } - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/synonyms/batch', base.indexName), - data: synonyms, - }, - mappedRequestOptions - ), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/index/search.ts b/packages/client-search/src/methods/index/search.ts deleted file mode 100644 index f2b6c07e2..000000000 --- a/packages/client-search/src/methods/index/search.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { SearchIndex, SearchOptions, SearchResponse } from '../..'; - -export const search = (base: SearchIndex) => { - return ( - query: string, - requestOptions?: RequestOptions & SearchOptions - ): Readonly>> => { - return base.transporter.read( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/query', base.indexName), - data: { - query, - }, - cacheable: true, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/index/searchForFacetValues.ts b/packages/client-search/src/methods/index/searchForFacetValues.ts deleted file mode 100644 index f97666f44..000000000 --- a/packages/client-search/src/methods/index/searchForFacetValues.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { SearchForFacetValuesResponse, SearchIndex, SearchOptions } from '../..'; - -export const searchForFacetValues = (base: SearchIndex) => { - return ( - facetName: string, - facetQuery: string, - requestOptions?: RequestOptions & SearchOptions - ): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/facets/%s/query', base.indexName, facetName), - data: { - facetQuery, - }, - cacheable: true, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/index/searchRules.ts b/packages/client-search/src/methods/index/searchRules.ts deleted file mode 100644 index d71904a16..000000000 --- a/packages/client-search/src/methods/index/searchRules.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { Rule, SearchIndex, SearchResponse, SearchRulesOptions } from '../..'; - -export const searchRules = (base: SearchIndex) => { - return ( - query: string, - requestOptions?: RequestOptions & SearchRulesOptions - ): Readonly>> => { - return base.transporter.read( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/rules/search', base.indexName), - data: { - query, - }, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/index/searchSynonyms.ts b/packages/client-search/src/methods/index/searchSynonyms.ts deleted file mode 100644 index be9b6fa83..000000000 --- a/packages/client-search/src/methods/index/searchSynonyms.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { SearchIndex, SearchSynonymsOptions, SearchSynonymsResponse } from '../..'; - -export const searchSynonyms = (base: SearchIndex) => { - return ( - query: string, - requestOptions?: SearchSynonymsOptions & RequestOptions - ): Readonly> => { - return base.transporter.read( - { - method: MethodEnum.Post, - path: encode('1/indexes/%s/synonyms/search', base.indexName), - data: { - query, - }, - }, - requestOptions - ); - }; -}; diff --git a/packages/client-search/src/methods/index/setSettings.ts b/packages/client-search/src/methods/index/setSettings.ts deleted file mode 100644 index 3e5609e98..000000000 --- a/packages/client-search/src/methods/index/setSettings.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createWaitablePromise, encode, WaitablePromise } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; -import { createMappedRequestOptions, RequestOptions } from '@algolia/transporter'; - -import { SearchIndex, SetSettingsOptions, SetSettingsResponse, Settings, waitTask } from '../..'; - -export const setSettings = (base: SearchIndex) => { - return ( - settings: Settings, - requestOptions?: RequestOptions & SetSettingsOptions - ): Readonly> => { - const { forwardToReplicas, ...options } = requestOptions || {}; - const mappedRequestOptions = createMappedRequestOptions(options); - - if (forwardToReplicas) { - mappedRequestOptions.queryParameters.forwardToReplicas = 1; // eslint-disable-line functional/immutable-data - } - - return createWaitablePromise( - base.transporter.write( - { - method: MethodEnum.Put, - path: encode('1/indexes/%s/settings', base.indexName), - data: settings, - }, - mappedRequestOptions - ), - (response, waitRequestOptions) => waitTask(base)(response.taskID, waitRequestOptions) - ); - }; -}; diff --git a/packages/client-search/src/methods/index/waitTask.ts b/packages/client-search/src/methods/index/waitTask.ts deleted file mode 100644 index 6f0f0a199..000000000 --- a/packages/client-search/src/methods/index/waitTask.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { createRetryablePromise } from '@algolia/client-common'; -import { RequestOptions } from '@algolia/transporter'; - -import { SearchIndex } from '../..'; -import { getTask } from '.'; - -export const waitTask = (base: SearchIndex) => { - return (taskID: number, requestOptions?: RequestOptions): Readonly> => { - return createRetryablePromise(retry => { - return getTask(base)(taskID, requestOptions).then(response => { - return response.status !== 'published' ? retry() : undefined; - }); - }); - }; -}; diff --git a/packages/client-search/src/searchClient.ts b/packages/client-search/src/searchClient.ts new file mode 100644 index 000000000..c132f685a --- /dev/null +++ b/packages/client-search/src/searchClient.ts @@ -0,0 +1,2980 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { + CreateClientOptions, + Headers, + Host, + IterableOptions, + QueryParameters, + Request, + RequestOptions, +} from '@algolia/client-common'; +import { + ApiError, + createAuth, + createIterablePromise, + createTransporter, + getAlgoliaAgent, + shuffle, +} from '@algolia/client-common'; + +import type { AddApiKeyResponse } from '../model/addApiKeyResponse'; +import type { ApiKey } from '../model/apiKey'; + +import type { BatchParams } from '../model/batchParams'; +import type { BatchResponse } from '../model/batchResponse'; + +import type { BrowseResponse } from '../model/browseResponse'; +import type { CreatedAtResponse } from '../model/createdAtResponse'; +import type { DeleteApiKeyResponse } from '../model/deleteApiKeyResponse'; + +import type { DeleteSourceResponse } from '../model/deleteSourceResponse'; +import type { DeletedAtResponse } from '../model/deletedAtResponse'; +import type { DictionarySettingsParams } from '../model/dictionarySettingsParams'; + +import type { GetApiKeyResponse } from '../model/getApiKeyResponse'; +import type { GetDictionarySettingsResponse } from '../model/getDictionarySettingsResponse'; +import type { GetLogsResponse } from '../model/getLogsResponse'; +import type { GetObjectsParams } from '../model/getObjectsParams'; +import type { GetObjectsResponse } from '../model/getObjectsResponse'; +import type { GetTaskResponse } from '../model/getTaskResponse'; +import type { GetTopUserIdsResponse } from '../model/getTopUserIdsResponse'; +import type { HasPendingMappingsResponse } from '../model/hasPendingMappingsResponse'; + +import type { Languages } from '../model/languages'; +import type { ListApiKeysResponse } from '../model/listApiKeysResponse'; +import type { ListClustersResponse } from '../model/listClustersResponse'; +import type { ListIndicesResponse } from '../model/listIndicesResponse'; +import type { ListUserIdsResponse } from '../model/listUserIdsResponse'; + +import type { MultipleBatchResponse } from '../model/multipleBatchResponse'; + +import type { RemoveUserIdResponse } from '../model/removeUserIdResponse'; +import type { ReplaceAllObjectsResponse } from '../model/replaceAllObjectsResponse'; +import type { ReplaceSourceResponse } from '../model/replaceSourceResponse'; +import type { Rule } from '../model/rule'; +import type { SaveObjectResponse } from '../model/saveObjectResponse'; +import type { SaveSynonymResponse } from '../model/saveSynonymResponse'; + +import type { SearchDictionaryEntriesResponse } from '../model/searchDictionaryEntriesResponse'; + +import type { SearchForFacetValuesResponse } from '../model/searchForFacetValuesResponse'; +import type { SearchMethodParams } from '../model/searchMethodParams'; + +import type { SearchResponse } from '../model/searchResponse'; +import type { SearchResponses } from '../model/searchResponses'; + +import type { SearchRulesResponse } from '../model/searchRulesResponse'; + +import type { SearchSynonymsResponse } from '../model/searchSynonymsResponse'; +import type { SearchUserIdsParams } from '../model/searchUserIdsParams'; +import type { SearchUserIdsResponse } from '../model/searchUserIdsResponse'; + +import type { SettingsResponse } from '../model/settingsResponse'; +import type { Source } from '../model/source'; +import type { SynonymHit } from '../model/synonymHit'; +import type { UpdateApiKeyResponse } from '../model/updateApiKeyResponse'; +import type { UpdatedAtResponse } from '../model/updatedAtResponse'; +import type { UpdatedAtWithObjectIdResponse } from '../model/updatedAtWithObjectIdResponse'; +import type { UserId } from '../model/userId'; + +import type { + AddOrUpdateObjectProps, + AssignUserIdProps, + BatchAssignUserIdsProps, + BatchDictionaryEntriesProps, + BatchProps, + BrowseOptions, + BrowseProps, + ChunkedBatchOptions, + ClearObjectsProps, + ClearRulesProps, + ClearSynonymsProps, + CustomDeleteProps, + CustomGetProps, + CustomPostProps, + CustomPutProps, + DeleteApiKeyProps, + DeleteByProps, + DeleteIndexProps, + DeleteObjectProps, + DeleteObjectsOptions, + DeleteRuleProps, + DeleteSourceProps, + DeleteSynonymProps, + GetApiKeyProps, + GetAppTaskProps, + GetLogsProps, + GetObjectProps, + GetRuleProps, + GetSettingsProps, + GetSynonymProps, + GetTaskProps, + GetUserIdProps, + HasPendingMappingsProps, + LegacySearchMethodProps, + ListIndicesProps, + ListUserIdsProps, + OperationIndexProps, + PartialUpdateObjectProps, + PartialUpdateObjectsOptions, + RemoveUserIdProps, + ReplaceAllObjectsOptions, + ReplaceSourcesProps, + RestoreApiKeyProps, + SaveObjectProps, + SaveObjectsOptions, + SaveRuleProps, + SaveRulesProps, + SaveSynonymProps, + SaveSynonymsProps, + SearchDictionaryEntriesProps, + SearchForFacetValuesProps, + SearchRulesProps, + SearchSingleIndexProps, + SearchSynonymsProps, + SetSettingsProps, + UpdateApiKeyProps, + WaitForApiKeyOptions, + WaitForAppTaskOptions, + WaitForTaskOptions, +} from '../model/clientMethodProps'; + +import type { BatchRequest } from '../model/batchRequest'; + +export const apiClientVersion = '5.23.3'; + +function getDefaultHosts(appId: string): Host[] { + return ( + [ + { + url: `${appId}-dsn.algolia.net`, + accept: 'read', + protocol: 'https', + }, + { + url: `${appId}.algolia.net`, + accept: 'write', + protocol: 'https', + }, + ] as Host[] + ).concat( + shuffle([ + { + url: `${appId}-1.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + { + url: `${appId}-2.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + { + url: `${appId}-3.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + ]), + ); +} + +export function createSearchClient({ + appId: appIdOption, + apiKey: apiKeyOption, + authMode, + algoliaAgents, + ...options +}: CreateClientOptions) { + const auth = createAuth(appIdOption, apiKeyOption, authMode); + const transporter = createTransporter({ + hosts: getDefaultHosts(appIdOption), + ...options, + algoliaAgent: getAlgoliaAgent({ + algoliaAgents, + client: 'Search', + version: apiClientVersion, + }), + baseHeaders: { + 'content-type': 'text/plain', + ...auth.headers(), + ...options.baseHeaders, + }, + baseQueryParameters: { + ...auth.queryParameters(), + ...options.baseQueryParameters, + }, + }); + + return { + transporter, + + /** + * The `appId` currently in use. + */ + appId: appIdOption, + + /** + * The `apiKey` currently in use. + */ + apiKey: apiKeyOption, + + /** + * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties. + */ + clearCache(): Promise { + return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => undefined); + }, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return transporter.algoliaAgent.value; + }, + + /** + * Adds a `segment` to the `x-algolia-agent` sent with every requests. + * + * @param segment - The algolia agent (user-agent) segment to add. + * @param version - The version of the agent. + */ + addAlgoliaAgent(segment: string, version?: string): void { + transporter.algoliaAgent.add({ segment, version }); + }, + + /** + * Helper method to switch the API key used to authenticate the requests. + * + * @param params - Method params. + * @param params.apiKey - The new API Key to use. + */ + setClientApiKey({ apiKey }: { apiKey: string }): void { + if (!authMode || authMode === 'WithinHeaders') { + transporter.baseHeaders['x-algolia-api-key'] = apiKey; + } else { + transporter.baseQueryParameters['x-algolia-api-key'] = apiKey; + } + }, + + /** + * Helper: Wait for a task to be published (completed) for a given `indexName` and `taskID`. + * + * @summary Helper method that waits for a task to be published (completed). + * @param waitForTaskOptions - The `waitForTaskOptions` object. + * @param waitForTaskOptions.indexName - The `indexName` where the operation was performed. + * @param waitForTaskOptions.taskID - The `taskID` returned in the method response. + * @param waitForTaskOptions.maxRetries - The maximum number of retries. 50 by default. + * @param waitForTaskOptions.timeout - The function to decide how long to wait between retries. + * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `getTask` method and merged with the transporter requestOptions. + */ + waitForTask( + { + indexName, + taskID, + maxRetries = 50, + timeout = (retryCount: number): number => Math.min(retryCount * 200, 5000), + }: WaitForTaskOptions, + requestOptions?: RequestOptions, + ): Promise { + let retryCount = 0; + + return createIterablePromise({ + func: () => this.getTask({ indexName, taskID }, requestOptions), + validate: (response) => response.status === 'published', + aggregator: () => (retryCount += 1), + error: { + validate: () => retryCount >= maxRetries, + message: () => `The maximum number of retries exceeded. (${retryCount}/${maxRetries})`, + }, + timeout: () => timeout(retryCount), + }); + }, + + /** + * Helper: Wait for an application-level task to complete for a given `taskID`. + * + * @summary Helper method that waits for a task to be published (completed). + * @param waitForAppTaskOptions - The `waitForTaskOptions` object. + * @param waitForAppTaskOptions.taskID - The `taskID` returned in the method response. + * @param waitForAppTaskOptions.maxRetries - The maximum number of retries. 50 by default. + * @param waitForAppTaskOptions.timeout - The function to decide how long to wait between retries. + * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `getTask` method and merged with the transporter requestOptions. + */ + waitForAppTask( + { + taskID, + maxRetries = 50, + timeout = (retryCount: number): number => Math.min(retryCount * 200, 5000), + }: WaitForAppTaskOptions, + requestOptions?: RequestOptions, + ): Promise { + let retryCount = 0; + + return createIterablePromise({ + func: () => this.getAppTask({ taskID }, requestOptions), + validate: (response) => response.status === 'published', + aggregator: () => (retryCount += 1), + error: { + validate: () => retryCount >= maxRetries, + message: () => `The maximum number of retries exceeded. (${retryCount}/${maxRetries})`, + }, + timeout: () => timeout(retryCount), + }); + }, + + /** + * Helper: Wait for an API key to be added, updated or deleted based on a given `operation`. + * + * @summary Helper method that waits for an API key task to be processed. + * @param waitForApiKeyOptions - The `waitForApiKeyOptions` object. + * @param waitForApiKeyOptions.operation - The `operation` that was done on a `key`. + * @param waitForApiKeyOptions.key - The `key` that has been added, deleted or updated. + * @param waitForApiKeyOptions.apiKey - Necessary to know if an `update` operation has been processed, compare fields of the response with it. + * @param waitForApiKeyOptions.maxRetries - The maximum number of retries. 50 by default. + * @param waitForApiKeyOptions.timeout - The function to decide how long to wait between retries. + * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `getApikey` method and merged with the transporter requestOptions. + */ + waitForApiKey( + { + operation, + key, + apiKey, + maxRetries = 50, + timeout = (retryCount: number): number => Math.min(retryCount * 200, 5000), + }: WaitForApiKeyOptions, + requestOptions?: RequestOptions, + ): Promise { + let retryCount = 0; + const baseIteratorOptions: IterableOptions = { + aggregator: () => (retryCount += 1), + error: { + validate: () => retryCount >= maxRetries, + message: () => `The maximum number of retries exceeded. (${retryCount}/${maxRetries})`, + }, + timeout: () => timeout(retryCount), + }; + + if (operation === 'update') { + if (!apiKey) { + throw new Error('`apiKey` is required when waiting for an `update` operation.'); + } + + return createIterablePromise({ + ...baseIteratorOptions, + func: () => this.getApiKey({ key }, requestOptions), + validate: (response) => { + for (const field of Object.keys(apiKey)) { + const value = apiKey[field as keyof ApiKey]; + const resValue = response[field as keyof ApiKey]; + if (Array.isArray(value) && Array.isArray(resValue)) { + if (value.length !== resValue.length || value.some((v, index) => v !== resValue[index])) { + return false; + } + } else if (value !== resValue) { + return false; + } + } + return true; + }, + }); + } + + return createIterablePromise({ + ...baseIteratorOptions, + func: () => + this.getApiKey({ key }, requestOptions).catch((error: ApiError) => { + if (error.status === 404) { + return undefined; + } + + throw error; + }), + validate: (response) => (operation === 'add' ? response !== undefined : response === undefined), + }); + }, + + /** + * Helper: Iterate on the `browse` method of the client to allow aggregating objects of an index. + * + * @summary Helper method that iterates on the `browse` method. + * @param browseObjects - The `browseObjects` object. + * @param browseObjects.indexName - The index in which to perform the request. + * @param browseObjects.browseParams - The `browse` parameters. + * @param browseObjects.validate - The validator function. It receive the resolved return of the API call. By default, stops when there is no `cursor` in the response. + * @param browseObjects.aggregator - The function that runs right after the API call has been resolved, allows you to do anything with the response before `validate`. + * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `browse` method and merged with the transporter requestOptions. + */ + browseObjects( + { indexName, browseParams, ...browseObjectsOptions }: BrowseOptions> & BrowseProps, + requestOptions?: RequestOptions, + ): Promise> { + return createIterablePromise>({ + func: (previousResponse) => { + return this.browse( + { + indexName, + browseParams: { + cursor: previousResponse ? previousResponse.cursor : undefined, + hitsPerPage: 1000, + ...browseParams, + }, + }, + requestOptions, + ); + }, + validate: (response) => response.cursor === undefined, + ...browseObjectsOptions, + }); + }, + + /** + * Helper: Iterate on the `searchRules` method of the client to allow aggregating rules of an index. + * + * @summary Helper method that iterates on the `searchRules` method. + * @param browseRules - The `browseRules` object. + * @param browseRules.indexName - The index in which to perform the request. + * @param browseRules.searchRulesParams - The `searchRules` method parameters. + * @param browseRules.validate - The validator function. It receive the resolved return of the API call. By default, stops when there is less hits returned than the number of maximum hits (1000). + * @param browseRules.aggregator - The function that runs right after the API call has been resolved, allows you to do anything with the response before `validate`. + * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `searchRules` method and merged with the transporter requestOptions. + */ + browseRules( + { indexName, searchRulesParams, ...browseRulesOptions }: BrowseOptions & SearchRulesProps, + requestOptions?: RequestOptions, + ): Promise { + const params = { + hitsPerPage: 1000, + ...searchRulesParams, + }; + + return createIterablePromise({ + func: (previousResponse) => { + return this.searchRules( + { + indexName, + searchRulesParams: { + ...params, + page: previousResponse ? previousResponse.page + 1 : params.page || 0, + }, + }, + requestOptions, + ); + }, + validate: (response) => response.hits.length < params.hitsPerPage, + ...browseRulesOptions, + }); + }, + + /** + * Helper: Iterate on the `searchSynonyms` method of the client to allow aggregating rules of an index. + * + * @summary Helper method that iterates on the `searchSynonyms` method. + * @param browseSynonyms - The `browseSynonyms` object. + * @param browseSynonyms.indexName - The index in which to perform the request. + * @param browseSynonyms.validate - The validator function. It receive the resolved return of the API call. By default, stops when there is less hits returned than the number of maximum hits (1000). + * @param browseSynonyms.aggregator - The function that runs right after the API call has been resolved, allows you to do anything with the response before `validate`. + * @param browseSynonyms.searchSynonymsParams - The `searchSynonyms` method parameters. + * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `searchSynonyms` method and merged with the transporter requestOptions. + */ + browseSynonyms( + { + indexName, + searchSynonymsParams, + ...browseSynonymsOptions + }: BrowseOptions & SearchSynonymsProps, + requestOptions?: RequestOptions, + ): Promise { + const params = { + page: 0, + ...searchSynonymsParams, + hitsPerPage: 1000, + }; + + return createIterablePromise({ + func: (_) => { + const resp = this.searchSynonyms( + { + indexName, + searchSynonymsParams: { + ...params, + page: params.page, + }, + }, + requestOptions, + ); + params.page += 1; + return resp; + }, + validate: (response) => response.hits.length < params.hitsPerPage, + ...browseSynonymsOptions, + }); + }, + + /** + * Helper: Chunks the given `objects` list in subset of 1000 elements max in order to make it fit in `batch` requests. + * + * @summary Helper: Chunks the given `objects` list in subset of 1000 elements max in order to make it fit in `batch` requests. + * @param chunkedBatch - The `chunkedBatch` object. + * @param chunkedBatch.indexName - The `indexName` to replace `objects` in. + * @param chunkedBatch.objects - The array of `objects` to store in the given Algolia `indexName`. + * @param chunkedBatch.action - The `batch` `action` to perform on the given array of `objects`, defaults to `addObject`. + * @param chunkedBatch.waitForTasks - Whether or not we should wait until every `batch` tasks has been processed, this operation may slow the total execution time of this method but is more reliable. + * @param chunkedBatch.batchSize - The size of the chunk of `objects`. The number of `batch` calls will be equal to `length(objects) / batchSize`. Defaults to 1000. + * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `getTask` method and merged with the transporter requestOptions. + */ + async chunkedBatch( + { indexName, objects, action = 'addObject', waitForTasks, batchSize = 1000 }: ChunkedBatchOptions, + requestOptions?: RequestOptions, + ): Promise> { + let requests: Array = []; + const responses: Array = []; + + const objectEntries = objects.entries(); + for (const [i, obj] of objectEntries) { + requests.push({ action, body: obj }); + if (requests.length === batchSize || i === objects.length - 1) { + responses.push(await this.batch({ indexName, batchWriteParams: { requests } }, requestOptions)); + requests = []; + } + } + + if (waitForTasks) { + for (const resp of responses) { + await this.waitForTask({ indexName, taskID: resp.taskID }); + } + } + + return responses; + }, + + /** + * Helper: Saves the given array of objects in the given index. The `chunkedBatch` helper is used under the hood, which creates a `batch` requests with at most 1000 objects in it. + * + * @summary Helper: Saves the given array of objects in the given index. The `chunkedBatch` helper is used under the hood, which creates a `batch` requests with at most 1000 objects in it. + * @param saveObjects - The `saveObjects` object. + * @param saveObjects.indexName - The `indexName` to save `objects` in. + * @param saveObjects.objects - The array of `objects` to store in the given Algolia `indexName`. + * @param chunkedBatch.batchSize - The size of the chunk of `objects`. The number of `batch` calls will be equal to `length(objects) / batchSize`. Defaults to 1000. + * @param saveObjects.waitForTasks - Whether or not we should wait until every `batch` tasks has been processed, this operation may slow the total execution time of this method but is more reliable. + * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `batch` method and merged with the transporter requestOptions. + */ + async saveObjects( + { indexName, objects, waitForTasks, batchSize }: SaveObjectsOptions, + requestOptions?: RequestOptions, + ): Promise { + return await this.chunkedBatch( + { indexName, objects, action: 'addObject', waitForTasks, batchSize }, + requestOptions, + ); + }, + + /** + * Helper: Deletes every records for the given objectIDs. The `chunkedBatch` helper is used under the hood, which creates a `batch` requests with at most 1000 objectIDs in it. + * + * @summary Helper: Deletes every records for the given objectIDs. The `chunkedBatch` helper is used under the hood, which creates a `batch` requests with at most 1000 objectIDs in it. + * @param deleteObjects - The `deleteObjects` object. + * @param deleteObjects.indexName - The `indexName` to delete `objectIDs` from. + * @param deleteObjects.objectIDs - The objectIDs to delete. + * @param chunkedBatch.batchSize - The size of the chunk of `objects`. The number of `batch` calls will be equal to `length(objects) / batchSize`. Defaults to 1000. + * @param deleteObjects.waitForTasks - Whether or not we should wait until every `batch` tasks has been processed, this operation may slow the total execution time of this method but is more reliable. + * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `batch` method and merged with the transporter requestOptions. + */ + async deleteObjects( + { indexName, objectIDs, waitForTasks, batchSize }: DeleteObjectsOptions, + requestOptions?: RequestOptions, + ): Promise { + return await this.chunkedBatch( + { + indexName, + objects: objectIDs.map((objectID) => ({ objectID })), + action: 'deleteObject', + waitForTasks, + batchSize, + }, + requestOptions, + ); + }, + + /** + * Helper: Replaces object content of all the given objects according to their respective `objectID` field. The `chunkedBatch` helper is used under the hood, which creates a `batch` requests with at most 1000 objects in it. + * + * @summary Helper: Replaces object content of all the given objects according to their respective `objectID` field. The `chunkedBatch` helper is used under the hood, which creates a `batch` requests with at most 1000 objects in it. + * @param partialUpdateObjects - The `partialUpdateObjects` object. + * @param partialUpdateObjects.indexName - The `indexName` to update `objects` in. + * @param partialUpdateObjects.objects - The array of `objects` to update in the given Algolia `indexName`. + * @param partialUpdateObjects.createIfNotExists - To be provided if non-existing objects are passed, otherwise, the call will fail.. + * @param chunkedBatch.batchSize - The size of the chunk of `objects`. The number of `batch` calls will be equal to `length(objects) / batchSize`. Defaults to 1000. + * @param partialUpdateObjects.waitForTasks - Whether or not we should wait until every `batch` tasks has been processed, this operation may slow the total execution time of this method but is more reliable. + * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `getTask` method and merged with the transporter requestOptions. + */ + async partialUpdateObjects( + { indexName, objects, createIfNotExists, waitForTasks, batchSize }: PartialUpdateObjectsOptions, + requestOptions?: RequestOptions, + ): Promise { + return await this.chunkedBatch( + { + indexName, + objects, + action: createIfNotExists ? 'partialUpdateObject' : 'partialUpdateObjectNoCreate', + batchSize, + waitForTasks, + }, + requestOptions, + ); + }, + + /** + * Helper: Replaces all objects (records) in the given `index_name` with the given `objects`. A temporary index is created during this process in order to backup your data. + * See https://api-clients-automation.netlify.app/docs/add-new-api-client#5-helpers for implementation details. + * + * @summary Helper: Replaces all objects (records) in the given `index_name` with the given `objects`. A temporary index is created during this process in order to backup your data. + * @param replaceAllObjects - The `replaceAllObjects` object. + * @param replaceAllObjects.indexName - The `indexName` to replace `objects` in. + * @param replaceAllObjects.objects - The array of `objects` to store in the given Algolia `indexName`. + * @param replaceAllObjects.batchSize - The size of the chunk of `objects`. The number of `batch` calls will be equal to `objects.length / batchSize`. Defaults to 1000. + * @param replaceAllObjects.scopes - The `scopes` to keep from the index. Defaults to ['settings', 'rules', 'synonyms']. + * @param requestOptions - The requestOptions to send along with the query, they will be forwarded to the `batch`, `operationIndex` and `getTask` method and merged with the transporter requestOptions. + */ + async replaceAllObjects( + { indexName, objects, batchSize, scopes }: ReplaceAllObjectsOptions, + requestOptions?: RequestOptions, + ): Promise { + const randomSuffix = Math.floor(Math.random() * 1000000) + 100000; + const tmpIndexName = `${indexName}_tmp_${randomSuffix}`; + + if (scopes === undefined) { + scopes = ['settings', 'rules', 'synonyms']; + } + + try { + let copyOperationResponse = await this.operationIndex( + { + indexName, + operationIndexParams: { + operation: 'copy', + destination: tmpIndexName, + scope: scopes, + }, + }, + requestOptions, + ); + + const batchResponses = await this.chunkedBatch( + { indexName: tmpIndexName, objects, waitForTasks: true, batchSize }, + requestOptions, + ); + + await this.waitForTask({ + indexName: tmpIndexName, + taskID: copyOperationResponse.taskID, + }); + + copyOperationResponse = await this.operationIndex( + { + indexName, + operationIndexParams: { + operation: 'copy', + destination: tmpIndexName, + scope: scopes, + }, + }, + requestOptions, + ); + await this.waitForTask({ + indexName: tmpIndexName, + taskID: copyOperationResponse.taskID, + }); + + const moveOperationResponse = await this.operationIndex( + { + indexName: tmpIndexName, + operationIndexParams: { operation: 'move', destination: indexName }, + }, + requestOptions, + ); + await this.waitForTask({ + indexName: tmpIndexName, + taskID: moveOperationResponse.taskID, + }); + + return { copyOperationResponse, batchResponses, moveOperationResponse }; + } catch (error) { + await this.deleteIndex({ indexName: tmpIndexName }); + + throw error; + } + }, + + async indexExists({ indexName }: GetSettingsProps): Promise { + try { + await this.getSettings({ indexName }); + } catch (error) { + if (error instanceof ApiError && error.status === 404) { + return false; + } + throw error; + } + + return true; + }, + + /** + * Helper: calls the `search` method but with certainty that we will only request Algolia records (hits) and not facets. + * Disclaimer: We don't assert that the parameters you pass to this method only contains `hits` requests to prevent impacting search performances, this helper is purely for typing purposes. + * + * @summary Search multiple indices for `hits`. + * @param searchMethodParams - Query requests and strategies. Results will be received in the same order as the queries. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchForHits( + searchMethodParams: LegacySearchMethodProps | SearchMethodParams, + requestOptions?: RequestOptions, + ): Promise<{ results: Array> }> { + return this.search(searchMethodParams, requestOptions) as Promise<{ results: Array> }>; + }, + + /** + * Helper: calls the `search` method but with certainty that we will only request Algolia facets and not records (hits). + * Disclaimer: We don't assert that the parameters you pass to this method only contains `facets` requests to prevent impacting search performances, this helper is purely for typing purposes. + * + * @summary Search multiple indices for `facets`. + * @param searchMethodParams - Query requests and strategies. Results will be received in the same order as the queries. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchForFacets( + searchMethodParams: LegacySearchMethodProps | SearchMethodParams, + requestOptions?: RequestOptions, + ): Promise<{ results: Array }> { + return this.search(searchMethodParams, requestOptions) as Promise<{ + results: Array; + }>; + }, + /** + * Creates a new API key with specific permissions and restrictions. + * + * Required API Key ACLs: + * - admin + * @param apiKey - The apiKey object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + addApiKey(apiKey: ApiKey, requestOptions?: RequestOptions): Promise { + if (!apiKey) { + throw new Error('Parameter `apiKey` is required when calling `addApiKey`.'); + } + + if (!apiKey.acl) { + throw new Error('Parameter `apiKey.acl` is required when calling `addApiKey`.'); + } + + const requestPath = '/1/keys'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: apiKey, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * If a record with the specified object ID exists, the existing record is replaced. Otherwise, a new record is added to the index. If you want to use auto-generated object IDs, use the [`saveObject` operation](#tag/Records/operation/saveObject). To update _some_ attributes of an existing record, use the [`partial` operation](#tag/Records/operation/partialUpdateObject) instead. To add, update, or replace multiple records, use the [`batch` operation](#tag/Records/operation/batch). + * + * Required API Key ACLs: + * - addObject + * @param addOrUpdateObject - The addOrUpdateObject object. + * @param addOrUpdateObject.indexName - Name of the index on which to perform the operation. + * @param addOrUpdateObject.objectID - Unique record identifier. + * @param addOrUpdateObject.body - The record. A schemaless object with attributes that are useful in the context of search and discovery. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + addOrUpdateObject( + { indexName, objectID, body }: AddOrUpdateObjectProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `addOrUpdateObject`.'); + } + + if (!objectID) { + throw new Error('Parameter `objectID` is required when calling `addOrUpdateObject`.'); + } + + if (!body) { + throw new Error('Parameter `body` is required when calling `addOrUpdateObject`.'); + } + + const requestPath = '/1/indexes/{indexName}/{objectID}' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{objectID}', encodeURIComponent(objectID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: body, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Adds a source to the list of allowed sources. + * + * Required API Key ACLs: + * - admin + * @param source - Source to add. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + appendSource(source: Source, requestOptions?: RequestOptions): Promise { + if (!source) { + throw new Error('Parameter `source` is required when calling `appendSource`.'); + } + + if (!source.source) { + throw new Error('Parameter `source.source` is required when calling `appendSource`.'); + } + + const requestPath = '/1/security/sources/append'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: source, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Assigns or moves a user ID to a cluster. The time it takes to move a user is proportional to the amount of data linked to the user ID. + * + * Required API Key ACLs: + * - admin + * + * @deprecated + * @param assignUserId - The assignUserId object. + * @param assignUserId.xAlgoliaUserID - Unique identifier of the user who makes the search request. + * @param assignUserId.assignUserIdParams - The assignUserIdParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + assignUserId( + { xAlgoliaUserID, assignUserIdParams }: AssignUserIdProps, + requestOptions?: RequestOptions, + ): Promise { + if (!xAlgoliaUserID) { + throw new Error('Parameter `xAlgoliaUserID` is required when calling `assignUserId`.'); + } + + if (!assignUserIdParams) { + throw new Error('Parameter `assignUserIdParams` is required when calling `assignUserId`.'); + } + + if (!assignUserIdParams.cluster) { + throw new Error('Parameter `assignUserIdParams.cluster` is required when calling `assignUserId`.'); + } + + const requestPath = '/1/clusters/mapping'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (xAlgoliaUserID !== undefined) { + headers['X-Algolia-User-ID'] = xAlgoliaUserID.toString(); + } + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: assignUserIdParams, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Adds, updates, or deletes records in one index with a single API request. Batching index updates reduces latency and increases data integrity. - Actions are applied in the order they\'re specified. - Actions are equivalent to the individual API requests of the same name. This operation is subject to [indexing rate limits](https://support.algolia.com/hc/en-us/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). + * @param batch - The batch object. + * @param batch.indexName - Name of the index on which to perform the operation. + * @param batch.batchWriteParams - The batchWriteParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + batch({ indexName, batchWriteParams }: BatchProps, requestOptions?: RequestOptions): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `batch`.'); + } + + if (!batchWriteParams) { + throw new Error('Parameter `batchWriteParams` is required when calling `batch`.'); + } + + if (!batchWriteParams.requests) { + throw new Error('Parameter `batchWriteParams.requests` is required when calling `batch`.'); + } + + const requestPath = '/1/indexes/{indexName}/batch'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: batchWriteParams, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Assigns multiple user IDs to a cluster. **You can\'t move users with this operation**. + * + * Required API Key ACLs: + * - admin + * + * @deprecated + * @param batchAssignUserIds - The batchAssignUserIds object. + * @param batchAssignUserIds.xAlgoliaUserID - Unique identifier of the user who makes the search request. + * @param batchAssignUserIds.batchAssignUserIdsParams - The batchAssignUserIdsParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + batchAssignUserIds( + { xAlgoliaUserID, batchAssignUserIdsParams }: BatchAssignUserIdsProps, + requestOptions?: RequestOptions, + ): Promise { + if (!xAlgoliaUserID) { + throw new Error('Parameter `xAlgoliaUserID` is required when calling `batchAssignUserIds`.'); + } + + if (!batchAssignUserIdsParams) { + throw new Error('Parameter `batchAssignUserIdsParams` is required when calling `batchAssignUserIds`.'); + } + + if (!batchAssignUserIdsParams.cluster) { + throw new Error('Parameter `batchAssignUserIdsParams.cluster` is required when calling `batchAssignUserIds`.'); + } + if (!batchAssignUserIdsParams.users) { + throw new Error('Parameter `batchAssignUserIdsParams.users` is required when calling `batchAssignUserIds`.'); + } + + const requestPath = '/1/clusters/mapping/batch'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (xAlgoliaUserID !== undefined) { + headers['X-Algolia-User-ID'] = xAlgoliaUserID.toString(); + } + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: batchAssignUserIdsParams, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Adds or deletes multiple entries from your plurals, segmentation, or stop word dictionaries. + * + * Required API Key ACLs: + * - editSettings + * @param batchDictionaryEntries - The batchDictionaryEntries object. + * @param batchDictionaryEntries.dictionaryName - Dictionary type in which to search. + * @param batchDictionaryEntries.batchDictionaryEntriesParams - The batchDictionaryEntriesParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + batchDictionaryEntries( + { dictionaryName, batchDictionaryEntriesParams }: BatchDictionaryEntriesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!dictionaryName) { + throw new Error('Parameter `dictionaryName` is required when calling `batchDictionaryEntries`.'); + } + + if (!batchDictionaryEntriesParams) { + throw new Error('Parameter `batchDictionaryEntriesParams` is required when calling `batchDictionaryEntries`.'); + } + + if (!batchDictionaryEntriesParams.requests) { + throw new Error( + 'Parameter `batchDictionaryEntriesParams.requests` is required when calling `batchDictionaryEntries`.', + ); + } + + const requestPath = '/1/dictionaries/{dictionaryName}/batch'.replace( + '{dictionaryName}', + encodeURIComponent(dictionaryName), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: batchDictionaryEntriesParams, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves records from an index, up to 1,000 per request. While searching retrieves _hits_ (records augmented with attributes for highlighting and ranking details), browsing _just_ returns matching records. This can be useful if you want to export your indices. - The Analytics API doesn\'t collect data when using `browse`. - Records are ranked by attributes and custom ranking. - There\'s no ranking for: typo-tolerance, number of matched words, proximity, geo distance. Browse requests automatically apply these settings: - `advancedSyntax`: `false` - `attributesToHighlight`: `[]` - `attributesToSnippet`: `[]` - `distinct`: `false` - `enablePersonalization`: `false` - `enableRules`: `false` - `facets`: `[]` - `getRankingInfo`: `false` - `ignorePlurals`: `false` - `optionalFilters`: `[]` - `typoTolerance`: `true` or `false` (`min` and `strict` evaluate to `true`) If you send these parameters with your browse requests, they\'ll be ignored. + * + * Required API Key ACLs: + * - browse + * @param browse - The browse object. + * @param browse.indexName - Name of the index on which to perform the operation. + * @param browse.browseParams - The browseParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + browse({ indexName, browseParams }: BrowseProps, requestOptions?: RequestOptions): Promise> { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `browse`.'); + } + + const requestPath = '/1/indexes/{indexName}/browse'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: browseParams ? browseParams : {}, + useReadTransporter: true, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes only the records from an index while keeping settings, synonyms, and rules. This operation is resource-intensive and subject to [indexing rate limits](https://support.algolia.com/hc/en-us/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). + * + * Required API Key ACLs: + * - deleteIndex + * @param clearObjects - The clearObjects object. + * @param clearObjects.indexName - Name of the index on which to perform the operation. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + clearObjects({ indexName }: ClearObjectsProps, requestOptions?: RequestOptions): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `clearObjects`.'); + } + + const requestPath = '/1/indexes/{indexName}/clear'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes all rules from the index. + * + * Required API Key ACLs: + * - editSettings + * @param clearRules - The clearRules object. + * @param clearRules.indexName - Name of the index on which to perform the operation. + * @param clearRules.forwardToReplicas - Whether changes are applied to replica indices. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + clearRules( + { indexName, forwardToReplicas }: ClearRulesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `clearRules`.'); + } + + const requestPath = '/1/indexes/{indexName}/rules/clear'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (forwardToReplicas !== undefined) { + queryParameters['forwardToReplicas'] = forwardToReplicas.toString(); + } + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes all synonyms from the index. + * + * Required API Key ACLs: + * - editSettings + * @param clearSynonyms - The clearSynonyms object. + * @param clearSynonyms.indexName - Name of the index on which to perform the operation. + * @param clearSynonyms.forwardToReplicas - Whether changes are applied to replica indices. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + clearSynonyms( + { indexName, forwardToReplicas }: ClearSynonymsProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `clearSynonyms`.'); + } + + const requestPath = '/1/indexes/{indexName}/synonyms/clear'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (forwardToReplicas !== undefined) { + queryParameters['forwardToReplicas'] = forwardToReplicas.toString(); + } + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customDelete - The customDelete object. + * @param customDelete.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customDelete.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customDelete( + { path, parameters }: CustomDeleteProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customDelete`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customGet - The customGet object. + * @param customGet.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customGet.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customGet({ path, parameters }: CustomGetProps, requestOptions?: RequestOptions): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customGet`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPost - The customPost object. + * @param customPost.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPost.parameters - Query parameters to apply to the current query. + * @param customPost.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPost( + { path, parameters, body }: CustomPostProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPost`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPut - The customPut object. + * @param customPut.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPut.parameters - Query parameters to apply to the current query. + * @param customPut.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPut( + { path, parameters, body }: CustomPutProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPut`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes the API key. + * + * Required API Key ACLs: + * - admin + * @param deleteApiKey - The deleteApiKey object. + * @param deleteApiKey.key - API key. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteApiKey({ key }: DeleteApiKeyProps, requestOptions?: RequestOptions): Promise { + if (!key) { + throw new Error('Parameter `key` is required when calling `deleteApiKey`.'); + } + + const requestPath = '/1/keys/{key}'.replace('{key}', encodeURIComponent(key)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This operation doesn\'t accept empty filters. This operation is resource-intensive. You should only use it if you can\'t get the object IDs of the records you want to delete. It\'s more efficient to get a list of object IDs with the [`browse` operation](#tag/Search/operation/browse), and then delete the records using the [`batch` operation](#tag/Records/operation/batch). This operation is subject to [indexing rate limits](https://support.algolia.com/hc/en-us/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). + * + * Required API Key ACLs: + * - deleteIndex + * @param deleteBy - The deleteBy object. + * @param deleteBy.indexName - Name of the index on which to perform the operation. + * @param deleteBy.deleteByParams - The deleteByParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteBy( + { indexName, deleteByParams }: DeleteByProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `deleteBy`.'); + } + + if (!deleteByParams) { + throw new Error('Parameter `deleteByParams` is required when calling `deleteBy`.'); + } + + const requestPath = '/1/indexes/{indexName}/deleteByQuery'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: deleteByParams, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes an index and all its settings. - Deleting an index doesn\'t delete its analytics data. - If you try to delete a non-existing index, the operation is ignored without warning. - If the index you want to delete has replica indices, the replicas become independent indices. - If the index you want to delete is a replica index, you must first unlink it from its primary index before you can delete it. For more information, see [Delete replica indices](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/how-to/deleting-replicas/). + * + * Required API Key ACLs: + * - deleteIndex + * @param deleteIndex - The deleteIndex object. + * @param deleteIndex.indexName - Name of the index on which to perform the operation. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteIndex({ indexName }: DeleteIndexProps, requestOptions?: RequestOptions): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `deleteIndex`.'); + } + + const requestPath = '/1/indexes/{indexName}'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes a record by its object ID. To delete more than one record, use the [`batch` operation](#tag/Records/operation/batch). To delete records matching a query, use the [`deleteByQuery` operation](#tag/Records/operation/deleteBy). + * + * Required API Key ACLs: + * - deleteObject + * @param deleteObject - The deleteObject object. + * @param deleteObject.indexName - Name of the index on which to perform the operation. + * @param deleteObject.objectID - Unique record identifier. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteObject( + { indexName, objectID }: DeleteObjectProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `deleteObject`.'); + } + + if (!objectID) { + throw new Error('Parameter `objectID` is required when calling `deleteObject`.'); + } + + const requestPath = '/1/indexes/{indexName}/{objectID}' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{objectID}', encodeURIComponent(objectID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes a rule by its ID. To find the object ID for rules, use the [`search` operation](#tag/Rules/operation/searchRules). + * + * Required API Key ACLs: + * - editSettings + * @param deleteRule - The deleteRule object. + * @param deleteRule.indexName - Name of the index on which to perform the operation. + * @param deleteRule.objectID - Unique identifier of a rule object. + * @param deleteRule.forwardToReplicas - Whether changes are applied to replica indices. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteRule( + { indexName, objectID, forwardToReplicas }: DeleteRuleProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `deleteRule`.'); + } + + if (!objectID) { + throw new Error('Parameter `objectID` is required when calling `deleteRule`.'); + } + + const requestPath = '/1/indexes/{indexName}/rules/{objectID}' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{objectID}', encodeURIComponent(objectID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (forwardToReplicas !== undefined) { + queryParameters['forwardToReplicas'] = forwardToReplicas.toString(); + } + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes a source from the list of allowed sources. + * + * Required API Key ACLs: + * - admin + * @param deleteSource - The deleteSource object. + * @param deleteSource.source - IP address range of the source. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteSource({ source }: DeleteSourceProps, requestOptions?: RequestOptions): Promise { + if (!source) { + throw new Error('Parameter `source` is required when calling `deleteSource`.'); + } + + const requestPath = '/1/security/sources/{source}'.replace('{source}', encodeURIComponent(source)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes a synonym by its ID. To find the object IDs of your synonyms, use the [`search` operation](#tag/Synonyms/operation/searchSynonyms). + * + * Required API Key ACLs: + * - editSettings + * @param deleteSynonym - The deleteSynonym object. + * @param deleteSynonym.indexName - Name of the index on which to perform the operation. + * @param deleteSynonym.objectID - Unique identifier of a synonym object. + * @param deleteSynonym.forwardToReplicas - Whether changes are applied to replica indices. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteSynonym( + { indexName, objectID, forwardToReplicas }: DeleteSynonymProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `deleteSynonym`.'); + } + + if (!objectID) { + throw new Error('Parameter `objectID` is required when calling `deleteSynonym`.'); + } + + const requestPath = '/1/indexes/{indexName}/synonyms/{objectID}' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{objectID}', encodeURIComponent(objectID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (forwardToReplicas !== undefined) { + queryParameters['forwardToReplicas'] = forwardToReplicas.toString(); + } + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Gets the permissions and restrictions of an API key. When authenticating with the admin API key, you can request information for any of your application\'s keys. When authenticating with other API keys, you can only retrieve information for that key, with the description replaced by ``. + * @param getApiKey - The getApiKey object. + * @param getApiKey.key - API key. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getApiKey({ key }: GetApiKeyProps, requestOptions?: RequestOptions): Promise { + if (!key) { + throw new Error('Parameter `key` is required when calling `getApiKey`.'); + } + + const requestPath = '/1/keys/{key}'.replace('{key}', encodeURIComponent(key)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Checks the status of a given application task. + * + * Required API Key ACLs: + * - editSettings + * @param getAppTask - The getAppTask object. + * @param getAppTask.taskID - Unique task identifier. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getAppTask({ taskID }: GetAppTaskProps, requestOptions?: RequestOptions): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `getAppTask`.'); + } + + const requestPath = '/1/task/{taskID}'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Lists supported languages with their supported dictionary types and number of custom entries. + * + * Required API Key ACLs: + * - settings + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getDictionaryLanguages(requestOptions?: RequestOptions): Promise<{ [key: string]: Languages }> { + const requestPath = '/1/dictionaries/*/languages'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the languages for which standard dictionary entries are turned off. + * + * Required API Key ACLs: + * - settings + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getDictionarySettings(requestOptions?: RequestOptions): Promise { + const requestPath = '/1/dictionaries/*/settings'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * The request must be authenticated by an API key with the [`logs` ACL](https://www.algolia.com/doc/guides/security/api-keys/#access-control-list-acl). - Logs are held for the last seven days. - Up to 1,000 API requests per server are logged. - This request counts towards your [operations quota](https://support.algolia.com/hc/en-us/articles/4406981829777-How-does-Algolia-count-records-and-operations-) but doesn\'t appear in the logs itself. + * + * Required API Key ACLs: + * - logs + * @param getLogs - The getLogs object. + * @param getLogs.offset - First log entry to retrieve. The most recent entries are listed first. + * @param getLogs.length - Maximum number of entries to retrieve. + * @param getLogs.indexName - Index for which to retrieve log entries. By default, log entries are retrieved for all indices. + * @param getLogs.type - Type of log entries to retrieve. By default, all log entries are retrieved. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getLogs( + { offset, length, indexName, type }: GetLogsProps = {}, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/1/logs'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (offset !== undefined) { + queryParameters['offset'] = offset.toString(); + } + + if (length !== undefined) { + queryParameters['length'] = length.toString(); + } + + if (indexName !== undefined) { + queryParameters['indexName'] = indexName.toString(); + } + + if (type !== undefined) { + queryParameters['type'] = type.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves one record by its object ID. To retrieve more than one record, use the [`objects` operation](#tag/Records/operation/getObjects). + * + * Required API Key ACLs: + * - search + * @param getObject - The getObject object. + * @param getObject.indexName - Name of the index on which to perform the operation. + * @param getObject.objectID - Unique record identifier. + * @param getObject.attributesToRetrieve - Attributes to include with the records in the response. This is useful to reduce the size of the API response. By default, all retrievable attributes are returned. `objectID` is always retrieved. Attributes included in `unretrievableAttributes` won\'t be retrieved unless the request is authenticated with the admin API key. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getObject( + { indexName, objectID, attributesToRetrieve }: GetObjectProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `getObject`.'); + } + + if (!objectID) { + throw new Error('Parameter `objectID` is required when calling `getObject`.'); + } + + const requestPath = '/1/indexes/{indexName}/{objectID}' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{objectID}', encodeURIComponent(objectID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (attributesToRetrieve !== undefined) { + queryParameters['attributesToRetrieve'] = attributesToRetrieve.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves one or more records, potentially from different indices. Records are returned in the same order as the requests. + * + * Required API Key ACLs: + * - search + * @param getObjectsParams - Request object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getObjects(getObjectsParams: GetObjectsParams, requestOptions?: RequestOptions): Promise> { + if (!getObjectsParams) { + throw new Error('Parameter `getObjectsParams` is required when calling `getObjects`.'); + } + + if (!getObjectsParams.requests) { + throw new Error('Parameter `getObjectsParams.requests` is required when calling `getObjects`.'); + } + + const requestPath = '/1/indexes/*/objects'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: getObjectsParams, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a rule by its ID. To find the object ID of rules, use the [`search` operation](#tag/Rules/operation/searchRules). + * + * Required API Key ACLs: + * - settings + * @param getRule - The getRule object. + * @param getRule.indexName - Name of the index on which to perform the operation. + * @param getRule.objectID - Unique identifier of a rule object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getRule({ indexName, objectID }: GetRuleProps, requestOptions?: RequestOptions): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `getRule`.'); + } + + if (!objectID) { + throw new Error('Parameter `objectID` is required when calling `getRule`.'); + } + + const requestPath = '/1/indexes/{indexName}/rules/{objectID}' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{objectID}', encodeURIComponent(objectID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves an object with non-null index settings. + * + * Required API Key ACLs: + * - search + * @param getSettings - The getSettings object. + * @param getSettings.indexName - Name of the index on which to perform the operation. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getSettings({ indexName }: GetSettingsProps, requestOptions?: RequestOptions): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `getSettings`.'); + } + + const requestPath = '/1/indexes/{indexName}/settings'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves all allowed IP addresses with access to your application. + * + * Required API Key ACLs: + * - admin + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getSources(requestOptions?: RequestOptions): Promise> { + const requestPath = '/1/security/sources'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a synonym by its ID. To find the object IDs for your synonyms, use the [`search` operation](#tag/Synonyms/operation/searchSynonyms). + * + * Required API Key ACLs: + * - settings + * @param getSynonym - The getSynonym object. + * @param getSynonym.indexName - Name of the index on which to perform the operation. + * @param getSynonym.objectID - Unique identifier of a synonym object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getSynonym({ indexName, objectID }: GetSynonymProps, requestOptions?: RequestOptions): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `getSynonym`.'); + } + + if (!objectID) { + throw new Error('Parameter `objectID` is required when calling `getSynonym`.'); + } + + const requestPath = '/1/indexes/{indexName}/synonyms/{objectID}' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{objectID}', encodeURIComponent(objectID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Checks the status of a given task. Indexing tasks are asynchronous. When you add, update, or delete records or indices, a task is created on a queue and completed depending on the load on the server. The indexing tasks\' responses include a task ID that you can use to check the status. + * + * Required API Key ACLs: + * - addObject + * @param getTask - The getTask object. + * @param getTask.indexName - Name of the index on which to perform the operation. + * @param getTask.taskID - Unique task identifier. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getTask({ indexName, taskID }: GetTaskProps, requestOptions?: RequestOptions): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `getTask`.'); + } + + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `getTask`.'); + } + + const requestPath = '/1/indexes/{indexName}/task/{taskID}' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Get the IDs of the 10 users with the highest number of records per cluster. Since it can take a few seconds to get the data from the different clusters, the response isn\'t real-time. + * + * Required API Key ACLs: + * - admin + * + * @deprecated + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getTopUserIds(requestOptions?: RequestOptions): Promise { + const requestPath = '/1/clusters/mapping/top'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Returns the user ID data stored in the mapping. Since it can take a few seconds to get the data from the different clusters, the response isn\'t real-time. + * + * Required API Key ACLs: + * - admin + * + * @deprecated + * @param getUserId - The getUserId object. + * @param getUserId.userID - Unique identifier of the user who makes the search request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getUserId({ userID }: GetUserIdProps, requestOptions?: RequestOptions): Promise { + if (!userID) { + throw new Error('Parameter `userID` is required when calling `getUserId`.'); + } + + const requestPath = '/1/clusters/mapping/{userID}'.replace('{userID}', encodeURIComponent(userID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * To determine when the time-consuming process of creating a large batch of users or migrating users from one cluster to another is complete, this operation retrieves the status of the process. + * + * Required API Key ACLs: + * - admin + * + * @deprecated + * @param hasPendingMappings - The hasPendingMappings object. + * @param hasPendingMappings.getClusters - Whether to include the cluster\'s pending mapping state in the response. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + hasPendingMappings( + { getClusters }: HasPendingMappingsProps = {}, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/1/clusters/mapping/pending'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (getClusters !== undefined) { + queryParameters['getClusters'] = getClusters.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Lists all API keys associated with your Algolia application, including their permissions and restrictions. + * + * Required API Key ACLs: + * - admin + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listApiKeys(requestOptions?: RequestOptions): Promise { + const requestPath = '/1/keys'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Lists the available clusters in a multi-cluster setup. + * + * Required API Key ACLs: + * - admin + * + * @deprecated + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listClusters(requestOptions?: RequestOptions): Promise { + const requestPath = '/1/clusters'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Lists all indices in the current Algolia application. The request follows any index restrictions of the API key you use to make the request. + * + * Required API Key ACLs: + * - listIndexes + * @param listIndices - The listIndices object. + * @param listIndices.page - Requested page of the API response. If `null`, the API response is not paginated. + * @param listIndices.hitsPerPage - Number of hits per page. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listIndices( + { page, hitsPerPage }: ListIndicesProps = {}, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/1/indexes'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (page !== undefined) { + queryParameters['page'] = page.toString(); + } + + if (hitsPerPage !== undefined) { + queryParameters['hitsPerPage'] = hitsPerPage.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Lists the userIDs assigned to a multi-cluster application. Since it can take a few seconds to get the data from the different clusters, the response isn\'t real-time. + * + * Required API Key ACLs: + * - admin + * + * @deprecated + * @param listUserIds - The listUserIds object. + * @param listUserIds.page - Requested page of the API response. If `null`, the API response is not paginated. + * @param listUserIds.hitsPerPage - Number of hits per page. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listUserIds( + { page, hitsPerPage }: ListUserIdsProps = {}, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/1/clusters/mapping'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (page !== undefined) { + queryParameters['page'] = page.toString(); + } + + if (hitsPerPage !== undefined) { + queryParameters['hitsPerPage'] = hitsPerPage.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Adds, updates, or deletes records in multiple indices with a single API request. - Actions are applied in the order they are specified. - Actions are equivalent to the individual API requests of the same name. This operation is subject to [indexing rate limits](https://support.algolia.com/hc/en-us/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). + * @param batchParams - The batchParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + multipleBatch(batchParams: BatchParams, requestOptions?: RequestOptions): Promise { + if (!batchParams) { + throw new Error('Parameter `batchParams` is required when calling `multipleBatch`.'); + } + + if (!batchParams.requests) { + throw new Error('Parameter `batchParams.requests` is required when calling `multipleBatch`.'); + } + + const requestPath = '/1/indexes/*/batch'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: batchParams, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Copies or moves (renames) an index within the same Algolia application. - Existing destination indices are overwritten, except for their analytics data. - If the destination index doesn\'t exist yet, it\'ll be created. - This operation is resource-intensive. **Copy** - Copying a source index that doesn\'t exist creates a new index with 0 records and default settings. - The API keys of the source index are merged with the existing keys in the destination index. - You can\'t copy the `enableReRanking`, `mode`, and `replicas` settings. - You can\'t copy to a destination index that already has replicas. - Be aware of the [size limits](https://www.algolia.com/doc/guides/scaling/algolia-service-limits/#application-record-and-index-limits). - Related guide: [Copy indices](https://www.algolia.com/doc/guides/sending-and-managing-data/manage-indices-and-apps/manage-indices/how-to/copy-indices/) **Move** - Moving a source index that doesn\'t exist is ignored without returning an error. - When moving an index, the analytics data keeps its original name, and a new set of analytics data is started for the new name. To access the original analytics in the dashboard, create an index with the original name. - If the destination index has replicas, moving will overwrite the existing index and copy the data to the replica indices. - Related guide: [Move indices](https://www.algolia.com/doc/guides/sending-and-managing-data/manage-indices-and-apps/manage-indices/how-to/move-indices/). This operation is subject to [indexing rate limits](https://support.algolia.com/hc/en-us/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). + * + * Required API Key ACLs: + * - addObject + * @param operationIndex - The operationIndex object. + * @param operationIndex.indexName - Name of the index on which to perform the operation. + * @param operationIndex.operationIndexParams - The operationIndexParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + operationIndex( + { indexName, operationIndexParams }: OperationIndexProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `operationIndex`.'); + } + + if (!operationIndexParams) { + throw new Error('Parameter `operationIndexParams` is required when calling `operationIndex`.'); + } + + if (!operationIndexParams.operation) { + throw new Error('Parameter `operationIndexParams.operation` is required when calling `operationIndex`.'); + } + if (!operationIndexParams.destination) { + throw new Error('Parameter `operationIndexParams.destination` is required when calling `operationIndex`.'); + } + + const requestPath = '/1/indexes/{indexName}/operation'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: operationIndexParams, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Adds new attributes to a record, or updates existing ones. - If a record with the specified object ID doesn\'t exist, a new record is added to the index **if** `createIfNotExists` is true. - If the index doesn\'t exist yet, this method creates a new index. - You can use any first-level attribute but not nested attributes. If you specify a nested attribute, this operation replaces its first-level ancestor. To update an attribute without pushing the entire record, you can use these built-in operations. These operations can be helpful if you don\'t have access to your initial data. - Increment: increment a numeric attribute - Decrement: decrement a numeric attribute - Add: append a number or string element to an array attribute - Remove: remove all matching number or string elements from an array attribute made of numbers or strings - AddUnique: add a number or string element to an array attribute made of numbers or strings only if it\'s not already present - IncrementFrom: increment a numeric integer attribute only if the provided value matches the current value, and otherwise ignore the whole object update. For example, if you pass an IncrementFrom value of 2 for the version attribute, but the current value of the attribute is 1, the engine ignores the update. If the object doesn\'t exist, the engine only creates it if you pass an IncrementFrom value of 0. - IncrementSet: increment a numeric integer attribute only if the provided value is greater than the current value, and otherwise ignore the whole object update. For example, if you pass an IncrementSet value of 2 for the version attribute, and the current value of the attribute is 1, the engine updates the object. If the object doesn\'t exist yet, the engine only creates it if you pass an IncrementSet value greater than 0. You can specify an operation by providing an object with the attribute to update as the key and its value being an object with the following properties: - _operation: the operation to apply on the attribute - value: the right-hand side argument to the operation, for example, increment or decrement step, value to add or remove. When updating multiple attributes or using multiple operations targeting the same record, you should use a single partial update for faster processing. This operation is subject to [indexing rate limits](https://support.algolia.com/hc/en-us/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). + * + * Required API Key ACLs: + * - addObject + * @param partialUpdateObject - The partialUpdateObject object. + * @param partialUpdateObject.indexName - Name of the index on which to perform the operation. + * @param partialUpdateObject.objectID - Unique record identifier. + * @param partialUpdateObject.attributesToUpdate - Attributes with their values. + * @param partialUpdateObject.createIfNotExists - Whether to create a new record if it doesn\'t exist. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + partialUpdateObject( + { indexName, objectID, attributesToUpdate, createIfNotExists }: PartialUpdateObjectProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `partialUpdateObject`.'); + } + + if (!objectID) { + throw new Error('Parameter `objectID` is required when calling `partialUpdateObject`.'); + } + + if (!attributesToUpdate) { + throw new Error('Parameter `attributesToUpdate` is required when calling `partialUpdateObject`.'); + } + + const requestPath = '/1/indexes/{indexName}/{objectID}/partial' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{objectID}', encodeURIComponent(objectID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (createIfNotExists !== undefined) { + queryParameters['createIfNotExists'] = createIfNotExists.toString(); + } + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: attributesToUpdate, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes a user ID and its associated data from the clusters. + * + * Required API Key ACLs: + * - admin + * + * @deprecated + * @param removeUserId - The removeUserId object. + * @param removeUserId.userID - Unique identifier of the user who makes the search request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + removeUserId({ userID }: RemoveUserIdProps, requestOptions?: RequestOptions): Promise { + if (!userID) { + throw new Error('Parameter `userID` is required when calling `removeUserId`.'); + } + + const requestPath = '/1/clusters/mapping/{userID}'.replace('{userID}', encodeURIComponent(userID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Replaces the list of allowed sources. + * + * Required API Key ACLs: + * - admin + * @param replaceSources - The replaceSources object. + * @param replaceSources.source - Allowed sources. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + replaceSources({ source }: ReplaceSourcesProps, requestOptions?: RequestOptions): Promise { + if (!source) { + throw new Error('Parameter `source` is required when calling `replaceSources`.'); + } + + const requestPath = '/1/security/sources'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: source, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Restores a deleted API key. Restoring resets the `validity` attribute to `0`. Algolia stores up to 1,000 API keys per application. If you create more, the oldest API keys are deleted and can\'t be restored. + * + * Required API Key ACLs: + * - admin + * @param restoreApiKey - The restoreApiKey object. + * @param restoreApiKey.key - API key. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + restoreApiKey({ key }: RestoreApiKeyProps, requestOptions?: RequestOptions): Promise { + if (!key) { + throw new Error('Parameter `key` is required when calling `restoreApiKey`.'); + } + + const requestPath = '/1/keys/{key}/restore'.replace('{key}', encodeURIComponent(key)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Adds a record to an index or replaces it. - If the record doesn\'t have an object ID, a new record with an auto-generated object ID is added to your index. - If a record with the specified object ID exists, the existing record is replaced. - If a record with the specified object ID doesn\'t exist, a new record is added to your index. - If you add a record to an index that doesn\'t exist yet, a new index is created. To update _some_ attributes of a record, use the [`partial` operation](#tag/Records/operation/partialUpdateObject). To add, update, or replace multiple records, use the [`batch` operation](#tag/Records/operation/batch). This operation is subject to [indexing rate limits](https://support.algolia.com/hc/en-us/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). + * + * Required API Key ACLs: + * - addObject + * @param saveObject - The saveObject object. + * @param saveObject.indexName - Name of the index on which to perform the operation. + * @param saveObject.body - The record. A schemaless object with attributes that are useful in the context of search and discovery. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + saveObject({ indexName, body }: SaveObjectProps, requestOptions?: RequestOptions): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `saveObject`.'); + } + + if (!body) { + throw new Error('Parameter `body` is required when calling `saveObject`.'); + } + + const requestPath = '/1/indexes/{indexName}'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: body, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * If a rule with the specified object ID doesn\'t exist, it\'s created. Otherwise, the existing rule is replaced. To create or update more than one rule, use the [`batch` operation](#tag/Rules/operation/saveRules). + * + * Required API Key ACLs: + * - editSettings + * @param saveRule - The saveRule object. + * @param saveRule.indexName - Name of the index on which to perform the operation. + * @param saveRule.objectID - Unique identifier of a rule object. + * @param saveRule.rule - The rule object. + * @param saveRule.forwardToReplicas - Whether changes are applied to replica indices. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + saveRule( + { indexName, objectID, rule, forwardToReplicas }: SaveRuleProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `saveRule`.'); + } + + if (!objectID) { + throw new Error('Parameter `objectID` is required when calling `saveRule`.'); + } + + if (!rule) { + throw new Error('Parameter `rule` is required when calling `saveRule`.'); + } + + if (!rule.objectID) { + throw new Error('Parameter `rule.objectID` is required when calling `saveRule`.'); + } + if (!rule.consequence) { + throw new Error('Parameter `rule.consequence` is required when calling `saveRule`.'); + } + + const requestPath = '/1/indexes/{indexName}/rules/{objectID}' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{objectID}', encodeURIComponent(objectID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (forwardToReplicas !== undefined) { + queryParameters['forwardToReplicas'] = forwardToReplicas.toString(); + } + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: rule, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Create or update multiple rules. If a rule with the specified object ID doesn\'t exist, Algolia creates a new one. Otherwise, existing rules are replaced. This operation is subject to [indexing rate limits](https://support.algolia.com/hc/en-us/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). + * + * Required API Key ACLs: + * - editSettings + * @param saveRules - The saveRules object. + * @param saveRules.indexName - Name of the index on which to perform the operation. + * @param saveRules.rules - The rules object. + * @param saveRules.forwardToReplicas - Whether changes are applied to replica indices. + * @param saveRules.clearExistingRules - Whether existing rules should be deleted before adding this batch. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + saveRules( + { indexName, rules, forwardToReplicas, clearExistingRules }: SaveRulesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `saveRules`.'); + } + + if (!rules) { + throw new Error('Parameter `rules` is required when calling `saveRules`.'); + } + + const requestPath = '/1/indexes/{indexName}/rules/batch'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (forwardToReplicas !== undefined) { + queryParameters['forwardToReplicas'] = forwardToReplicas.toString(); + } + + if (clearExistingRules !== undefined) { + queryParameters['clearExistingRules'] = clearExistingRules.toString(); + } + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: rules, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * If a synonym with the specified object ID doesn\'t exist, Algolia adds a new one. Otherwise, the existing synonym is replaced. To add multiple synonyms in a single API request, use the [`batch` operation](#tag/Synonyms/operation/saveSynonyms). + * + * Required API Key ACLs: + * - editSettings + * @param saveSynonym - The saveSynonym object. + * @param saveSynonym.indexName - Name of the index on which to perform the operation. + * @param saveSynonym.objectID - Unique identifier of a synonym object. + * @param saveSynonym.synonymHit - The synonymHit object. + * @param saveSynonym.forwardToReplicas - Whether changes are applied to replica indices. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + saveSynonym( + { indexName, objectID, synonymHit, forwardToReplicas }: SaveSynonymProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `saveSynonym`.'); + } + + if (!objectID) { + throw new Error('Parameter `objectID` is required when calling `saveSynonym`.'); + } + + if (!synonymHit) { + throw new Error('Parameter `synonymHit` is required when calling `saveSynonym`.'); + } + + if (!synonymHit.objectID) { + throw new Error('Parameter `synonymHit.objectID` is required when calling `saveSynonym`.'); + } + if (!synonymHit.type) { + throw new Error('Parameter `synonymHit.type` is required when calling `saveSynonym`.'); + } + + const requestPath = '/1/indexes/{indexName}/synonyms/{objectID}' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{objectID}', encodeURIComponent(objectID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (forwardToReplicas !== undefined) { + queryParameters['forwardToReplicas'] = forwardToReplicas.toString(); + } + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: synonymHit, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * If a synonym with the `objectID` doesn\'t exist, Algolia adds a new one. Otherwise, existing synonyms are replaced. This operation is subject to [indexing rate limits](https://support.algolia.com/hc/en-us/articles/4406975251089-Is-there-a-rate-limit-for-indexing-on-Algolia). + * + * Required API Key ACLs: + * - editSettings + * @param saveSynonyms - The saveSynonyms object. + * @param saveSynonyms.indexName - Name of the index on which to perform the operation. + * @param saveSynonyms.synonymHit - The synonymHit object. + * @param saveSynonyms.forwardToReplicas - Whether changes are applied to replica indices. + * @param saveSynonyms.replaceExistingSynonyms - Whether to replace all synonyms in the index with the ones sent with this request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + saveSynonyms( + { indexName, synonymHit, forwardToReplicas, replaceExistingSynonyms }: SaveSynonymsProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `saveSynonyms`.'); + } + + if (!synonymHit) { + throw new Error('Parameter `synonymHit` is required when calling `saveSynonyms`.'); + } + + const requestPath = '/1/indexes/{indexName}/synonyms/batch'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (forwardToReplicas !== undefined) { + queryParameters['forwardToReplicas'] = forwardToReplicas.toString(); + } + + if (replaceExistingSynonyms !== undefined) { + queryParameters['replaceExistingSynonyms'] = replaceExistingSynonyms.toString(); + } + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: synonymHit, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Sends multiple search requests to one or more indices. This can be useful in these cases: - Different indices for different purposes, such as, one index for products, another one for marketing content. - Multiple searches to the same index—for example, with different filters. + * + * Required API Key ACLs: + * - search + * @param searchMethodParams - Muli-search request body. Results are returned in the same order as the requests. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + search( + searchMethodParams: SearchMethodParams | LegacySearchMethodProps, + requestOptions?: RequestOptions, + ): Promise> { + if (searchMethodParams && Array.isArray(searchMethodParams)) { + const newSignatureRequest: SearchMethodParams = { + requests: searchMethodParams.map(({ params, ...legacyRequest }) => { + if (legacyRequest.type === 'facet') { + return { + ...legacyRequest, + ...params, + type: 'facet', + }; + } + + return { + ...legacyRequest, + ...params, + facet: undefined, + maxFacetHits: undefined, + facetQuery: undefined, + }; + }), + }; + + searchMethodParams = newSignatureRequest; + } + + if (!searchMethodParams) { + throw new Error('Parameter `searchMethodParams` is required when calling `search`.'); + } + + if (!searchMethodParams.requests) { + throw new Error('Parameter `searchMethodParams.requests` is required when calling `search`.'); + } + + const requestPath = '/1/indexes/*/queries'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: searchMethodParams, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for standard and custom dictionary entries. + * + * Required API Key ACLs: + * - settings + * @param searchDictionaryEntries - The searchDictionaryEntries object. + * @param searchDictionaryEntries.dictionaryName - Dictionary type in which to search. + * @param searchDictionaryEntries.searchDictionaryEntriesParams - The searchDictionaryEntriesParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchDictionaryEntries( + { dictionaryName, searchDictionaryEntriesParams }: SearchDictionaryEntriesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!dictionaryName) { + throw new Error('Parameter `dictionaryName` is required when calling `searchDictionaryEntries`.'); + } + + if (!searchDictionaryEntriesParams) { + throw new Error( + 'Parameter `searchDictionaryEntriesParams` is required when calling `searchDictionaryEntries`.', + ); + } + + if (!searchDictionaryEntriesParams.query) { + throw new Error( + 'Parameter `searchDictionaryEntriesParams.query` is required when calling `searchDictionaryEntries`.', + ); + } + + const requestPath = '/1/dictionaries/{dictionaryName}/search'.replace( + '{dictionaryName}', + encodeURIComponent(dictionaryName), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: searchDictionaryEntriesParams, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for values of a specified facet attribute. - By default, facet values are sorted by decreasing count. You can adjust this with the `sortFacetValueBy` parameter. - Searching for facet values doesn\'t work if you have **more than 65 searchable facets and searchable attributes combined**. + * + * Required API Key ACLs: + * - search + * @param searchForFacetValues - The searchForFacetValues object. + * @param searchForFacetValues.indexName - Name of the index on which to perform the operation. + * @param searchForFacetValues.facetName - Facet attribute in which to search for values. This attribute must be included in the `attributesForFaceting` index setting with the `searchable()` modifier. + * @param searchForFacetValues.searchForFacetValuesRequest - The searchForFacetValuesRequest object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchForFacetValues( + { indexName, facetName, searchForFacetValuesRequest }: SearchForFacetValuesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `searchForFacetValues`.'); + } + + if (!facetName) { + throw new Error('Parameter `facetName` is required when calling `searchForFacetValues`.'); + } + + const requestPath = '/1/indexes/{indexName}/facets/{facetName}/query' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{facetName}', encodeURIComponent(facetName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: searchForFacetValuesRequest ? searchForFacetValuesRequest : {}, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for rules in your index. + * + * Required API Key ACLs: + * - settings + * @param searchRules - The searchRules object. + * @param searchRules.indexName - Name of the index on which to perform the operation. + * @param searchRules.searchRulesParams - The searchRulesParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchRules( + { indexName, searchRulesParams }: SearchRulesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `searchRules`.'); + } + + const requestPath = '/1/indexes/{indexName}/rules/search'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: searchRulesParams ? searchRulesParams : {}, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches a single index and returns matching search results (_hits_). This method lets you retrieve up to 1,000 hits. If you need more, use the [`browse` operation](#tag/Search/operation/browse) or increase the `paginatedLimitedTo` index setting. + * + * Required API Key ACLs: + * - search + * @param searchSingleIndex - The searchSingleIndex object. + * @param searchSingleIndex.indexName - Name of the index on which to perform the operation. + * @param searchSingleIndex.searchParams - The searchParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchSingleIndex( + { indexName, searchParams }: SearchSingleIndexProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `searchSingleIndex`.'); + } + + const requestPath = '/1/indexes/{indexName}/query'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: searchParams ? searchParams : {}, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for synonyms in your index. + * + * Required API Key ACLs: + * - settings + * @param searchSynonyms - The searchSynonyms object. + * @param searchSynonyms.indexName - Name of the index on which to perform the operation. + * @param searchSynonyms.searchSynonymsParams - Body of the `searchSynonyms` operation. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchSynonyms( + { indexName, searchSynonymsParams }: SearchSynonymsProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `searchSynonyms`.'); + } + + const requestPath = '/1/indexes/{indexName}/synonyms/search'.replace( + '{indexName}', + encodeURIComponent(indexName), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: searchSynonymsParams ? searchSynonymsParams : {}, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Since it can take a few seconds to get the data from the different clusters, the response isn\'t real-time. To ensure rapid updates, the user IDs index isn\'t built at the same time as the mapping. Instead, it\'s built every 12 hours, at the same time as the update of user ID usage. For example, if you add or move a user ID, the search will show an old value until the next time the mapping is rebuilt (every 12 hours). + * + * Required API Key ACLs: + * - admin + * + * @deprecated + * @param searchUserIdsParams - The searchUserIdsParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchUserIds( + searchUserIdsParams: SearchUserIdsParams, + requestOptions?: RequestOptions, + ): Promise { + if (!searchUserIdsParams) { + throw new Error('Parameter `searchUserIdsParams` is required when calling `searchUserIds`.'); + } + + if (!searchUserIdsParams.query) { + throw new Error('Parameter `searchUserIdsParams.query` is required when calling `searchUserIds`.'); + } + + const requestPath = '/1/clusters/mapping/search'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: searchUserIdsParams, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Turns standard stop word dictionary entries on or off for a given language. + * + * Required API Key ACLs: + * - editSettings + * @param dictionarySettingsParams - The dictionarySettingsParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + setDictionarySettings( + dictionarySettingsParams: DictionarySettingsParams, + requestOptions?: RequestOptions, + ): Promise { + if (!dictionarySettingsParams) { + throw new Error('Parameter `dictionarySettingsParams` is required when calling `setDictionarySettings`.'); + } + + if (!dictionarySettingsParams.disableStandardEntries) { + throw new Error( + 'Parameter `dictionarySettingsParams.disableStandardEntries` is required when calling `setDictionarySettings`.', + ); + } + + const requestPath = '/1/dictionaries/*/settings'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: dictionarySettingsParams, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Update the specified index settings. Index settings that you don\'t specify are left unchanged. Specify `null` to reset a setting to its default value. For best performance, update the index settings before you add new records to your index. + * + * Required API Key ACLs: + * - editSettings + * @param setSettings - The setSettings object. + * @param setSettings.indexName - Name of the index on which to perform the operation. + * @param setSettings.indexSettings - The indexSettings object. + * @param setSettings.forwardToReplicas - Whether changes are applied to replica indices. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + setSettings( + { indexName, indexSettings, forwardToReplicas }: SetSettingsProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `setSettings`.'); + } + + if (!indexSettings) { + throw new Error('Parameter `indexSettings` is required when calling `setSettings`.'); + } + + const requestPath = '/1/indexes/{indexName}/settings'.replace('{indexName}', encodeURIComponent(indexName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (forwardToReplicas !== undefined) { + queryParameters['forwardToReplicas'] = forwardToReplicas.toString(); + } + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: indexSettings, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Replaces the permissions of an existing API key. Any unspecified attribute resets that attribute to its default value. + * + * Required API Key ACLs: + * - admin + * @param updateApiKey - The updateApiKey object. + * @param updateApiKey.key - API key. + * @param updateApiKey.apiKey - The apiKey object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + updateApiKey({ key, apiKey }: UpdateApiKeyProps, requestOptions?: RequestOptions): Promise { + if (!key) { + throw new Error('Parameter `key` is required when calling `updateApiKey`.'); + } + + if (!apiKey) { + throw new Error('Parameter `apiKey` is required when calling `updateApiKey`.'); + } + + if (!apiKey.acl) { + throw new Error('Parameter `apiKey.acl` is required when calling `updateApiKey`.'); + } + + const requestPath = '/1/keys/{key}'.replace('{key}', encodeURIComponent(key)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: apiKey, + }; + + return transporter.request(request, requestOptions); + }, + }; +} diff --git a/packages/client-search/src/types/AddApiKeyOptions.ts b/packages/client-search/src/types/AddApiKeyOptions.ts deleted file mode 100644 index ef43ad095..000000000 --- a/packages/client-search/src/types/AddApiKeyOptions.ts +++ /dev/null @@ -1,37 +0,0 @@ -export type AddApiKeyOptions = { - /** - * A Unix timestamp used to define the expiration date of the API key. - */ - readonly validity?: number; - - /** - * Specify the maximum number of hits this API key can retrieve in one call. - * This parameter can be used to protect you from attempts at retrieving your entire index contents by massively querying the index. - */ - readonly maxHitsPerQuery?: number; - - /** - * Specify the maximum number of API calls allowed from an IP address per hour. Each time an API call is performed with this key, a check is performed. - */ - readonly maxQueriesPerIPPerHour?: number; - - /** - * Specify the list of targeted indices. You can target all indices starting with a prefix or ending with a suffix using the ‘*’ character. - */ - readonly indexes?: readonly string[]; - - /** - * Specify the list of referers. You can target all referers starting with a prefix, ending with a suffix using the ‘*’ character. - */ - readonly referers?: readonly string[]; - - /** - * Specify the list of query parameters. You can force the query parameters for a query using the url string format. - */ - readonly queryParameters?: string; - - /** - * Specify a description of the API key. Used for informative purposes only. It has impact on the functionality of the API key. - */ - readonly description?: string; -}; diff --git a/packages/client-search/src/types/AddApiKeyResponse.ts b/packages/client-search/src/types/AddApiKeyResponse.ts deleted file mode 100644 index 4d92c0ea7..000000000 --- a/packages/client-search/src/types/AddApiKeyResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type AddApiKeyResponse = { - /** - * The returned api key. - */ - key: string; - - /** - * Date of creation of the api key. - */ - createdAt: string; -}; diff --git a/packages/client-search/src/types/ApiKeyType.ts b/packages/client-search/src/types/ApiKeyType.ts deleted file mode 100644 index 093e12e6c..000000000 --- a/packages/client-search/src/types/ApiKeyType.ts +++ /dev/null @@ -1,32 +0,0 @@ -export const ApiKeyACLEnum: Readonly> = { - AddObject: 'addObject', - Analytics: 'analytics', - Browser: 'browse', - DeleteIndex: 'deleteIndex', - DeleteObject: 'deleteObject', - EditSettings: 'editSettings', - ListIndexes: 'listIndexes', - Logs: 'logs', - Personalization: 'personalization', - Recommendation: 'recommendation', - Search: 'search', - SeeUnretrievableAttributes: 'seeUnretrievableAttributes', - Settings: 'settings', - Usage: 'usage', -}; - -export type ApiKeyACLType = - | 'addObject' - | 'analytics' - | 'browse' - | 'deleteIndex' - | 'deleteObject' - | 'editSettings' - | 'listIndexes' - | 'logs' - | 'personalization' - | 'recommendation' - | 'search' - | 'seeUnretrievableAttributes' - | 'settings' - | 'usage'; diff --git a/packages/client-search/src/types/AssignUserIDResponse.ts b/packages/client-search/src/types/AssignUserIDResponse.ts deleted file mode 100644 index 0e2813c35..000000000 --- a/packages/client-search/src/types/AssignUserIDResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type AssignUserIDResponse = { - /** - * Date of creation of the userId. - */ - createdAt: string; -}; diff --git a/packages/client-search/src/types/AssignUserIDsResponse.ts b/packages/client-search/src/types/AssignUserIDsResponse.ts deleted file mode 100644 index 8207d520f..000000000 --- a/packages/client-search/src/types/AssignUserIDsResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type AssignUserIDsResponse = { - /** - * Date of creation of the userId - */ - createdAt: string; -}; diff --git a/packages/client-search/src/types/BatchActionType.ts b/packages/client-search/src/types/BatchActionType.ts deleted file mode 100644 index e6c8e2bed..000000000 --- a/packages/client-search/src/types/BatchActionType.ts +++ /dev/null @@ -1,18 +0,0 @@ -export const BatchActionEnum: Readonly> = { - AddObject: 'addObject', - UpdateObject: 'updateObject', - PartialUpdateObject: 'partialUpdateObject', - PartialUpdateObjectNoCreate: 'partialUpdateObjectNoCreate', - DeleteObject: 'deleteObject', - DeleteIndex: 'delete', - ClearIndex: 'clear', -}; - -export type BatchActionType = - | 'addObject' - | 'updateObject' - | 'partialUpdateObject' - | 'partialUpdateObjectNoCreate' - | 'deleteObject' - | 'delete' - | 'clear'; diff --git a/packages/client-search/src/types/BatchRequest.ts b/packages/client-search/src/types/BatchRequest.ts deleted file mode 100644 index 183ba6589..000000000 --- a/packages/client-search/src/types/BatchRequest.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { BatchActionType } from '.'; - -export type BatchRequest = { - /** - * The batch action. - */ - readonly action: BatchActionType; - - /** - * The body of the given `action`. Note that, bodies difer - * depending of the action. - */ - readonly body: Record; -}; diff --git a/packages/client-search/src/types/BatchResponse.ts b/packages/client-search/src/types/BatchResponse.ts deleted file mode 100644 index a68d9eb70..000000000 --- a/packages/client-search/src/types/BatchResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type BatchResponse = { - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; - - /** - * The object ids created/updated by the batch request. - */ - objectIDs: string[]; -}; diff --git a/packages/client-search/src/types/BrowseOptions.ts b/packages/client-search/src/types/BrowseOptions.ts deleted file mode 100644 index 5562d327a..000000000 --- a/packages/client-search/src/types/BrowseOptions.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { BrowseResponse } from '.'; -import { ObjectWithObjectID } from './ObjectWithObjectID'; - -export type BrowseOptions = { - /** - * The callback called for each batch of objects. - */ - readonly batch?: (batch: ReadonlyArray) => any; - - /** - * The callback called to determine if the browse should stop. By - * default this checks whether there's any more content to get. - */ - readonly shouldStop?: (response: BrowseResponse) => boolean; -}; diff --git a/packages/client-search/src/types/BrowseRequestData.ts b/packages/client-search/src/types/BrowseRequestData.ts deleted file mode 100644 index 4ea333dcd..000000000 --- a/packages/client-search/src/types/BrowseRequestData.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type BrowseRequestData = { - /** - * If available, should be used for browsing to the next page. - */ - readonly cursor?: string; - - /** - * If cursor is not available, should be used for browsing to the next page. - */ - readonly page?: number; -}; diff --git a/packages/client-search/src/types/BrowseResponse.ts b/packages/client-search/src/types/BrowseResponse.ts deleted file mode 100644 index 89cfb9e98..000000000 --- a/packages/client-search/src/types/BrowseResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ObjectWithObjectID } from '.'; - -export type BrowseResponse = { - /** - * The hits per page. - */ - hits: Array; - - /** - * The cursor used for iterate on the next page. - */ - cursor?: string; -}; diff --git a/packages/client-search/src/types/ChunkOptions.ts b/packages/client-search/src/types/ChunkOptions.ts deleted file mode 100644 index b7dbf7177..000000000 --- a/packages/client-search/src/types/ChunkOptions.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type ChunkOptions = { - /** - * The number of objects per batch. - */ - readonly batchSize?: number; -}; diff --git a/packages/client-search/src/types/ChunkedBatchResponse.ts b/packages/client-search/src/types/ChunkedBatchResponse.ts deleted file mode 100644 index 25f5cf6d8..000000000 --- a/packages/client-search/src/types/ChunkedBatchResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type ChunkedBatchResponse = { - /** - * The operations task ids. May be used to perform a wait task. - */ - taskIDs: number[]; - - /** - * The object ids created/updated/deleted by the multiple requests. - */ - objectIDs: string[]; -}; diff --git a/packages/client-search/src/types/ClearRulesOptions.ts b/packages/client-search/src/types/ClearRulesOptions.ts deleted file mode 100644 index 40f64f243..000000000 --- a/packages/client-search/src/types/ClearRulesOptions.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type ClearRulesOptions = { - /** - * If the clear rules request should be forward to replicas. - */ - readonly forwardToReplicas?: boolean; -}; diff --git a/packages/client-search/src/types/ClearSynonymsOptions.ts b/packages/client-search/src/types/ClearSynonymsOptions.ts deleted file mode 100644 index 2a6a1433a..000000000 --- a/packages/client-search/src/types/ClearSynonymsOptions.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type ClearSynonymsOptions = { - /** - * If the clear synonyms request should be forward to replicas. - */ - readonly forwardToReplicas?: boolean; -}; diff --git a/packages/client-search/src/types/Cluster.ts b/packages/client-search/src/types/Cluster.ts deleted file mode 100644 index 59abb2fb3..000000000 --- a/packages/client-search/src/types/Cluster.ts +++ /dev/null @@ -1,21 +0,0 @@ -export type Cluster = { - /** - * The cluster name - */ - readonly clusterName: string; - - /** - * Number of records in the cluster. - */ - readonly nbRecords: number; - - /** - * Number of users assign to the cluster. - */ - readonly nbUserIDs: number; - - /** - * Data size taken by all the users assigned to the cluster. - */ - readonly dataSize: number; -}; diff --git a/packages/client-search/src/types/CopyIndexOptions.ts b/packages/client-search/src/types/CopyIndexOptions.ts deleted file mode 100644 index c303d85da..000000000 --- a/packages/client-search/src/types/CopyIndexOptions.ts +++ /dev/null @@ -1,11 +0,0 @@ -export const ScopeEnum: Readonly> = { - Settings: 'settings', - Synonyms: 'synonyms', - Rules: 'rules', -}; - -export type ScopeType = 'settings' | 'synonyms' | 'rules'; - -export type CopyIndexOptions = { - readonly scope?: readonly ScopeType[]; -}; diff --git a/packages/client-search/src/types/CreateIndex.ts b/packages/client-search/src/types/CreateIndex.ts deleted file mode 100644 index 60c24c292..000000000 --- a/packages/client-search/src/types/CreateIndex.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { SearchIndex } from '.'; - -export type CreateIndex = < - TMethods extends { - readonly [key: string]: (base: SearchIndex) => (...args: any) => any; - } ->( - indexName: string, - options?: { readonly methods?: TMethods } -) => SearchIndex & - { - [key in keyof TMethods extends string ? keyof TMethods : never]: ReturnType; // eslint-disable-line @typescript-eslint/generic-type-naming - }; diff --git a/packages/client-search/src/types/DeleteApiKeyResponse.ts b/packages/client-search/src/types/DeleteApiKeyResponse.ts deleted file mode 100644 index 1a8491883..000000000 --- a/packages/client-search/src/types/DeleteApiKeyResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type DeleteApiKeyResponse = { - /** - * The date when the api key was deleted. - */ - deletedAt: string; -}; diff --git a/packages/client-search/src/types/DeleteByFiltersOptions.ts b/packages/client-search/src/types/DeleteByFiltersOptions.ts deleted file mode 100644 index d80181997..000000000 --- a/packages/client-search/src/types/DeleteByFiltersOptions.ts +++ /dev/null @@ -1,43 +0,0 @@ -export type DeleteByFiltersOptions = { - /** - * Filter the query with numeric, facet and/or tag filters. - */ - readonly filters?: string; - - /** - * Filter hits by facet value. - */ - readonly facetFilters?: string | readonly string[] | ReadonlyArray; - - /** - * Filter on numeric attributes. - */ - readonly numericFilters?: string | readonly string[] | ReadonlyArray; - - /** - * Filter hits by tags. tagFilters is a different way of filtering, which relies on the _tags - * attribute. It uses a simpler syntax than filters. You can use it when you want to do - * simple filtering based on tags. - */ - readonly tagFilters?: string | readonly string[] | ReadonlyArray; - - /** - * Search for entries around a central geolocation, enabling a geo search within a circular area. - */ - readonly aroundLatLng?: string; - - /** - * Search for entries around a given location automatically computed from the requester’s IP address. - */ - readonly aroundLatLngViaIP?: boolean; - - /** - * Search inside a rectangular area (in geo coordinates). - */ - readonly insideBoundingBox?: ReadonlyArray | string; - - /** - * Search inside a polygon (in geo coordinates). - */ - readonly insidePolygon?: ReadonlyArray; -}; diff --git a/packages/client-search/src/types/DeleteResponse.ts b/packages/client-search/src/types/DeleteResponse.ts deleted file mode 100644 index 25876a738..000000000 --- a/packages/client-search/src/types/DeleteResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type DeleteResponse = { - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; -}; diff --git a/packages/client-search/src/types/DeleteSynonymOptions.ts b/packages/client-search/src/types/DeleteSynonymOptions.ts deleted file mode 100644 index 6a942d754..000000000 --- a/packages/client-search/src/types/DeleteSynonymOptions.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type DeleteSynonymOptions = { - /** - * If the delete synonym request should be forward to replicas. - */ - readonly forwardToReplicas?: boolean; -}; diff --git a/packages/client-search/src/types/DictionaryEntriesOptions.ts b/packages/client-search/src/types/DictionaryEntriesOptions.ts deleted file mode 100644 index 5769d1915..000000000 --- a/packages/client-search/src/types/DictionaryEntriesOptions.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { DictionaryEntry } from './DictionaryEntry'; - -export type DictionaryEntriesOptions = { - /** - * Array of dictionary entries - */ - readonly dictionaryEntries: readonly DictionaryEntry[]; -}; diff --git a/packages/client-search/src/types/DictionaryEntriesResponse.ts b/packages/client-search/src/types/DictionaryEntriesResponse.ts deleted file mode 100644 index 1ae88d50c..000000000 --- a/packages/client-search/src/types/DictionaryEntriesResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type DictionaryEntriesResponse = { - /** - * When the given rules got saved. - */ - updatedAt: number; - - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; -}; diff --git a/packages/client-search/src/types/DictionaryEntry.ts b/packages/client-search/src/types/DictionaryEntry.ts deleted file mode 100644 index f3c061ddd..000000000 --- a/packages/client-search/src/types/DictionaryEntry.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type DictionaryEntry = { - /** - * Unique identifier for the rule (format: [A-Za-z0-9_-]+). - */ - readonly objectID: string; - - readonly language: string; - - readonly word?: string; - - readonly words?: readonly string[]; - - readonly decomposition?: readonly string[]; - - readonly state?: 'enabled' | 'disabled'; -}; diff --git a/packages/client-search/src/types/DictionaryName.ts b/packages/client-search/src/types/DictionaryName.ts deleted file mode 100644 index 46333d441..000000000 --- a/packages/client-search/src/types/DictionaryName.ts +++ /dev/null @@ -1 +0,0 @@ -export type DictionaryName = 'plurals' | 'stopwords' | 'compounds'; diff --git a/packages/client-search/src/types/DictionarySettings.ts b/packages/client-search/src/types/DictionarySettings.ts deleted file mode 100644 index 2a6a4c48d..000000000 --- a/packages/client-search/src/types/DictionarySettings.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { DictionaryName } from './DictionaryName'; -import { RequireAtLeastOne } from './RequireAtLeastOne'; - -export type DictionarySettings = { - /** - * Disable the builtin Algolia entries for a type of dictionary per language. - */ - readonly disableStandardEntries: RequireAtLeastOne< - Record> - >; -}; diff --git a/packages/client-search/src/types/FacetHit.ts b/packages/client-search/src/types/FacetHit.ts deleted file mode 100644 index 1d61cc67d..000000000 --- a/packages/client-search/src/types/FacetHit.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type FacetHit = { - /** - * The value of the facet. - */ - readonly value: string; - - /** - * The highlighted value. - */ - readonly highlighted: string; - - /** - * The count. - */ - readonly count: number; -}; diff --git a/packages/client-search/src/types/FindAnswersOptions.ts b/packages/client-search/src/types/FindAnswersOptions.ts deleted file mode 100644 index 4007fd6c0..000000000 --- a/packages/client-search/src/types/FindAnswersOptions.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { SearchOptions } from './SearchOptions'; - -export type FindAnswersOptions = { - /** - * Attributes to use for predictions. - * If using the default (["*"]), all attributes are used to find answers. - */ - readonly attributesForPrediction?: readonly string[]; - - /** - * Maximum number of answers to retrieve from the Answers Engine. - * Cannot be greater than 1000. - */ - readonly nbHits?: number; - - /** - * Threshold for the answers’ confidence score: - * only answers with extracts that score above this threshold are returned. - */ - readonly threshold?: number; - - /** - * Whether the attribute name in which the answer was found should be returned. - * This option is expensive in processing time. - */ - readonly returnExtractAttribute?: boolean; - - /** - * Algolia search parameters to use to fetch the hits. - * Can be any search parameter, except: - * - attributesToSnippet - * - hitsPerPage - * - queryType - * - naturalLanguages and associated parameters - * (removeStopWords, ignorePlurals, and removeWordsIfNoResults) - */ - readonly searchParameters?: Omit< - SearchOptions, - | 'attributesToSnippet' - | 'hitsPerPage' - | 'queryType' - | 'naturalLanguages' - | 'removeStopWords' - | 'ignorePlurals' - | 'removeWordsIfNoResults' - >; -}; diff --git a/packages/client-search/src/types/FindAnswersResponse.ts b/packages/client-search/src/types/FindAnswersResponse.ts deleted file mode 100644 index 922e5c92f..000000000 --- a/packages/client-search/src/types/FindAnswersResponse.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Hit } from './Hit'; -import { SearchResponse } from './SearchResponse'; - -export type FindAnswersResponse = Omit, 'hits'> & { - /** - * The hits returned by the search. - * - * Hits are ordered according to the ranking or sorting of the index being queried. - */ - hits: Array< - Hit< - TObject & { - _answer?: { - extract: string; - score: number; - extractAttribute: string; - }; - } - > - >; -}; diff --git a/packages/client-search/src/types/FindObjectOptions.ts b/packages/client-search/src/types/FindObjectOptions.ts deleted file mode 100644 index 050549564..000000000 --- a/packages/client-search/src/types/FindObjectOptions.ts +++ /dev/null @@ -1,13 +0,0 @@ -export type FindObjectOptions = { - /** - * If the underlying find object options should paginate - * over a search method. - */ - readonly paginate?: boolean; - - /** - * The query used by the underlying find object to - * find the object. - */ - readonly query?: string; -}; diff --git a/packages/client-search/src/types/FindObjectResponse.ts b/packages/client-search/src/types/FindObjectResponse.ts deleted file mode 100644 index 6871805aa..000000000 --- a/packages/client-search/src/types/FindObjectResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { ObjectWithObjectID } from '.'; - -export type FindObjectResponse = { - /** - * The found object. - */ - object: TObject & ObjectWithObjectID; - - /** - * The position where the object was found. - */ - position: number; - - /** - * The page where the object was found. - */ - page: number; -}; diff --git a/packages/client-search/src/types/GetApiKeyResponse.ts b/packages/client-search/src/types/GetApiKeyResponse.ts deleted file mode 100644 index 9a894dfcb..000000000 --- a/packages/client-search/src/types/GetApiKeyResponse.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { ApiKeyACLType } from '.'; - -export type GetApiKeyResponse = { - /** - * The api key value - */ - value: string; - - /** - * Date of creation (Unix timestamp). - */ - createdAt: number; - - /** - * List of permissions the key contains. - */ - acl: ApiKeyACLType[]; - - /** - * A Unix timestamp used to define the expiration date of the API key. - */ - validity: number; - - /** - * Specify the maximum number of hits this API key can retrieve in one call. - * This parameter can be used to protect you from attempts at retrieving your entire index contents by massively querying the index. - */ - maxHitsPerQuery?: number; - - /** - * Specify the maximum number of API calls allowed from an IP address per hour. Each time an API call is performed with this key, a check is performed. - */ - maxQueriesPerIPPerHour?: number; - - /** - * Specify the list of targeted indices. You can target all indices starting with a prefix or ending with a suffix using the ‘*’ character. - */ - indexes?: string[]; - - /** - * Specify the list of referers. You can target all referers starting with a prefix, ending with a suffix using the ‘*’ character. - */ - referers?: string[]; - - /** - * IPv4 network allowed to use the generated key. - * This is used for more protection against API key leaking and reuse. - * Note that you can only provide a single source, but you can specify a range of IPs (e.g., 192.168.1.0/24). - */ - restrictSources?: string; - - /** - * Specify the list of query parameters. You can force the query parameters for a query using the url string format. - */ - queryParameters?: string; - - /** - * Specify a description of the API key. Used for informative purposes only. It has impact on the functionality of the API key. - */ - description?: string; -}; diff --git a/packages/client-search/src/types/GetDictionarySettingsResponse.ts b/packages/client-search/src/types/GetDictionarySettingsResponse.ts deleted file mode 100644 index 88ddad87d..000000000 --- a/packages/client-search/src/types/GetDictionarySettingsResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { DictionaryName } from './DictionaryName'; -import { RequireAtLeastOne } from './RequireAtLeastOne'; - -export type GetDictionarySettingsResponse = { - /** - * Disable the builtin Algolia entries for a type of dictionary per language. - */ - readonly disableStandardEntries: RequireAtLeastOne< - Record> - >; -}; diff --git a/packages/client-search/src/types/GetLogsOptions.ts b/packages/client-search/src/types/GetLogsOptions.ts deleted file mode 100644 index e05da6d63..000000000 --- a/packages/client-search/src/types/GetLogsOptions.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type GetLogsOptions = { - /** - * The offset. - */ - readonly offset: number; - - /** - * The length size. - */ - readonly length: number; -}; diff --git a/packages/client-search/src/types/GetLogsResponse.ts b/packages/client-search/src/types/GetLogsResponse.ts deleted file mode 100644 index d9dcab6b3..000000000 --- a/packages/client-search/src/types/GetLogsResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Log } from '.'; - -export type GetLogsResponse = { - /** - * The list of logs. - */ - logs: Log[]; -}; diff --git a/packages/client-search/src/types/GetObjectOptions.ts b/packages/client-search/src/types/GetObjectOptions.ts deleted file mode 100644 index e6d13d59f..000000000 --- a/packages/client-search/src/types/GetObjectOptions.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type GetObjectOptions = { - /** - * The attributes that should come with witch object. - */ - readonly attributesToRetrieve?: readonly string[]; -}; diff --git a/packages/client-search/src/types/GetObjectsOptions.ts b/packages/client-search/src/types/GetObjectsOptions.ts deleted file mode 100644 index dcbb4bda9..000000000 --- a/packages/client-search/src/types/GetObjectsOptions.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type GetObjectsOptions = { - /** - * The attributes that should come with witch object. - */ - readonly attributesToRetrieve?: readonly string[]; -}; diff --git a/packages/client-search/src/types/GetObjectsResponse.ts b/packages/client-search/src/types/GetObjectsResponse.ts deleted file mode 100644 index 30a5730f3..000000000 --- a/packages/client-search/src/types/GetObjectsResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ObjectWithObjectID } from '.'; - -export type GetObjectsResponse = { - /** - * The list of results. - */ - results: Array<(TObject & ObjectWithObjectID) | null>; -}; diff --git a/packages/client-search/src/types/GetTopUserIDsResponse.ts b/packages/client-search/src/types/GetTopUserIDsResponse.ts deleted file mode 100644 index 042ad494a..000000000 --- a/packages/client-search/src/types/GetTopUserIDsResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { UserIDResponse } from '.'; - -export type GetTopUserIDsResponse = { - /** - * Mapping of cluster names to top users. - */ - topUsers: Record; -}; diff --git a/packages/client-search/src/types/HasPendingMappingsOptions.ts b/packages/client-search/src/types/HasPendingMappingsOptions.ts deleted file mode 100644 index b39e93785..000000000 --- a/packages/client-search/src/types/HasPendingMappingsOptions.ts +++ /dev/null @@ -1,17 +0,0 @@ -export type HasPendingMappingsOptions = { - /** - * If the clusters pending mapping state should be on the response. - * - * @defaultValue false - */ - readonly retrieveMappings?: boolean; - - /** - * If the clusters pending mapping state should be on the response. - * - * @defaultValue false - * - * @internal - */ - readonly getClusters?: boolean; -}; diff --git a/packages/client-search/src/types/HasPendingMappingsResponse.ts b/packages/client-search/src/types/HasPendingMappingsResponse.ts deleted file mode 100644 index aa3061ea6..000000000 --- a/packages/client-search/src/types/HasPendingMappingsResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type HasPendingMappingsResponse = { - /** - * If there is any clusters with pending mapping state. - */ - pending: boolean; - - /** - * Describe cluster pending (migrating, creating, deleting) mapping state. - */ - clusters?: { [key: string]: string[] }; -}; diff --git a/packages/client-search/src/types/Hit.ts b/packages/client-search/src/types/Hit.ts deleted file mode 100644 index ea26febf3..000000000 --- a/packages/client-search/src/types/Hit.ts +++ /dev/null @@ -1,55 +0,0 @@ -type HighlightMatch = { - readonly value: string; - readonly matchLevel: 'none' | 'partial' | 'full'; - readonly matchedWords: readonly string[]; - readonly fullyHighlighted?: boolean; -}; - -export type HighlightResult = THit extends string | number - ? HighlightMatch - : { - [KAttribute in keyof THit]?: HighlightResult; - }; - -type SnippetMatch = { - readonly value: string; - readonly matchLevel: 'none' | 'partial' | 'full'; -}; - -export type SnippetResult = THit extends string | number - ? SnippetMatch - : { - [KAttribute in keyof THit]: SnippetResult; - }; - -export type RankingInfo = { - readonly promoted: boolean; - readonly nbTypos: number; - readonly firstMatchedWord: number; - readonly proximityDistance?: number; - readonly geoDistance: number; - readonly geoPrecision?: number; - readonly nbExactWords: number; - readonly words: number; - readonly filters: number; - readonly userScore: number; - readonly matchedGeoLocation?: { - readonly lat: number; - readonly lng: number; - readonly distance: number; - }; - readonly personalization?: { - readonly filtersScore: number; - readonly rankingScore: number; - readonly score: number; - }; - readonly promotedByReRanking?: boolean; -}; - -export type Hit = THit & { - readonly objectID: string; - readonly _highlightResult?: HighlightResult; - readonly _snippetResult?: SnippetResult; - readonly _rankingInfo?: RankingInfo; - readonly _distinctSeqID?: number; -}; diff --git a/packages/client-search/src/types/IndexOperationResponse.ts b/packages/client-search/src/types/IndexOperationResponse.ts deleted file mode 100644 index 5606eed0b..000000000 --- a/packages/client-search/src/types/IndexOperationResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type IndexOperationResponse = { - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; -}; diff --git a/packages/client-search/src/types/Indice.ts b/packages/client-search/src/types/Indice.ts deleted file mode 100644 index 203e7cc37..000000000 --- a/packages/client-search/src/types/Indice.ts +++ /dev/null @@ -1,63 +0,0 @@ -export type Index = { - /** - * Index name. - */ - readonly name: string; - - /** - * Index creation date. (ISO-8601 format) - */ - readonly createdAt: string; - - /** - * Date of last update. (ISO-8601 format) - */ - readonly updatedAt: string; - - /** - * Number of records contained in the index - */ - readonly entries: number; - - /** - * Number of bytes of the index in minified format. - */ - readonly dataSize: number; - - /** - * Number of bytes of the index binary file. - */ - readonly fileSize: number; - - /** - * Last build time in seconds. - */ - readonly lastBuildTimeS: number; - - /** - * Number of pending indexing operations. - */ - readonly numberOfPendingTasks: number; - - /** - * A boolean which says whether the index has pending tasks. - */ - readonly pendingTask: boolean; - - /** - * Only present if the index is a replica. - * Contains the name of the related primary index. - */ - readonly primary?: string; - - /** - * Only present if the index is a primary index with replicas. - * Contains the names of all linked replicas. - */ - readonly replicas?: readonly string[]; -}; - -/** - * @deprecated please use `Index` instead of `Indice` - */ -export type Indice = Index; diff --git a/packages/client-search/src/types/ListApiKeysResponse.ts b/packages/client-search/src/types/ListApiKeysResponse.ts deleted file mode 100644 index 16feddb7b..000000000 --- a/packages/client-search/src/types/ListApiKeysResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { GetApiKeyResponse } from './GetApiKeyResponse'; - -export type ListApiKeysResponse = { - /** - * List of keys - */ - keys: GetApiKeyResponse[]; -}; diff --git a/packages/client-search/src/types/ListClustersResponse.ts b/packages/client-search/src/types/ListClustersResponse.ts deleted file mode 100644 index 54dfee45d..000000000 --- a/packages/client-search/src/types/ListClustersResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Cluster } from './Cluster'; - -export type ListClustersResponse = { - /** - * List of clusters. - */ - clusters: Cluster[]; -}; diff --git a/packages/client-search/src/types/ListIndicesResponse.ts b/packages/client-search/src/types/ListIndicesResponse.ts deleted file mode 100644 index 951a3c9f8..000000000 --- a/packages/client-search/src/types/ListIndicesResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Index } from '.'; - -export type ListIndicesResponse = { - /** - * Number of pages - */ - nbPages: number; - - /** - * List of index response - */ - items: Index[]; -}; diff --git a/packages/client-search/src/types/ListUserIDsOptions.ts b/packages/client-search/src/types/ListUserIDsOptions.ts deleted file mode 100644 index 84678ba4a..000000000 --- a/packages/client-search/src/types/ListUserIDsOptions.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type ListUserIDsOptions = { - /** - * Page to fetch. - */ - readonly page?: number; - - /** - * Number of users to retrieve per page. - */ - readonly hitsPerPage?: number; -}; diff --git a/packages/client-search/src/types/ListUserIDsResponse.ts b/packages/client-search/src/types/ListUserIDsResponse.ts deleted file mode 100644 index a4ff097cd..000000000 --- a/packages/client-search/src/types/ListUserIDsResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { UserIDResponse } from '.'; - -export type ListUserIDsResponse = { - /** - * List of users id. - */ - userIDs: UserIDResponse[]; -}; diff --git a/packages/client-search/src/types/Log.ts b/packages/client-search/src/types/Log.ts deleted file mode 100644 index 84c23bfc9..000000000 --- a/packages/client-search/src/types/Log.ts +++ /dev/null @@ -1,96 +0,0 @@ -export type Log = { - /** - * Timestamp in ISO-8601 format. - */ - readonly timestamp: string; - - /** - * Rest type of the method. - */ - readonly method: string; - - /** - * Http response code. - */ - readonly answer_code: string; - - /** - * Request body. It’s truncated after 1000 characters. - */ - readonly query_body: string; - - /** - * Answer body. It’s truncated after 1000 characters. - */ - readonly answer: string; - - /** - * Request URL. - */ - readonly url: string; - - /** - * Client ip of the call. - */ - readonly ip: string; - - /** - * SHA1 ID of entry. - */ - readonly sha1: string; - - /** - * Request Headers (API Key is obfuscated). - */ - readonly query_headers: string; - - /** - * Number Of Api Calls - */ - readonly nb_api_calls?: string; - - /** - * Processing time for the query. This does not include network time. - */ - readonly processing_time_ms: string; - - /** - * Number of hits returned for the query. - */ - readonly query_nb_hits?: string; - - /** - * Exhaustive flags used during the query. - */ - readonly exhaustive?: boolean; - - /** - * Index name of the log - */ - readonly index?: string; - - /** - * Internal queries performed for this query. - */ - readonly inner_queries: ReadonlyArray<{ - /** - * Index name of the query. - */ - readonly index_name: string; - - /** - * Query ID of the query. - */ - readonly query_id?: string; - - /** - * The offset of the query. - */ - readonly offset?: number; - - /** - * The user token of the query. - */ - readonly user_token?: string; - }>; -}; diff --git a/packages/client-search/src/types/MultipleBatchRequest.ts b/packages/client-search/src/types/MultipleBatchRequest.ts deleted file mode 100644 index 20f9886e2..000000000 --- a/packages/client-search/src/types/MultipleBatchRequest.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { BatchActionType } from '.'; - -export type MultipleBatchRequest = { - /** - * The index name where the multiple batch are going to be applied. - */ - readonly indexName: string; - - /** - * The action used. - */ - readonly action: BatchActionType; - - /** - * The body associated with the request. - */ - readonly body: Record; -}; diff --git a/packages/client-search/src/types/MultipleBatchResponse.ts b/packages/client-search/src/types/MultipleBatchResponse.ts deleted file mode 100644 index 0fe20b9c8..000000000 --- a/packages/client-search/src/types/MultipleBatchResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type MultipleBatchResponse = { - /** - * The list of object ids. - */ - objectIDs: string[]; - - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: Record; -}; diff --git a/packages/client-search/src/types/MultipleGetObject.ts b/packages/client-search/src/types/MultipleGetObject.ts deleted file mode 100644 index d716e1f16..000000000 --- a/packages/client-search/src/types/MultipleGetObject.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type MultipleGetObject = { - /** - * The index name. - */ - readonly indexName: string; - - /** - * The object id. - */ - readonly objectID: string; - - /** - * The attributes that should be returned with the object. - */ - readonly attributesToRetrieve?: readonly string[]; -}; diff --git a/packages/client-search/src/types/MultipleGetObjectsResponse.ts b/packages/client-search/src/types/MultipleGetObjectsResponse.ts deleted file mode 100644 index eeef3ea1d..000000000 --- a/packages/client-search/src/types/MultipleGetObjectsResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ObjectWithObjectID } from '.'; - -export type MultipleGetObjectsResponse = { - /** - * The list of objects. - */ - results: Array; -}; diff --git a/packages/client-search/src/types/MultipleQueriesOptions.ts b/packages/client-search/src/types/MultipleQueriesOptions.ts deleted file mode 100644 index 9c60f7977..000000000 --- a/packages/client-search/src/types/MultipleQueriesOptions.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const StrategyEnum: Readonly> = { - None: 'none', - StopIfEnoughMatches: 'stopIfEnoughMatches', -}; - -export type StrategyType = 'none' | 'stopIfEnoughMatches'; - -export type MultipleQueriesOptions = { - readonly strategy?: StrategyType; -}; diff --git a/packages/client-search/src/types/MultipleQueriesQuery.ts b/packages/client-search/src/types/MultipleQueriesQuery.ts deleted file mode 100644 index 41f29699e..000000000 --- a/packages/client-search/src/types/MultipleQueriesQuery.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { SearchOptions } from '.'; - -type SharedMultipleQueriesQuery = { - /** - * The type of query to perform. - * - * @defaultValue "default" - */ - readonly type?: 'default' | 'facet'; - - /** - * The index name. - */ - readonly indexName: string; - - /** - * The search options. - */ - readonly params?: SearchOptions; - - /** - * The query associated with the request. - */ - readonly query?: string; -}; - -export type MultipleQueriesQuery = SharedMultipleQueriesQuery & - ( - | { - readonly type?: 'default'; - } - | { - readonly type: 'facet'; - /** - * The facet name. - */ - readonly facet: string; - /** - * The search options. - */ - readonly params?: SharedMultipleQueriesQuery['params'] & { - /** - * The search query used to search the facet attribute. Follows the same rules for an index query: a single character, a partial word, a word, or a phrase. - */ - readonly facetQuery?: string; - }; - } - ); diff --git a/packages/client-search/src/types/MultipleQueriesResponse.ts b/packages/client-search/src/types/MultipleQueriesResponse.ts deleted file mode 100644 index 8b57f44e6..000000000 --- a/packages/client-search/src/types/MultipleQueriesResponse.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { SearchResponse } from '.'; - -export type MultipleQueriesResponse = { - /** - * The list of results. - */ - results: Array>; -}; diff --git a/packages/client-search/src/types/ObjectWithObjectID.ts b/packages/client-search/src/types/ObjectWithObjectID.ts deleted file mode 100644 index 277ae8a3f..000000000 --- a/packages/client-search/src/types/ObjectWithObjectID.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type ObjectWithObjectID = { - /** - * The object id of the object. - */ - readonly objectID: string; -}; diff --git a/packages/client-search/src/types/PartialUpdateObjectResponse.ts b/packages/client-search/src/types/PartialUpdateObjectResponse.ts deleted file mode 100644 index 25a43ab41..000000000 --- a/packages/client-search/src/types/PartialUpdateObjectResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type PartialUpdateObjectResponse = { - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; - - /** - * The object id updated. - */ - objectID: string; -}; diff --git a/packages/client-search/src/types/PartialUpdateObjectsOptions.ts b/packages/client-search/src/types/PartialUpdateObjectsOptions.ts deleted file mode 100644 index 75e415ae9..000000000 --- a/packages/client-search/src/types/PartialUpdateObjectsOptions.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type PartialUpdateObjectsOptions = { - /** - * If the object should be created when does not exist. - */ - readonly createIfNotExists?: boolean; -}; diff --git a/packages/client-search/src/types/RemoveUserIDResponse.ts b/packages/client-search/src/types/RemoveUserIDResponse.ts deleted file mode 100644 index 392c44acd..000000000 --- a/packages/client-search/src/types/RemoveUserIDResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type RemoveUserIDResponse = { - /** - * When the given `userID` got removed. - */ - deletedAt: string; -}; diff --git a/packages/client-search/src/types/ReplaceAllObjectsOptions.ts b/packages/client-search/src/types/ReplaceAllObjectsOptions.ts deleted file mode 100644 index c4d5f869f..000000000 --- a/packages/client-search/src/types/ReplaceAllObjectsOptions.ts +++ /dev/null @@ -1,8 +0,0 @@ -export type ReplaceAllObjectsOptions = { - /** - * If the all objects should be replaced using wait operations. Keep - * in mind that, when the `safe` option is used, the operation may - * take a little more than expected. - */ - readonly safe?: boolean; -}; diff --git a/packages/client-search/src/types/RequireAtLeastOne.ts b/packages/client-search/src/types/RequireAtLeastOne.ts deleted file mode 100644 index 9b2cb5406..000000000 --- a/packages/client-search/src/types/RequireAtLeastOne.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type RequireAtLeastOne = { - [TKey in keyof TType]-?: Required> & - Partial>>; -}[keyof TType]; diff --git a/packages/client-search/src/types/RestoreApiKeyResponse.ts b/packages/client-search/src/types/RestoreApiKeyResponse.ts deleted file mode 100644 index 4d7fad6ed..000000000 --- a/packages/client-search/src/types/RestoreApiKeyResponse.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type RestoreApiKeyResponse = { - /** - * Restoration date of the API key. - */ - createdAt: string; -}; diff --git a/packages/client-search/src/types/Rule.ts b/packages/client-search/src/types/Rule.ts deleted file mode 100644 index 1b8abe319..000000000 --- a/packages/client-search/src/types/Rule.ts +++ /dev/null @@ -1,203 +0,0 @@ -import { SearchOptions, Settings } from '.'; - -export type Rule = { - /** - * Unique identifier for the rule (format: [A-Za-z0-9_-]+). - */ - readonly objectID: string; - - /** - * Condition of the rule, expressed using the following variables: pattern, anchoring, context. - * - * @deprecated This parameter is deprecated in favor of `conditions`. - */ - readonly condition?: Condition; - - /** - * Conditions of the rule, expressed using the following variables: pattern, anchoring, context. - */ - readonly conditions?: readonly Condition[]; - - /** - * Consequence of the rule. At least one of the following object must be used: params, promote, hide, userData. - */ - readonly consequence?: Consequence; - - /** - * This field is intended for rule management purposes, in particular to ease searching for rules and presenting them to human readers. It is not interpreted by the API. - */ - readonly description?: string; - - /** - * Whether the rule is enabled. Disabled rules remain in the index, but are not applied at query time. - */ - readonly enabled?: boolean; - - /** - * By default, rules are permanently valid. When validity periods are specified, the rule applies only during those periods; it is ignored the rest of the time. - * The list must not be empty. - */ - readonly validity?: readonly TimeRange[]; -}; - -export type AutomaticFacetFilter = { - /** - * Attribute to filter on. This must match a facet placeholder in the rule’s pattern. - */ - readonly facet: string; - - /** - * Whether the filter is disjunctive (true) or conjunctive (false). - */ - readonly disjunctive?: boolean; - - /** - * Score for the filter. Typically used for optional or disjunctive filters. - */ - readonly score?: number; -}; - -export type ConsequenceQuery = { - /** - * List of removes. - */ - readonly remove?: readonly string[]; - - /** - * List of edits. - */ - readonly edits?: ReadonlyArray<{ - /** - * Type of edit. - */ - readonly type?: 'remove' | 'replace'; - - /** - * Text or patterns to remove from the query string. - */ - readonly delete?: string; - - /** - * Text that should be inserted in place of the removed text inside the query string. - */ - readonly insert?: string; - }>; -}; - -export type ConsequencePromote = - | { - /** - * Unique identifier of the object to promote. - */ - readonly objectID: string; - - /** - * Promoted rank for the object (zero-based). - */ - readonly position: number; - } - | { - /** - * List of unique identifiers for the objects to promote. - */ - readonly objectIDs: readonly string[]; - - /** - * Promoted start rank for the objects (zero-based). - */ - readonly position: number; - }; - -export type ConsequenceParams = { - /** - * When providing a string, it replaces the entire query string. - * When providing an object, it describes incremental edits to be made to the query string (but you can’t do both). - */ - readonly query?: ConsequenceQuery | string; - - /** - * Names of facets to which automatic filtering must be applied; they must match the facet name of a facet value placeholder in the query pattern. - */ - readonly automaticFacetFilters?: readonly AutomaticFacetFilter[] | readonly string[]; - - /** - * Same syntax as automaticFacetFilters, but the engine treats the filters as optional. - * Behaves like optionalFilters. - */ - readonly automaticOptionalFacetFilters?: readonly AutomaticFacetFilter[] | readonly string[]; - - /** - * Content defining how the search interface should be rendered. - * A default value for this can be set via settings - */ - readonly renderingContent?: Settings['renderingContent']; -}; - -export type Condition = { - /** - * Query patterns are expressed as a string with a specific syntax. A pattern is a sequence of tokens. - */ - readonly pattern?: string; - - /** - * Apply this rule only when the filter matches. - */ - readonly filters?: string; - - /** - * is | startsWith | endsWith | contains: Whether the pattern must match the beginning or the end of the query string, or both, or none. - */ - readonly anchoring?: 'is' | 'startsWith' | 'endsWith' | 'contains'; - - /** - * Rule context (format: [A-Za-z0-9_-]+). When specified, the rule is contextual and applies only when the same context is specified at query time (using the ruleContexts parameter). - * When absent, the rule is generic and always applies (provided that its other conditions are met, of course). - */ - readonly context?: string; - - /** - * If set to true, alternatives make the rule to trigger on synonyms, typos and plurals. - * Note that setting ignorePlurals to false overrides this parameter. - */ - readonly alternatives?: boolean; -}; - -export type Consequence = { - /** - * Additional search parameters. Any valid search parameter is allowed. - */ - readonly params?: ConsequenceParams & Pick>; - - /** - * Objects to promote as hits. - */ - readonly promote?: readonly ConsequencePromote[]; - - /** - * Objects to hide from hits. - */ - readonly hide?: ReadonlyArray<{ readonly objectID: string }>; - - /** - * Whether the Query Rule should promote or not promoted items. - */ - readonly filterPromotes?: boolean; - - /** - * Custom JSON object that will be appended to the userData array in the response. - * This object is not interpreted by the API. It is limited to 1kB of minified JSON. - */ - readonly userData?: any; -}; - -export type TimeRange = { - /** - * DateTime with UTC offset for Serialization/Deserialization in unix timespan. - */ - readonly from: number; - - /** - * DateTime with UTC offset for Serialization/Deserialization in unix timespan. - */ - readonly until: number; -}; diff --git a/packages/client-search/src/types/SaveObjectResponse.ts b/packages/client-search/src/types/SaveObjectResponse.ts deleted file mode 100644 index f28b40b2d..000000000 --- a/packages/client-search/src/types/SaveObjectResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type SaveObjectResponse = { - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; - - /** - * The object id saved. - */ - objectID: string; -}; diff --git a/packages/client-search/src/types/SaveObjectsOptions.ts b/packages/client-search/src/types/SaveObjectsOptions.ts deleted file mode 100644 index 8f49e107e..000000000 --- a/packages/client-search/src/types/SaveObjectsOptions.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type SaveObjectsOptions = { - /** - * If the object id should be generated when does not exists. - */ - readonly autoGenerateObjectIDIfNotExist?: boolean; -}; diff --git a/packages/client-search/src/types/SaveRuleResponse.ts b/packages/client-search/src/types/SaveRuleResponse.ts deleted file mode 100644 index 30366aedf..000000000 --- a/packages/client-search/src/types/SaveRuleResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type SaveRuleResponse = { - /** - * When the given rules got saved. - */ - updatedAt: number; - - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; -}; diff --git a/packages/client-search/src/types/SaveRulesOptions.ts b/packages/client-search/src/types/SaveRulesOptions.ts deleted file mode 100644 index 260a0c13b..000000000 --- a/packages/client-search/src/types/SaveRulesOptions.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type SaveRulesOptions = { - /** - * If the saved rules should be forward to replicas. - */ - readonly forwardToReplicas?: boolean; - - /** - * If the existing rules should be removed. - */ - readonly clearExistingRules?: boolean; -}; diff --git a/packages/client-search/src/types/SaveRulesResponse.ts b/packages/client-search/src/types/SaveRulesResponse.ts deleted file mode 100644 index 813fd2451..000000000 --- a/packages/client-search/src/types/SaveRulesResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type SaveRulesResponse = { - /** - * When the given rules got saved. - */ - updatedAt: number; - - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; -}; diff --git a/packages/client-search/src/types/SaveSynonymResponse.ts b/packages/client-search/src/types/SaveSynonymResponse.ts deleted file mode 100644 index cd6b7cf2d..000000000 --- a/packages/client-search/src/types/SaveSynonymResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type SaveSynonymResponse = { - /** - * When the given synonyms got saved. - */ - updatedAt: number; - - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; -}; diff --git a/packages/client-search/src/types/SaveSynonymsOptions.ts b/packages/client-search/src/types/SaveSynonymsOptions.ts deleted file mode 100644 index cc3788964..000000000 --- a/packages/client-search/src/types/SaveSynonymsOptions.ts +++ /dev/null @@ -1,17 +0,0 @@ -export type SaveSynonymsOptions = { - /** - * If the saved synonyms should be forward to replicas. - */ - readonly forwardToReplicas?: boolean; - - /** - * If the existing synonyms should be removed. - * @deprecated use clearExistingSynonyms - */ - readonly replaceExistingSynonyms?: boolean; - - /** - * If the existing synonyms should be removed. - */ - readonly clearExistingSynonyms?: boolean; -}; diff --git a/packages/client-search/src/types/SaveSynonymsResponse.ts b/packages/client-search/src/types/SaveSynonymsResponse.ts deleted file mode 100644 index ca49227a5..000000000 --- a/packages/client-search/src/types/SaveSynonymsResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type SaveSynonymsResponse = { - /** - * When the given synonyms got saved. - */ - updatedAt: number; - - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; -}; diff --git a/packages/client-search/src/types/SearchClient.ts b/packages/client-search/src/types/SearchClient.ts deleted file mode 100644 index d7ba06739..000000000 --- a/packages/client-search/src/types/SearchClient.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Transporter } from '@algolia/transporter'; - -export type SearchClient = { - /** - * The application id. - */ - readonly appId: string; - - /** - * The underlying transporter. - */ - readonly transporter: Transporter; - - /** - * Mutates the transporter, adding the given user agent. - */ - readonly addAlgoliaAgent: (segment: string, version?: string) => void; - - /** - * Clears both requests and responses caches. - */ - readonly clearCache: () => Readonly>; -}; diff --git a/packages/client-search/src/types/SearchClientOptions.ts b/packages/client-search/src/types/SearchClientOptions.ts deleted file mode 100644 index 266ebebf6..000000000 --- a/packages/client-search/src/types/SearchClientOptions.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { AuthModeType } from '@algolia/client-common'; - -export type SearchClientOptions = { - /** - * The application id. - */ - readonly appId: string; - - /** - * The api key. - */ - readonly apiKey: string; - - /** - * The auth mode type. In browser environments credentials may - * be passed within the headers. - */ - readonly authMode?: AuthModeType; -}; diff --git a/packages/client-search/src/types/SearchDictionaryEntriesResponse.ts b/packages/client-search/src/types/SearchDictionaryEntriesResponse.ts deleted file mode 100644 index 1d054e0af..000000000 --- a/packages/client-search/src/types/SearchDictionaryEntriesResponse.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { DictionaryEntry } from './DictionaryEntry'; - -export type SearchDictionaryEntriesResponse = { - /** - * The dictionary entries returned by the search. - */ - hits: DictionaryEntry[]; - - /** - * Index of the current page (zero-based). - */ - page: number; - - /** - * Number of dictionary entries matched by the query. - */ - nbHits: number; - - /** - * Number of pages returned. - * - * Calculation is based on the total number of hits (nbHits) divided by the - * number of hits per page (hitsPerPage), rounded up to the nearest integer. - */ - nbPages: number; -}; diff --git a/packages/client-search/src/types/SearchForFacetValuesQueryParams.ts b/packages/client-search/src/types/SearchForFacetValuesQueryParams.ts deleted file mode 100644 index fcc74d7c1..000000000 --- a/packages/client-search/src/types/SearchForFacetValuesQueryParams.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type SearchForFacetValuesQueryParams = { - /** - * The facet name. - */ - readonly facetName: string; - - /** - * The facet query. - */ - readonly facetQuery: string; -}; diff --git a/packages/client-search/src/types/SearchForFacetValuesResponse.ts b/packages/client-search/src/types/SearchForFacetValuesResponse.ts deleted file mode 100644 index 37e60fd59..000000000 --- a/packages/client-search/src/types/SearchForFacetValuesResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { FacetHit } from '.'; - -export type SearchForFacetValuesResponse = { - /** - * The list of facet hits. - */ - facetHits: FacetHit[]; - - /** - * The exhaustive facets count. - */ - exhaustiveFacetsCount: boolean; - - /** - * The time that the API toke the process the request. - */ - processingTimeMS?: number; -}; diff --git a/packages/client-search/src/types/SearchIndex.ts b/packages/client-search/src/types/SearchIndex.ts deleted file mode 100644 index 996e826c2..000000000 --- a/packages/client-search/src/types/SearchIndex.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Transporter } from '@algolia/transporter'; - -export type SearchIndex = { - /** - * The application id. - */ - readonly appId: string; - - /** - * The index name. - */ - readonly indexName: string; - - /** - * The underlying transporter. - */ - readonly transporter: Transporter; -}; diff --git a/packages/client-search/src/types/SearchOptions.ts b/packages/client-search/src/types/SearchOptions.ts deleted file mode 100644 index e2f47a26f..000000000 --- a/packages/client-search/src/types/SearchOptions.ts +++ /dev/null @@ -1,376 +0,0 @@ -export type SearchOptions = { - /** - * Create a new query with an empty search query. - */ - readonly query?: string; - - /** - * Allows a search for similar objects, but the query has to be constructed on your end and included alongside an empty query. - * - * The similarQuery should be made from the tags and keywords of the relevant object. - */ - readonly similarQuery?: string; - - /** - * Filter hits by facet value. - */ - readonly facetFilters?: string | readonly string[] | ReadonlyArray; - - /** - * Create filters for ranking purposes, where records that match the filter are ranked highest. - */ - readonly optionalFilters?: string | readonly string[] | ReadonlyArray; - - /** - * Filter on numeric attributes. - */ - readonly numericFilters?: string | readonly string[] | ReadonlyArray; - - /** - * Filter hits by tags. tagFilters is a different way of filtering, which relies on the _tags - * attribute. It uses a simpler syntax than filters. You can use it when you want to do - * simple filtering based on tags. - */ - readonly tagFilters?: string | readonly string[] | ReadonlyArray; - - /** - * Determines how to calculate the total score for filtering. - */ - readonly sumOrFiltersScores?: boolean; - - /** - * Filter the query with numeric, facet and/or tag filters. - */ - readonly filters?: string; - - /** - * Specify the page to retrieve. - */ - readonly page?: number; - - /** - * Set the number of hits per page. - */ - readonly hitsPerPage?: number; - - /** - * Specify the offset of the first hit to return. - */ - readonly offset?: number; - - /** - * Set the number of hits to retrieve (used only with offset). - */ - readonly length?: number; - - /** - * List of attributes to highlight. - */ - readonly attributesToHighlight?: readonly string[]; - - /** - * List of attributes to snippet, with an optional maximum number of words to snippet. - */ - readonly attributesToSnippet?: readonly string[]; - - /** - * Gives control over which attributes to retrieve and which not to retrieve. - */ - readonly attributesToRetrieve?: readonly string[]; - - /** - * The HTML string to insert before the highlighted parts in all highlight and snippet results. - */ - readonly highlightPreTag?: string; - - /** - * The HTML string to insert after the highlighted parts in all highlight and snippet results - */ - readonly highlightPostTag?: string; - - /** - * String used as an ellipsis indicator when a snippet is truncated. - */ - readonly snippetEllipsisText?: string; - - /** - * Restrict highlighting and snippeting to items that matched the query. - */ - readonly restrictHighlightAndSnippetArrays?: boolean; - - /** - * Facets to retrieve. - */ - readonly facets?: readonly string[]; - - /** - * Maximum number of facet values to return for each facet during a regular search. - */ - readonly maxValuesPerFacet?: number; - - /** - * Force faceting to be applied after de-duplication (via the Distinct setting). - */ - readonly facetingAfterDistinct?: boolean; - - /** - * Minimum number of characters a word in the query string must contain to accept matches with 1 typo - */ - readonly minWordSizefor1Typo?: number; - - /** - * Minimum number of characters a word in the query string must contain to accept matches with 2 typos. - */ - readonly minWordSizefor2Typos?: number; - - /** - * Whether to allow typos on numbers (“numeric tokens”) in the query string. - */ - readonly allowTyposOnNumericTokens?: boolean; - - /** - * List of attributes on which you want to disable typo tolerance. - */ - readonly disableTypoToleranceOnAttributes?: readonly string[]; - - /** - * Controls if and how query words are interpreted as prefixes. - */ - readonly queryType?: 'prefixLast' | 'prefixAll' | 'prefixNone'; - - /** - * Selects a strategy to remove words from the query when it doesn’t match any hits. - */ - readonly removeWordsIfNoResults?: 'none' | 'lastWords' | 'firstWords' | 'allOptional'; - - /** - * Enables the advanced query syntax. - */ - readonly advancedSyntax?: boolean; - - /** - * AdvancedSyntaxFeatures can be exactPhrase or excludeWords - */ - readonly advancedSyntaxFeatures?: ReadonlyArray<'exactPhrase' | 'excludeWords'>; - - /** - * A list of words that should be considered as optional when found in the query. - */ - readonly optionalWords?: string | readonly string[]; - - /** - * List of attributes on which you want to disable the exact ranking criterion. - */ - readonly disableExactOnAttributes?: readonly string[]; - - /** - * Controls how the exact ranking criterion is computed when the query contains only one word. - */ - readonly exactOnSingleWordQuery?: 'attribute' | 'none' | 'word'; - - /** - * List of alternatives that should be considered an exact match by the exact ranking criterion. - */ - readonly alternativesAsExact?: ReadonlyArray< - 'ignorePlurals' | 'singleWordSynonym' | 'multiWordsSynonym' - >; - - /** - * Whether rules should be globally enabled. - */ - readonly enableRules?: boolean; - - /** - * Enables contextual rules. - */ - readonly ruleContexts?: readonly string[]; - - /** - * Enables de-duplication or grouping of results. - */ - readonly distinct?: boolean | number; - - /** - * Whether the current query will be taken into account in the Analytics - */ - readonly analytics?: boolean; - - /** - * List of tags to apply to the query in the analytics. - */ - readonly analyticsTags?: readonly string[]; - - /** - * Whether to take into account an index’s synonyms for a particular search. - */ - readonly synonyms?: boolean; - - /** - * Whether to highlight and snippet the original word that matches the synonym or the synonym itself. - */ - readonly replaceSynonymsInHighlight?: boolean; - - /** - * Precision of the proximity ranking criterion. - */ - readonly minProximity?: number; - - /** - * Choose which fields the response will contain. Applies to search and browse queries. - */ - readonly responseFields?: readonly string[]; - - /** - * Maximum number of facet hits to return during a search for facet values. - */ - readonly maxFacetHits?: number; - - /** - * Whether to include or exclude a query from the processing-time percentile computation. - */ - readonly percentileComputation?: boolean; - - /** - * Enable the Click Analytics feature. - */ - readonly clickAnalytics?: boolean; - - /** - * The `personalizationImpact` parameter sets the percentage of the impact that personalization has on ranking records. The - * value must be between 0 and 100 (inclusive). This parameter will not be taken into account if `enablePersonalization` - * is **false**. - */ - readonly personalizationImpact?: number; - - /** - * Enable personalization for the query - */ - readonly enablePersonalization?: boolean; - - /** - * Restricts a given query to look in only a subset of your searchable attributes. - */ - readonly restrictSearchableAttributes?: readonly string[]; - - /** - * Restricts a given query to look in only a subset of your searchable attributes. - */ - readonly sortFacetValuesBy?: 'count' | 'alpha'; - - /** - * Controls whether typo tolerance is enabled and how it is applied. - */ - readonly typoTolerance?: boolean | 'min' | 'strict'; - - /** - * Search for entries around a central geolocation, enabling a geo search within a circular area. - */ - readonly aroundLatLng?: string; - - /** - * Search for entries around a given location automatically computed from the requester’s IP address. - */ - readonly aroundLatLngViaIP?: boolean; - - /** - * Search for entries around a given location automatically computed from the requester’s IP address. - */ - readonly aroundRadius?: number | 'all'; - - /** - * Precision of geo search (in meters), to add grouping by geo location to the ranking formula. - */ - readonly aroundPrecision?: - | number - | ReadonlyArray<{ readonly from: number; readonly value: number }>; - - /** - * Minimum radius (in meters) used for a geo search when aroundRadius is not set. - */ - readonly minimumAroundRadius?: number; - - /** - * Search inside a rectangular area (in geo coordinates). - */ - readonly insideBoundingBox?: ReadonlyArray | string; - - /** - * Search inside a polygon (in geo coordinates). - */ - readonly insidePolygon?: ReadonlyArray; - - /** - * Treats singular, plurals, and other forms of declensions as matching terms. - */ - readonly ignorePlurals?: boolean | readonly string[]; - - /** - * Removes stop (common) words from the query before executing it. - */ - readonly removeStopWords?: boolean | readonly string[]; - - /** - * List of supported languages with their associated language ISO code. - * - * Apply a set of natural language best practices such as ignorePlurals, - * removeStopWords, removeWordsIfNoResults, analyticsTags and ruleContexts. - */ - readonly naturalLanguages?: readonly string[]; - - /** - * When true, each hit in the response contains an additional _rankingInfo object. - */ - readonly getRankingInfo?: boolean; - - /** - * A user identifier. - * Format: alpha numeric string [a-zA-Z0-9_-] - * Length: between 1 and 64 characters. - */ - readonly userToken?: string; - - /** - * Can be to enable or disable A/B tests at query time. - * Engine's default: true - */ - readonly enableABTest?: boolean; - - /** - * Enable word segmentation (also called decompounding) at query time for - * compatible languages. For example, this turns the Dutch query - * "spaanplaatbehang" into "spaan plaat behang" to retrieve more relevant - * results. - */ - readonly decompoundQuery?: boolean; - - /** - * The relevancy threshold to apply to search in a virtual index [0-100]. A Bigger - * value means fewer, but more relevant results, smaller value means more, but - * less relevant results. - */ - readonly relevancyStrictness?: number; - - /** - * Whether this search should use Dynamic Re-Ranking. - * @link https://www.algolia.com/doc/guides/algolia-ai/re-ranking/ - * - * Note: You need to turn on Dynamic Re-Ranking on your index for it to have an effect on - * your search results. You can do this through the Re-Ranking page on the dashboard. - * This parameter is only used to turn off Dynamic Re-Ranking (with false) at search time. - */ - readonly enableReRanking?: boolean; - - /** - * When Dynamic Re-Ranking is enabled, only records that match these filters will be impacted by Dynamic Re-Ranking. - */ - readonly reRankingApplyFilter?: - | string - | readonly string[] - | ReadonlyArray - | null; - - /** - * Sets the languages to be used by language-specific settings and functionalities such as ignorePlurals, removeStopWords, and CJK word-detection. - */ - readonly queryLanguages?: readonly string[]; -}; diff --git a/packages/client-search/src/types/SearchResponse.ts b/packages/client-search/src/types/SearchResponse.ts deleted file mode 100644 index 698fe3245..000000000 --- a/packages/client-search/src/types/SearchResponse.ts +++ /dev/null @@ -1,230 +0,0 @@ -import { Hit, Settings } from '.'; - -export type SearchResponse = { - /** - * The hits returned by the search. - * - * Hits are ordered according to the ranking or sorting of the index being queried. - */ - hits: Array>; - - /** - * Index of the current page (zero-based). - */ - page: number; - - /** - * Number of hits returned (used only with offset) - */ - length?: number; - - /** - * The offset of the first hit to returned. - */ - offset?: number; - - /** - * Number of hits matched by the query. - */ - nbHits: number; - - /** - * Subset of hits selected when relevancyStrictness is applied. - */ - nbSortedHits?: number; - - /** - * Number of pages returned. - * - * Calculation is based on the total number of hits (nbHits) divided by the - * number of hits per page (hitsPerPage), rounded up to the nearest integer. - */ - nbPages: number; - - /** - * Maximum number of hits returned per page. - */ - hitsPerPage: number; - - /** - * Time the server took to process the request, in milliseconds. This does not include network time. - */ - processingTimeMS: number; - - /** - * Whether the nbHits is exhaustive (true) or approximate (false). - * - * An approximation is done when the query takes more than 50ms to be - * processed (this can happen when using complex filters on millions on records). - */ - exhaustiveNbHits: boolean; - - /** - * Whether the facet count is exhaustive (true) or approximate (false). - */ - exhaustiveFacetsCount?: boolean; - - /** - * A mapping of each facet name to the corresponding facet counts. - */ - facets?: Record>; - - /** - * Statistics for numerical facets. - */ - facets_stats?: Record< - string, - { - /** - * The minimum value in the result set. - */ - min: number; - - /** - * The maximum value in the result set. - */ - max: number; - - /** - * The average facet value in the result set. - */ - avg: number; - - /** - * The sum of all values in the result set. - */ - sum: number; - } - >; - - /** - * The query used to search. Accepts every character, and every character entered will be used in the search. - * - * An empty query can be used to fetch all records. - */ - query: string; - - /** - * A markup text indicating which parts of the original query have been removed in order to retrieve a non-empty result set. - */ - queryAfterRemoval?: string; - - /** - * A url-encoded string of all search parameters. - */ - params: string; - - /** - * Unique identifier of the search query, to be sent in Insights methods. This identifier links events back to the search query it represents. - * - * Returned only if clickAnalytics is true. - */ - queryID?: string; - - /** - * Used to return warnings about the query. - */ - message?: string; - - /** - * The computed geo location. - * - * Format: "lat,lng", where the latitude and longitude are expressed as decimal floating point number. - */ - aroundLatLng?: string; - - /** - * The automatically computed radius. - */ - automaticRadius?: string; - - /** - * Actual host name of the server that processed the request. - * - * Our DNS supports automatic failover and load balancing, so this may differ from the host name used in the request. - */ - serverUsed?: string; - - /** - * Index name used for the query. - */ - index?: string; - - /** - * Index name used for the query. In case of AB test, the index targetted isn’t always the index used by the query. - */ - indexUsed?: string; - - /** - * In case of AB test, reports the variant ID used. The variant ID is the position in the array of variants (starting at 1). - */ - abTestVariantID?: number; - - /** - * The query string that will be searched, after normalization. - */ - parsedQuery?: string; - - /** - * Custom user data. - */ - userData?: any; - - /** - * Rules applied to the query. - */ - appliedRules?: Array>; - - /** - * The explanation of the decompounding at query time. - */ - explain?: { - /** - * The explain query match. - */ - match: { - /** - * The explain query match alternatives. - */ - alternatives: Array<{ - /** - * The alternative type. - */ - types: string[]; - - /** - * The list of alternative words. - */ - words: string[]; - - /** - * The number of typos. - */ - typos: number; - - /** - * The offset. - */ - offset: number; - - /** - * The length. - */ - length: number; - }>; - }; - - /** - * Query parameter reporting. Parameters are reported - * as a JSON object with one field per parameter. - */ - params?: Record; - }; - - /** - * The relevancy threshold applied to search in a virtual index. - */ - appliedRelevancyStrictness?: number; - - renderingContent?: Settings['renderingContent']; -}; diff --git a/packages/client-search/src/types/SearchRulesOptions.ts b/packages/client-search/src/types/SearchRulesOptions.ts deleted file mode 100644 index 4ca30fcbc..000000000 --- a/packages/client-search/src/types/SearchRulesOptions.ts +++ /dev/null @@ -1,32 +0,0 @@ -export type SearchRulesOptions = { - /** - * Full text query. - */ - readonly query?: string; - - /** - * When specified, restricts matches to rules with a specific anchoring type. When omitted, all anchoring types may match. - */ - readonly anchoring?: string; - - /** - * Restricts matches to contextual rules with a specific context (exact match). - */ - readonly context?: string; - - /** - * Requested page (zero-based). - */ - readonly page?: number; - - /** - * Maximum number of hits in a page. Minimum is 1, maximum is 1000. - */ - readonly hitsPerPage?: number; - - /** - * When specified, restricts matches to rules with a specific enabled status. - * When absent (default), all rules are retrieved, regardless of their enabled status. - */ - readonly enabled?: boolean; -}; diff --git a/packages/client-search/src/types/SearchSynonymsOptions.ts b/packages/client-search/src/types/SearchSynonymsOptions.ts deleted file mode 100644 index f92c2c8a8..000000000 --- a/packages/client-search/src/types/SearchSynonymsOptions.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type SearchSynonymsOptions = { - /** - * The synonym type. - */ - readonly type?: string; - - /** - * Page to retrieve. - */ - readonly page?: number; - - /** - * Number of hits per page. - */ - readonly hitsPerPage?: number; -}; diff --git a/packages/client-search/src/types/SearchSynonymsResponse.ts b/packages/client-search/src/types/SearchSynonymsResponse.ts deleted file mode 100644 index 7f5578147..000000000 --- a/packages/client-search/src/types/SearchSynonymsResponse.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Synonym } from '.'; - -export type SearchSynonymsResponse = { - /** - * The list of synonyms. - */ - hits: Synonym[]; - - /** - * The number of synonyms on the list. - */ - nbHits: number; -}; diff --git a/packages/client-search/src/types/SearchUserIDsOptions.ts b/packages/client-search/src/types/SearchUserIDsOptions.ts deleted file mode 100644 index bda821de4..000000000 --- a/packages/client-search/src/types/SearchUserIDsOptions.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type SearchUserIDsOptions = { - /** - * If specified, only clusters assigned to this cluster can be returned. - * */ - readonly cluster?: string; - - /** - * Page to fetch. - */ - readonly page?: number; - - /** - * Number of users to return by page. - */ - readonly hitsPerPage?: number; -}; diff --git a/packages/client-search/src/types/SearchUserIDsResponse.ts b/packages/client-search/src/types/SearchUserIDsResponse.ts deleted file mode 100644 index fa96ec904..000000000 --- a/packages/client-search/src/types/SearchUserIDsResponse.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { UserIDResponse } from '.'; - -export type SearchUserIDsResponse<> = { - /** - * List of userID matching the query. - */ - hits: UserIDResponse[]; - - /** - * Current page. - */ - page: number; - - /** - * Number of userIDs matching the query. - */ - nbHits: number; - - /** - * Number of hits retrieved per page. - */ - hitsPerPage: number; - - /** - * Timestamp of the last update of the index. - */ - updatedAt: number; -}; diff --git a/packages/client-search/src/types/SecuredApiKeyRestrictions.ts b/packages/client-search/src/types/SecuredApiKeyRestrictions.ts deleted file mode 100644 index 118a719fb..000000000 --- a/packages/client-search/src/types/SecuredApiKeyRestrictions.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { SearchOptions } from '.'; - -export type SecuredApiKeyRestrictions = SearchOptions & { - /** - * A Unix timestamp used to define the expiration date of the API key. - */ - readonly validUntil?: number; - - /** - * List of index names that can be queried. - */ - readonly restrictIndices?: readonly string[] | string; - - /** - * IPv4 network allowed to use the generated key. This is used for more protection against API key leaking and reuse. - */ - readonly restrictSources?: string; - - /** - * Specify a user identifier. This is often used with rate limits. - */ - readonly userToken?: string; -}; diff --git a/packages/client-search/src/types/SetSettingsOptions.ts b/packages/client-search/src/types/SetSettingsOptions.ts deleted file mode 100644 index a40b4ef71..000000000 --- a/packages/client-search/src/types/SetSettingsOptions.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type SetSettingsOptions = { - /** - * If the saved settings should be forward to replicas. - */ - readonly forwardToReplicas?: boolean; -}; diff --git a/packages/client-search/src/types/SetSettingsResponse.ts b/packages/client-search/src/types/SetSettingsResponse.ts deleted file mode 100644 index 056a07d97..000000000 --- a/packages/client-search/src/types/SetSettingsResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type SetSettingsResponse = { - /** - * The operation task id. May be used to perform a wait task. - */ - taskID: number; - - /** - * When the settings got updated. - */ - updatedAt: number; -}; diff --git a/packages/client-search/src/types/Settings.ts b/packages/client-search/src/types/Settings.ts deleted file mode 100644 index 36ab6cd4d..000000000 --- a/packages/client-search/src/types/Settings.ts +++ /dev/null @@ -1,364 +0,0 @@ -export type Settings = { - /** - * The complete list of attributes that will be used for searching. - */ - readonly searchableAttributes?: readonly string[]; - - /** - * @deprecated Use `searchableAttributes` instead. - */ - readonly attributesToIndex?: readonly string[]; - - /** - * The complete list of attributes that will be used for faceting. - */ - readonly attributesForFaceting?: readonly string[]; - - /** - * List of attributes that cannot be retrieved at query time. - */ - readonly unretrievableAttributes?: readonly string[]; - - /** - * Gives control over which attributes to retrieve and which not to retrieve. - */ - readonly attributesToRetrieve?: readonly string[]; - - /** - * Controls the way results are sorted. - */ - readonly ranking?: readonly string[]; - - /** - * Specifies the custom ranking criterion. - */ - readonly customRanking?: readonly string[]; - - /** - * Creates replicas, exact copies of an index. - */ - readonly replicas?: readonly string[]; - - /** - * @deprecated Use `replicas` instead. - */ - readonly slaves?: readonly string[]; - - /** - * The primary parameter is automatically added to a replica's settings when the replica is created and cannot be modified. - * - * Can not be setted. - */ - readonly primary?: string; - - /** - * Maximum number of facet values to return for each facet during a regular search. - */ - readonly maxValuesPerFacet?: number; - - /** - * Controls how facet values are sorted. - */ - readonly sortFacetValuesBy?: 'count' | 'alpha'; - - /** - * List of attributes to highlight. - */ - readonly attributesToHighlight?: readonly string[]; - - /** - * List of attributes to snippet, with an optional maximum number of words to snippet. - */ - readonly attributesToSnippet?: readonly string[]; - - /** - * The HTML string to insert before the highlighted parts in all highlight and snippet results. - */ - readonly highlightPreTag?: string; - - /** - * The HTML string to insert after the highlighted parts in all highlight and snippet results. - */ - readonly highlightPostTag?: string; - - /** - * String used as an ellipsis indicator when a snippet is truncated. - */ - readonly snippetEllipsisText?: string; - - /** - * Restrict highlighting and snippeting to items that matched the query. - */ - readonly restrictHighlightAndSnippetArrays?: boolean; - - /** - * Set the number of hits per page. - */ - readonly hitsPerPage?: number; - - /** - * Set the maximum number of hits accessible via pagination. - */ - readonly paginationLimitedTo?: number; - - /** - * Minimum number of characters a word in the query string must contain to accept matches with 1 typo. - */ - readonly minWordSizefor1Typo?: number; - - /** - * Minimum number of characters a word in the query string must contain to accept matches with 2 typos. - */ - readonly minWordSizefor2Typos?: number; - - /** - * Controls whether typo tolerance is enabled and how it is applied. - */ - readonly typoTolerance?: string | boolean; - - /** - * hether to allow typos on numbers (“numeric tokens”) in the query string. - */ - readonly allowTyposOnNumericTokens?: boolean; - - /** - * List of attributes on which you want to disable typo tolerance. - */ - readonly disableTypoToleranceOnAttributes?: readonly string[]; - - /** - * List of words on which you want to disable typo tolerance. - */ - readonly disableTypoToleranceOnWords?: readonly string[]; - - /** - * Control which separators are indexed. - */ - readonly separatorsToIndex?: string; - - /** - * Treats singular, plurals, and other forms of declensions as matching terms. - */ - readonly ignorePlurals?: readonly string[] | boolean; - - /** - * Sets the languages to be used by language-specific settings and functionalities such as ignorePlurals, removeStopWords, and CJK word-detection. - */ - readonly queryLanguages?: readonly string[]; - - /** - * A list of language ISO code. - */ - readonly indexLanguages?: readonly string[]; - - /** - * Whether rules should be globally enabled. - */ - readonly enableRules?: boolean; - - /** - * Controls if and how query words are interpreted as prefixes. - */ - readonly queryType?: 'prefixLast' | 'prefixAll' | 'prefixNone'; - - /** - * Selects a strategy to remove words from the query when it doesn’t match any hits. - */ - readonly removeWordsIfNoResults?: 'none' | 'lastWords' | 'firstWords' | 'allOptional'; - - /** - * Enables the advanced query syntax. - */ - readonly advancedSyntax?: boolean; - - /** - * AdvancedSyntaxFeatures can be exactPhrase or excludeWords - */ - readonly advancedSyntaxFeatures?: ReadonlyArray<'exactPhrase' | 'excludeWords'>; - - /** - * A list of words that should be considered as optional when found in the query. - */ - readonly optionalWords?: readonly string[]; - - /** - * List of attributes on which you want to disable prefix matching. - */ - readonly disablePrefixOnAttributes?: readonly string[]; - - /** - * List of attributes on which you want to disable the exact ranking criterion. - */ - readonly disableExactOnAttributes?: readonly string[]; - - /** - * Controls how the exact ranking criterion is computed when the query contains only one word. - */ - readonly exactOnSingleWordQuery?: 'attribute' | 'none' | 'word'; - - /** - * List of alternatives that should be considered an exact match by the exact ranking criterion. - */ - readonly alternativesAsExact?: ReadonlyArray< - 'ignorePlurals' | 'singleWordSynonym' | 'multiWordsSynonym' - >; - - /** - * Removes stop (common) words from the query before executing it. - */ - readonly removeStopWords?: boolean | readonly string[]; - - /** - * List of numeric attributes that can be used as numerical filters. - */ - readonly numericAttributesForFiltering?: readonly string[]; - - /** - * Enables compression of large integer arrays. - */ - readonly allowCompressionOfIntegerArray?: boolean; - - /** - * Name of the de-duplication attribute to be used with the distinct feature. - */ - readonly attributeForDistinct?: string; - - /** - * Enables de-duplication or grouping of results. - */ - readonly distinct?: boolean | number; - - /** - * Whether to highlight and snippet the original word that matches the synonym or the synonym itself. - */ - readonly replaceSynonymsInHighlight?: boolean; - - /** - * Allows proximity to impact which searchable attribute is matched in the attribute ranking stage. - */ - readonly attributeCriteriaComputedByMinProximity?: boolean; - - /** - * Precision of the proximity ranking criterion. - */ - readonly minProximity?: number; - - /** - * Choose which fields the response will contain. Applies to search and browse queries. - */ - readonly responseFields?: readonly string[]; - - /** - * Maximum number of facet hits to return during a search for facet values. - */ - readonly maxFacetHits?: number; - - /** - * List of attributes on which to do a decomposition of camel case words. - */ - readonly camelCaseAttributes?: readonly string[]; - - /** - * Specify on which attributes in your index Algolia should apply word-splitting (“decompounding”) - */ - readonly decompoundedAttributes?: Readonly>; - - /** - * Characters that should not be automatically normalized by the search engine. - */ - - readonly keepDiacriticsOnCharacters?: string; - - /** - * Overrides Algolia's default normalization. - */ - readonly customNormalization?: Readonly>>>; - - /** - * Enable personalization for queries by default - */ - readonly enablePersonalization?: boolean; - - /** - * Custom userData that could be added to the Settings. - */ - readonly userData?: any; - - /** - * Enable word segmentation (also called decompounding) at query time for - * compatible languages. For example, this turns the Dutch query - * "spaanplaatbehang" into "spaan plaat behang" to retrieve more relevant - * results. - */ - readonly decompoundQuery?: boolean; - - /** - * Specify on which attributes in your index Algolia should apply Japanese - * transliteration to make words indexed in Katakana or Kanji searchable in Hiragana. - */ - readonly attributesToTransliterate?: readonly string[]; - - /** - * The relevancy threshold to apply to search in a virtual index [0-100]. A Bigger - * value means fewer, but more relevant results, smaller value means more, but - * less relevant results. - */ - readonly relevancyStrictness?: number; - - /** - * Content defining how the search interface should be rendered. - * This is set via the settings for a default value and can be overridden via rules - */ - readonly renderingContent?: { - /** - * defining how facets should be ordered - */ - readonly facetOrdering?: { - /** - * the ordering of facets (widgets) - */ - readonly facets?: { - /** - * pinned order of facet lists - */ - readonly order?: readonly string[]; - }; - /** - * the ordering of facet values, within an individual list - */ - readonly values?: { - readonly [facet: string]: { - /** - * pinned order of facet values - */ - readonly order?: readonly string[]; - /** - * How to display the remaining items. - * - facet count (descending) - * - alphabetical (ascending) - * - hidden (show only pinned values) - */ - readonly sortRemainingBy?: 'count' | 'alpha' | 'hidden'; - }; - }; - }; - }; - - /** - * Whether this index should use Dynamic Re-Ranking. - * @link https://www.algolia.com/doc/guides/algolia-ai/re-ranking/ - * - * Note: You need to turn on Dynamic Re-Ranking on your index for it to have an effect on - * your search results. You can do this through the Re-Ranking page on the dashboard. - */ - readonly enableReRanking?: boolean; - - /** - * When Dynamic Re-Ranking is enabled, only records that match these filters will be impacted by Dynamic Re-Ranking. - */ - readonly reRankingApplyFilter?: - | string - | readonly string[] - | ReadonlyArray - | null; -}; diff --git a/packages/client-search/src/types/Synonym.ts b/packages/client-search/src/types/Synonym.ts deleted file mode 100644 index d284d3122..000000000 --- a/packages/client-search/src/types/Synonym.ts +++ /dev/null @@ -1,56 +0,0 @@ -export const SynonymEnum: Readonly> = { - Synonym: 'synonym', - OneWaySynonym: 'oneWaySynonym', - AltCorrection1: 'altCorrection1', - AltCorrection2: 'altCorrection2', - Placeholder: 'placeholder', -}; - -export type SynonymType = - | 'synonym' - | 'oneWaySynonym' - | 'altCorrection1' - | 'altCorrection2' - | 'placeholder'; - -export type Synonym = { - /** - * Synonym object ID. - */ - readonly objectID: string; - - /** - * There are 4 synonym types. The parameter can be one of the following value. - */ - readonly type: SynonymType; - - /** - * A list of synonyms. - */ - readonly synonyms?: readonly string[]; - - /** - * Defines the synonym. A word or expression, used as the basis for the array of synonyms. - */ - readonly input?: string; - - /** - * A single word, used as the basis for the below array of corrections. - */ - readonly word?: string; - - /** - * An list of corrections of the word. - */ - readonly corrections?: readonly string[]; - - /** - * A single word, used as the basis for the below list of replacements. - */ - readonly placeholder?: string; - - /** - * An list of replacements of the placeholder. - */ - readonly replacements?: readonly string[]; -}; diff --git a/packages/client-search/src/types/TaskStatusResponse.ts b/packages/client-search/src/types/TaskStatusResponse.ts deleted file mode 100644 index 281b009d9..000000000 --- a/packages/client-search/src/types/TaskStatusResponse.ts +++ /dev/null @@ -1,12 +0,0 @@ -export type TaskStatusResponse = { - /** - * The operation status. When the value is `published` the - * operation is completed. - */ - status: string; - - /** - * If the operation is pending. - */ - pendingTask: boolean; -}; diff --git a/packages/client-search/src/types/UpdateApiKeyOptions.ts b/packages/client-search/src/types/UpdateApiKeyOptions.ts deleted file mode 100644 index c5c3929f4..000000000 --- a/packages/client-search/src/types/UpdateApiKeyOptions.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { ApiKeyACLType } from '.'; - -export type UpdateApiKeyOptions = { - /** - * List of permissions the key contains. - */ - readonly acl?: readonly ApiKeyACLType[]; - - /** - * A Unix timestamp used to define the expiration date of the API key. - */ - readonly validity?: number; - - /** - * Specify the maximum number of hits this API key can retrieve in one call. - * This parameter can be used to protect you from attempts at retrieving your entire index contents by massively querying the index. - */ - readonly maxHitsPerQuery?: number; - - /** - * Specify the maximum number of API calls allowed from an IP address per hour. Each time an API call is performed with this key, a check is performed. - */ - readonly maxQueriesPerIPPerHour?: number; - - /** - * Specify the list of targeted indices. You can target all indices starting with a prefix or ending with a suffix using the ‘*’ character. - */ - readonly indexes?: readonly string[]; - - /** - * Specify the list of referers. You can target all referers starting with a prefix, ending with a suffix using the ‘*’ character. - */ - readonly referers?: readonly string[]; - - /** - * Specify the list of query parameters. You can force the query parameters for a query using the url string format. - */ - readonly queryParameters?: string; - - /** - * Specify a description of the API key. Used for informative purposes only. It has impact on the functionality of the API key. - */ - readonly description?: string; -}; diff --git a/packages/client-search/src/types/UpdateApiKeyResponse.ts b/packages/client-search/src/types/UpdateApiKeyResponse.ts deleted file mode 100644 index b34eaa51c..000000000 --- a/packages/client-search/src/types/UpdateApiKeyResponse.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type UpdateApiKeyResponse = { - /** - * The api key. - */ - key: string; - - /** - * Date of update - */ - updatedAt: string; -}; diff --git a/packages/client-search/src/types/UserIDResponse.ts b/packages/client-search/src/types/UserIDResponse.ts deleted file mode 100644 index a69c2e0cd..000000000 --- a/packages/client-search/src/types/UserIDResponse.ts +++ /dev/null @@ -1,21 +0,0 @@ -export type UserIDResponse = { - /** - * userID of the user. - */ - userID: string; - - /** - * Cluster on which the user is assigned - */ - clusterName: string; - - /** - * Number of records belonging to the user. - */ - nbRecords: number; - - /** - * Data size used by the user. - */ - dataSize: number; -}; diff --git a/packages/client-search/src/types/index.ts b/packages/client-search/src/types/index.ts deleted file mode 100644 index 1087df4f3..000000000 --- a/packages/client-search/src/types/index.ts +++ /dev/null @@ -1,100 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './AddApiKeyOptions'; -export * from './AddApiKeyResponse'; -export * from './ApiKeyType'; -export * from './AssignUserIDResponse'; -export * from './AssignUserIDsResponse'; -export * from './BatchActionType'; -export * from './BatchRequest'; -export * from './BatchResponse'; -export * from './BrowseOptions'; -export * from './BrowseRequestData'; -export * from './BrowseResponse'; -export * from './ChunkOptions'; -export * from './ChunkedBatchResponse'; -export * from './ClearRulesOptions'; -export * from './ClearSynonymsOptions'; -export * from './Cluster'; -export * from './CopyIndexOptions'; -export * from './CreateIndex'; -export * from './DeleteApiKeyResponse'; -export * from './DeleteByFiltersOptions'; -export * from './DeleteResponse'; -export * from './DeleteSynonymOptions'; -export * from './DictionaryEntriesOptions'; -export * from './DictionaryEntriesResponse'; -export * from './DictionaryEntry'; -export * from './DictionaryName'; -export * from './DictionarySettings'; -export * from './FacetHit'; -export * from './FindAnswersOptions'; -export * from './FindAnswersResponse'; -export * from './FindObjectOptions'; -export * from './FindObjectResponse'; -export * from './GetApiKeyResponse'; -export * from './GetDictionarySettingsResponse'; -export * from './GetLogsOptions'; -export * from './GetLogsResponse'; -export * from './GetObjectOptions'; -export * from './GetObjectsOptions'; -export * from './GetObjectsResponse'; -export * from './GetTopUserIDsResponse'; -export * from './HasPendingMappingsOptions'; -export * from './HasPendingMappingsResponse'; -export * from './Hit'; -export * from './IndexOperationResponse'; -export * from './Indice'; -export * from './ListApiKeysResponse'; -export * from './ListClustersResponse'; -export * from './ListIndicesResponse'; -export * from './ListUserIDsOptions'; -export * from './ListUserIDsResponse'; -export * from './Log'; -export * from './MultipleBatchRequest'; -export * from './MultipleBatchResponse'; -export * from './MultipleGetObject'; -export * from './MultipleGetObjectsResponse'; -export * from './MultipleQueriesOptions'; -export * from './MultipleQueriesQuery'; -export * from './MultipleQueriesResponse'; -export * from './ObjectWithObjectID'; -export * from './PartialUpdateObjectResponse'; -export * from './PartialUpdateObjectsOptions'; -export * from './RemoveUserIDResponse'; -export * from './ReplaceAllObjectsOptions'; -export * from './RequireAtLeastOne'; -export * from './RestoreApiKeyResponse'; -export * from './Rule'; -export * from './SaveObjectResponse'; -export * from './SaveObjectsOptions'; -export * from './SaveRuleResponse'; -export * from './SaveRulesOptions'; -export * from './SaveRulesResponse'; -export * from './SaveSynonymResponse'; -export * from './SaveSynonymsOptions'; -export * from './SaveSynonymsResponse'; -export * from './SearchClient'; -export * from './SearchClientOptions'; -export * from './SearchDictionaryEntriesResponse'; -export * from './SearchForFacetValuesQueryParams'; -export * from './SearchForFacetValuesResponse'; -export * from './SearchIndex'; -export * from './SearchOptions'; -export * from './SearchResponse'; -export * from './SearchRulesOptions'; -export * from './SearchSynonymsOptions'; -export * from './SearchSynonymsResponse'; -export * from './SearchUserIDsOptions'; -export * from './SearchUserIDsResponse'; -export * from './SecuredApiKeyRestrictions'; -export * from './SetSettingsOptions'; -export * from './SetSettingsResponse'; -export * from './Settings'; -export * from './Synonym'; -export * from './TaskStatusResponse'; -export * from './UpdateApiKeyOptions'; -export * from './UpdateApiKeyResponse'; -export * from './UserIDResponse'; diff --git a/packages/client-search/tsconfig.json b/packages/client-search/tsconfig.json new file mode 100644 index 000000000..444e8bb64 --- /dev/null +++ b/packages/client-search/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src", "model", "builds"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/client-search/tsup.config.ts b/packages/client-search/tsup.config.ts new file mode 100644 index 000000000..0ab00eac5 --- /dev/null +++ b/packages/client-search/tsup.config.ts @@ -0,0 +1,67 @@ +import type { Options } from 'tsup'; +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions, getDependencies } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +const nodeOptions: Options = { + ...getBaseNodeOptions(pkg, __dirname), + dts: { entry: { node: 'builds/node.ts' } }, + entry: ['builds/node.ts', 'src/*.ts'], +}; + +const nodeConfigs: Options[] = [ + { + ...nodeOptions, + format: 'cjs', + name: `node ${pkg.name} cjs`, + }, + { + ...nodeOptions, + format: 'esm', + name: `node ${pkg.name} esm`, + }, + { + ...nodeOptions, + format: 'esm', + name: `fetch ${pkg.name} esm`, + dts: { entry: { fetch: 'builds/fetch.ts' } }, + external: getDependencies(pkg, 'fetch'), + entry: ['builds/fetch.ts', 'src/*.ts'], + }, + { + ...nodeOptions, + format: 'esm', + name: `worker ${pkg.name} esm`, + dts: { entry: { worker: 'builds/worker.ts' } }, + external: getDependencies(pkg, 'worker'), + entry: ['builds/worker.ts', 'src/*.ts'], + }, +]; + +const browserOptions: Options = { + ...getBaseBrowserOptions(pkg, __dirname), + globalName: 'searchClient', +}; + +const browserConfigs: Options[] = [ + { + ...browserOptions, + minify: false, + name: `browser ${pkg.name} esm`, + dts: { entry: { browser: 'builds/browser.ts' } }, + entry: ['builds/browser.ts', 'src/*.ts'], + }, + { + ...browserOptions, + dts: false, + minify: true, + name: `browser ${pkg.name} min esm`, + entry: { 'builds/browser.min': 'builds/browser.ts' }, + external: [], + noExternal: getDependencies(pkg, 'xhr'), + }, +]; + +export default defineConfig([...nodeConfigs, ...browserConfigs]); diff --git a/packages/composition/LICENSE b/packages/composition/LICENSE new file mode 100644 index 000000000..fddf416f9 --- /dev/null +++ b/packages/composition/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-Present Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/composition/README.md b/packages/composition/README.md new file mode 100644 index 000000000..4b6917b89 --- /dev/null +++ b/packages/composition/README.md @@ -0,0 +1,77 @@ +

+ + Algolia for JavaScript + + +

The perfect starting point to integrate Algolia within your JavaScript project

+ +

+ NPM version + NPM downloads + jsDelivr Downloads + License +

+

+ +

+ Documentation • + InstantSearch • + Community Forum • + Stack Overflow • + Report a bug • + FAQ • + Support +

+ +## ✨ Features + +- Thin & **minimal low-level HTTP client** to interact with Algolia's API +- Works both on the **browser** and **node.js** +- **UMD and ESM compatible**, you can use it with any module loader +- Built with TypeScript + +## 💡 Getting Started + +> [!TIP] +> This API client is already a dependency of [the algoliasearch client](https://www.npmjs.com/package/algoliasearch), you don't need to manually install `@algolia/composition` if you already have `algoliasearch` installed. + +To get started, you first need to install @algolia/composition (or any other available API client package). +All of our clients comes with type definition, and are available for both browser and node environments. + +### With a package manager + +```bash +yarn add @algolia/composition@0.0.1-beta.12 +# or +npm install @algolia/composition@0.0.1-beta.12 +# or +pnpm add @algolia/composition@0.0.1-beta.12 +``` + +### Without a package manager + +Add the following JavaScript snippet to the of your website: + +```html + +``` + +### Usage + +You can now import the Algolia API client in your project and play with it. + +```js +import { compositionClient } from '@algolia/composition'; + +const client = compositionClient('YOUR_APP_ID', 'YOUR_API_KEY'); +``` + +For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/javascript/v5/methods/composition/)**. + +## ❓ Troubleshooting + +Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/libraries/javascript/v5/) where you will find answers for the most common issues and gotchas with the client. You can also open [a GitHub issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=&projects=&template=Bug_report.md) + +## 📄 License + +The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). diff --git a/packages/composition/builds/browser.ts b/packages/composition/builds/browser.ts new file mode 100644 index 000000000..8fd653013 --- /dev/null +++ b/packages/composition/builds/browser.ts @@ -0,0 +1,50 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import { createXhrRequester } from '@algolia/requester-browser-xhr'; + +import { + createBrowserLocalStorageCache, + createFallbackableCache, + createMemoryCache, + createNullLogger, +} from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { apiClientVersion, createCompositionClient } from '../src/compositionClient'; + +export { apiClientVersion } from '../src/compositionClient'; + +export * from '../model'; + +export function compositionClient(appId: string, apiKey: string, options?: ClientOptions): CompositionClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return createCompositionClient({ + appId, + apiKey, + timeouts: { + connect: 1000, + read: 2000, + write: 30000, + }, + logger: createNullLogger(), + requester: createXhrRequester(), + algoliaAgents: [{ segment: 'Browser' }], + authMode: 'WithinHeaders', + responsesCache: createMemoryCache(), + requestsCache: createMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], + }), + ...options, + }); +} + +export type CompositionClient = ReturnType; diff --git a/packages/composition/builds/fetch.ts b/packages/composition/builds/fetch.ts new file mode 100644 index 000000000..8934cdc33 --- /dev/null +++ b/packages/composition/builds/fetch.ts @@ -0,0 +1,43 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type CompositionClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createCompositionClient } from '../src/compositionClient'; + +export { apiClientVersion } from '../src/compositionClient'; + +export * from '../model'; + +export function compositionClient(appId: string, apiKey: string, options?: ClientOptions): CompositionClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createCompositionClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Fetch' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/composition/builds/node.ts b/packages/composition/builds/node.ts new file mode 100644 index 000000000..26d2ad6d1 --- /dev/null +++ b/packages/composition/builds/node.ts @@ -0,0 +1,44 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type CompositionClient = ReturnType; + +import { createHttpRequester } from '@algolia/requester-node-http'; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createCompositionClient } from '../src/compositionClient'; + +export { apiClientVersion } from '../src/compositionClient'; + +export * from '../model'; + +export function compositionClient(appId: string, apiKey: string, options?: ClientOptions): CompositionClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createCompositionClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createHttpRequester(), + algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/composition/builds/worker.ts b/packages/composition/builds/worker.ts new file mode 100644 index 000000000..b47e7b73c --- /dev/null +++ b/packages/composition/builds/worker.ts @@ -0,0 +1,43 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type CompositionClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createCompositionClient } from '../src/compositionClient'; + +export { apiClientVersion } from '../src/compositionClient'; + +export * from '../model'; + +export function compositionClient(appId: string, apiKey: string, options?: ClientOptions): CompositionClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createCompositionClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Worker' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/composition/index.d.ts b/packages/composition/index.d.ts new file mode 100644 index 000000000..e81a1cd3e --- /dev/null +++ b/packages/composition/index.d.ts @@ -0,0 +1 @@ +export * from './dist/node'; diff --git a/packages/composition/index.js b/packages/composition/index.js new file mode 100644 index 000000000..21e26aad3 --- /dev/null +++ b/packages/composition/index.js @@ -0,0 +1 @@ +module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/composition/model/aroundPrecision.ts b/packages/composition/model/aroundPrecision.ts new file mode 100644 index 000000000..79ff0cd59 --- /dev/null +++ b/packages/composition/model/aroundPrecision.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Range } from './range'; + +/** + * Precision of a coordinate-based search in meters to group results with similar distances. The Geo ranking criterion considers all matches within the same range of distances to be equal. + */ +export type AroundPrecision = number | Array; diff --git a/packages/composition/model/aroundRadius.ts b/packages/composition/model/aroundRadius.ts new file mode 100644 index 000000000..8198f1e75 --- /dev/null +++ b/packages/composition/model/aroundRadius.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AroundRadiusAll } from './aroundRadiusAll'; + +/** + * Maximum radius for a search around a central location. This parameter works in combination with the `aroundLatLng` and `aroundLatLngViaIP` parameters. By default, the search radius is determined automatically from the density of hits around the central location. The search radius is small if there are many hits close to the central coordinates. + */ +export type AroundRadius = number | AroundRadiusAll; diff --git a/packages/composition/model/aroundRadiusAll.ts b/packages/composition/model/aroundRadiusAll.ts new file mode 100644 index 000000000..e5f107060 --- /dev/null +++ b/packages/composition/model/aroundRadiusAll.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Return all records with a valid `_geoloc` attribute. Don\'t filter by distance. + */ +export type AroundRadiusAll = 'all'; diff --git a/packages/composition/model/banner.ts b/packages/composition/model/banner.ts new file mode 100644 index 000000000..793feec15 --- /dev/null +++ b/packages/composition/model/banner.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BannerImage } from './bannerImage'; +import type { BannerLink } from './bannerLink'; + +/** + * Banner with image and link to redirect users. + */ +export type Banner = { + image?: BannerImage; + + link?: BannerLink; +}; diff --git a/packages/composition/model/bannerImage.ts b/packages/composition/model/bannerImage.ts new file mode 100644 index 000000000..a0988168e --- /dev/null +++ b/packages/composition/model/bannerImage.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BannerImageUrl } from './bannerImageUrl'; + +/** + * Image to show inside a banner. + */ +export type BannerImage = { + urls?: Array; + + title?: string; +}; diff --git a/packages/composition/model/bannerImageUrl.ts b/packages/composition/model/bannerImageUrl.ts new file mode 100644 index 000000000..6be2b3efd --- /dev/null +++ b/packages/composition/model/bannerImageUrl.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * URL for an image to show inside a banner. + */ +export type BannerImageUrl = { + url?: string; +}; diff --git a/packages/composition/model/bannerLink.ts b/packages/composition/model/bannerLink.ts new file mode 100644 index 000000000..52800a208 --- /dev/null +++ b/packages/composition/model/bannerLink.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Link for a banner defined in the Merchandising Studio. + */ +export type BannerLink = { + url?: string; +}; diff --git a/packages/composition/model/baseSearchResponse.ts b/packages/composition/model/baseSearchResponse.ts new file mode 100644 index 000000000..066ecc865 --- /dev/null +++ b/packages/composition/model/baseSearchResponse.ts @@ -0,0 +1,129 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Exhaustive } from './exhaustive'; +import type { FacetStats } from './facetStats'; +import type { Redirect } from './redirect'; +import type { RenderingContent } from './renderingContent'; + +export type BaseSearchResponse = Record & { + /** + * A/B test ID. This is only included in the response for indices that are part of an A/B test. + */ + abTestID?: number; + + /** + * Variant ID. This is only included in the response for indices that are part of an A/B test. + */ + abTestVariantID?: number; + + /** + * Computed geographical location. + */ + aroundLatLng?: string; + + /** + * Distance from a central coordinate provided by `aroundLatLng`. + */ + automaticRadius?: string; + + exhaustive?: Exhaustive; + + /** + * Rules applied to the query. + */ + appliedRules?: Array>; + + /** + * See the `facetsCount` field of the `exhaustive` object in the response. + */ + exhaustiveFacetsCount?: boolean; + + /** + * See the `nbHits` field of the `exhaustive` object in the response. + */ + exhaustiveNbHits?: boolean; + + /** + * See the `typo` field of the `exhaustive` object in the response. + */ + exhaustiveTypo?: boolean; + + /** + * Facet counts. + */ + facets?: { [key: string]: { [key: string]: number } }; + + /** + * Statistics for numerical facets. + */ + facets_stats?: { [key: string]: FacetStats }; + + /** + * Index name used for the query. + */ + index?: string; + + /** + * Index name used for the query. During A/B testing, the targeted index isn\'t always the index used by the query. + */ + indexUsed?: string; + + /** + * Warnings about the query. + */ + message?: string; + + /** + * Number of hits selected and sorted by the relevant sort algorithm. + */ + nbSortedHits?: number; + + /** + * Post-[normalization](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/#what-does-normalization-mean) query string that will be searched. + */ + parsedQuery?: string; + + /** + * Time the server took to process the request, in milliseconds. + */ + processingTimeMS: number; + + /** + * Experimental. List of processing steps and their times, in milliseconds. You can use this list to investigate performance issues. + */ + processingTimingsMS?: Record; + + /** + * Markup text indicating which parts of the original query have been removed to retrieve a non-empty result set. + */ + queryAfterRemoval?: string; + + redirect?: Redirect; + + renderingContent?: RenderingContent; + + /** + * Time the server took to process the request, in milliseconds. + */ + serverTimeMS?: number; + + /** + * Host name of the server that processed the request. + */ + serverUsed?: string; + + /** + * An object with custom data. You can store up to 32kB as custom data. + */ + userData?: any | null; + + /** + * Unique identifier for the query. This is used for [click analytics](https://www.algolia.com/doc/guides/analytics/click-analytics/). + */ + queryID?: string; + + /** + * Whether automatic events collection is enabled for the application. + */ + _automaticInsights?: boolean; +}; diff --git a/packages/composition/model/clientMethodProps.ts b/packages/composition/model/clientMethodProps.ts new file mode 100644 index 000000000..1811f4176 --- /dev/null +++ b/packages/composition/model/clientMethodProps.ts @@ -0,0 +1,30 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RequestBody } from '../model/requestBody'; +import type { SearchForFacetValuesRequest } from '../model/searchForFacetValuesRequest'; + +/** + * Properties for the `search` method. + */ +export type SearchProps = { + /** + * Unique Composition ObjectID. + */ + compositionID: string; + requestBody: RequestBody; +}; + +/** + * Properties for the `searchForFacetValues` method. + */ +export type SearchForFacetValuesProps = { + /** + * Unique Composition ObjectID. + */ + compositionID: string; + /** + * Facet attribute in which to search for values. This attribute must be included in the `attributesForFaceting` index setting with the `searchable()` modifier. + */ + facetName: string; + searchForFacetValuesRequest?: SearchForFacetValuesRequest; +}; diff --git a/packages/composition/model/compositionBaseSearchResponse.ts b/packages/composition/model/compositionBaseSearchResponse.ts new file mode 100644 index 000000000..93ff89037 --- /dev/null +++ b/packages/composition/model/compositionBaseSearchResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionsSearchResponse } from './compositionsSearchResponse'; + +export type CompositionBaseSearchResponse = Record & { + compositions?: CompositionsSearchResponse; +}; diff --git a/packages/composition/model/compositionIdRankingInfo.ts b/packages/composition/model/compositionIdRankingInfo.ts new file mode 100644 index 000000000..76095fe08 --- /dev/null +++ b/packages/composition/model/compositionIdRankingInfo.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type CompositionIdRankingInfo = { + index: string; + + injectedItemKey: string; +}; diff --git a/packages/composition/model/compositionRankingInfo.ts b/packages/composition/model/compositionRankingInfo.ts new file mode 100644 index 000000000..8a76969a4 --- /dev/null +++ b/packages/composition/model/compositionRankingInfo.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionIdRankingInfo } from './compositionIdRankingInfo'; + +export type CompositionRankingInfo = { + composed?: { [key: string]: CompositionIdRankingInfo }; +}; diff --git a/packages/composition/model/compositionRunAppliedRules.ts b/packages/composition/model/compositionRunAppliedRules.ts new file mode 100644 index 000000000..6a101f1d1 --- /dev/null +++ b/packages/composition/model/compositionRunAppliedRules.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type CompositionRunAppliedRules = { + /** + * Unique record identifier. + */ + objectID: string; +}; diff --git a/packages/composition/model/compositionRunSearchResponse.ts b/packages/composition/model/compositionRunSearchResponse.ts new file mode 100644 index 000000000..477ffd2d9 --- /dev/null +++ b/packages/composition/model/compositionRunSearchResponse.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionRunAppliedRules } from './compositionRunAppliedRules'; + +export type CompositionRunSearchResponse = Record & { + /** + * Unique record identifier. + */ + objectID: string; + + appliedRules?: Array; +}; diff --git a/packages/composition/model/compositionsSearchResponse.ts b/packages/composition/model/compositionsSearchResponse.ts new file mode 100644 index 000000000..1db7f3852 --- /dev/null +++ b/packages/composition/model/compositionsSearchResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionRunSearchResponse } from './compositionRunSearchResponse'; + +export type CompositionsSearchResponse = Record & { + run: Array; +}; diff --git a/packages/composition/model/errorBase.ts b/packages/composition/model/errorBase.ts new file mode 100644 index 000000000..960e509cb --- /dev/null +++ b/packages/composition/model/errorBase.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Error. + */ +export type ErrorBase = Record & { + message?: string; +}; diff --git a/packages/composition/model/exhaustive.ts b/packages/composition/model/exhaustive.ts new file mode 100644 index 000000000..6e578adf1 --- /dev/null +++ b/packages/composition/model/exhaustive.ts @@ -0,0 +1,31 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Whether certain properties of the search response are calculated exhaustive (exact) or approximated. + */ +export type Exhaustive = { + /** + * Whether the facet count is exhaustive (`true`) or approximate (`false`). See the [related discussion](https://support.algolia.com/hc/en-us/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate-). + */ + facetsCount?: boolean; + + /** + * The value is `false` if not all facet values are retrieved. + */ + facetValues?: boolean; + + /** + * Whether the `nbHits` is exhaustive (`true`) or approximate (`false`). When the query takes more than 50ms to be processed, the engine makes an approximation. This can happen when using complex filters on millions of records, when typo-tolerance was not exhaustive, or when enough hits have been retrieved (for example, after the engine finds 10,000 exact matches). `nbHits` is reported as non-exhaustive whenever an approximation is made, even if the approximation didn’t, in the end, impact the exhaustivity of the query. + */ + nbHits?: boolean; + + /** + * Rules matching exhaustivity. The value is `false` if rules were enable for this query, and could not be fully processed due a timeout. This is generally caused by the number of alternatives (such as typos) which is too large. + */ + rulesMatch?: boolean; + + /** + * Whether the typo search was exhaustive (`true`) or approximate (`false`). An approximation is done when the typo search query part takes more than 10% of the query budget (ie. 5ms by default) to be processed (this can happen when a lot of typo alternatives exist for the query). This field will not be included when typo-tolerance is entirely disabled. + */ + typo?: boolean; +}; diff --git a/packages/composition/model/facetFilters.ts b/packages/composition/model/facetFilters.ts new file mode 100644 index 000000000..0dc5e336e --- /dev/null +++ b/packages/composition/model/facetFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter the search by facet values, so that only records with the same facet values are retrieved. **Prefer using the `filters` parameter, which supports all filter types and combinations with boolean operators.** - `[filter1, filter2]` is interpreted as `filter1 AND filter2`. - `[[filter1, filter2], filter3]` is interpreted as `filter1 OR filter2 AND filter3`. - `facet:-value` is interpreted as `NOT facet:value`. While it\'s best to avoid attributes that start with a `-`, you can still filter them by escaping with a backslash: `facet:\\-value`. + */ +export type FacetFilters = Array | string; diff --git a/packages/composition/model/facetHits.ts b/packages/composition/model/facetHits.ts new file mode 100644 index 000000000..bd205a61e --- /dev/null +++ b/packages/composition/model/facetHits.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type FacetHits = { + /** + * Facet value. + */ + value: string; + + /** + * Highlighted attribute value, including HTML tags. + */ + highlighted: string; + + /** + * Number of records with this facet value. [The count may be approximated](https://support.algolia.com/hc/en-us/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate-). + */ + count: number; +}; diff --git a/packages/composition/model/facetOrdering.ts b/packages/composition/model/facetOrdering.ts new file mode 100644 index 000000000..18b84be27 --- /dev/null +++ b/packages/composition/model/facetOrdering.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Facets } from './facets'; +import type { Value } from './value'; + +/** + * Order of facet names and facet values in your UI. + */ +export type FacetOrdering = { + facets?: Facets; + + /** + * Order of facet values. One object for each facet. + */ + values?: { [key: string]: Value }; +}; diff --git a/packages/composition/model/facetStats.ts b/packages/composition/model/facetStats.ts new file mode 100644 index 000000000..f8bb276a8 --- /dev/null +++ b/packages/composition/model/facetStats.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type FacetStats = { + /** + * Minimum value in the results. + */ + min?: number; + + /** + * Maximum value in the results. + */ + max?: number; + + /** + * Average facet value in the results. + */ + avg?: number; + + /** + * Sum of all values in the results. + */ + sum?: number; +}; diff --git a/packages/composition/model/facets.ts b/packages/composition/model/facets.ts new file mode 100644 index 000000000..d99f83ff2 --- /dev/null +++ b/packages/composition/model/facets.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Order of facet names. + */ +export type Facets = { + /** + * Explicit order of facets or facet values. This setting lets you always show specific facets or facet values at the top of the list. + */ + order?: Array; +}; diff --git a/packages/composition/model/highlightResult.ts b/packages/composition/model/highlightResult.ts new file mode 100644 index 000000000..102271a17 --- /dev/null +++ b/packages/composition/model/highlightResult.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { HighlightResultOption } from './highlightResultOption'; + +export type HighlightResult = HighlightResultOption | { [key: string]: HighlightResult } | Array; diff --git a/packages/composition/model/highlightResultOption.ts b/packages/composition/model/highlightResultOption.ts new file mode 100644 index 000000000..47ab0b748 --- /dev/null +++ b/packages/composition/model/highlightResultOption.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchLevel } from './matchLevel'; + +/** + * Surround words that match the query with HTML tags for highlighting. + */ +export type HighlightResultOption = { + /** + * Highlighted attribute value, including HTML tags. + */ + value: string; + + matchLevel: MatchLevel; + + /** + * List of matched words from the search query. + */ + matchedWords: Array; + + /** + * Whether the entire attribute value is highlighted. + */ + fullyHighlighted?: boolean; +}; diff --git a/packages/composition/model/hit.ts b/packages/composition/model/hit.ts new file mode 100644 index 000000000..a7d56b6c2 --- /dev/null +++ b/packages/composition/model/hit.ts @@ -0,0 +1,29 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { HighlightResult } from './highlightResult'; +import type { HitRankingInfo } from './hitRankingInfo'; +import type { SnippetResult } from './snippetResult'; + +/** + * Search result. A hit is a record from your index, augmented with special attributes for highlighting, snippeting, and ranking. + */ +export type Hit> = T & { + /** + * Unique record identifier. + */ + objectID: string; + + /** + * Surround words that match the query with HTML tags for highlighting. + */ + _highlightResult?: { [key: string]: HighlightResult }; + + /** + * Snippets that show the context around a matching search query. + */ + _snippetResult?: { [key: string]: SnippetResult }; + + _rankingInfo?: HitRankingInfo; + + _distinctSeqID?: number; +}; diff --git a/packages/composition/model/hitRankingInfo.ts b/packages/composition/model/hitRankingInfo.ts new file mode 100644 index 000000000..7f1379c9a --- /dev/null +++ b/packages/composition/model/hitRankingInfo.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionRankingInfo } from './compositionRankingInfo'; +import type { RankingInfo } from './rankingInfo'; + +export type HitRankingInfo = RankingInfo & CompositionRankingInfo; diff --git a/packages/composition/model/index.ts b/packages/composition/model/index.ts new file mode 100644 index 000000000..d040613e2 --- /dev/null +++ b/packages/composition/model/index.ts @@ -0,0 +1,62 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export * from './aroundPrecision'; +export * from './aroundRadius'; +export * from './aroundRadiusAll'; +export * from './banner'; +export * from './bannerImage'; +export * from './bannerImageUrl'; +export * from './bannerLink'; +export * from './baseSearchResponse'; +export * from './clientMethodProps'; +export * from './compositionBaseSearchResponse'; +export * from './compositionIdRankingInfo'; +export * from './compositionRankingInfo'; +export * from './compositionRunAppliedRules'; +export * from './compositionRunSearchResponse'; +export * from './compositionsSearchResponse'; +export * from './errorBase'; +export * from './exhaustive'; +export * from './facetFilters'; +export * from './facetHits'; +export * from './facetOrdering'; +export * from './facets'; +export * from './facetStats'; +export * from './highlightResult'; +export * from './highlightResultOption'; +export * from './hit'; +export * from './hitRankingInfo'; +export * from './insideBoundingBox'; +export * from './matchedGeoLocation'; +export * from './matchLevel'; +export * from './numericFilters'; +export * from './optionalFilters'; +export * from './params'; +export * from './personalization'; +export * from './range'; +export * from './rankingInfo'; +export * from './redirect'; +export * from './redirectRuleIndexData'; +export * from './redirectRuleIndexMetadata'; +export * from './redirectURL'; +export * from './renderingContent'; +export * from './requestBody'; +export * from './resultsCompositionInfoResponse'; +export * from './resultsCompositionsResponse'; +export * from './resultsInjectedItemAppliedRulesInfoResponse'; +export * from './resultsInjectedItemInfoResponse'; +export * from './searchForFacetValuesParams'; +export * from './searchForFacetValuesRequest'; +export * from './searchForFacetValuesResponse'; +export * from './searchForFacetValuesResults'; +export * from './searchHits'; +export * from './searchPagination'; +export * from './searchResponse'; +export * from './searchResults'; +export * from './searchResultsItem'; +export * from './snippetResult'; +export * from './snippetResultOption'; +export * from './sortRemainingBy'; +export * from './supportedLanguage'; +export * from './value'; +export * from './widgets'; diff --git a/packages/composition/model/insideBoundingBox.ts b/packages/composition/model/insideBoundingBox.ts new file mode 100644 index 000000000..8a498532f --- /dev/null +++ b/packages/composition/model/insideBoundingBox.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type InsideBoundingBox = string | Array>; diff --git a/packages/composition/model/matchLevel.ts b/packages/composition/model/matchLevel.ts new file mode 100644 index 000000000..2cb9f4d21 --- /dev/null +++ b/packages/composition/model/matchLevel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Whether the whole query string matches or only a part. + */ +export type MatchLevel = 'none' | 'partial' | 'full'; diff --git a/packages/composition/model/matchedGeoLocation.ts b/packages/composition/model/matchedGeoLocation.ts new file mode 100644 index 000000000..018634191 --- /dev/null +++ b/packages/composition/model/matchedGeoLocation.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type MatchedGeoLocation = { + /** + * Latitude of the matched location. + */ + lat?: number; + + /** + * Longitude of the matched location. + */ + lng?: number; + + /** + * Distance between the matched location and the search location (in meters). + */ + distance?: number; +}; diff --git a/packages/composition/model/numericFilters.ts b/packages/composition/model/numericFilters.ts new file mode 100644 index 000000000..6129dc5d3 --- /dev/null +++ b/packages/composition/model/numericFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter by numeric facets. **Prefer using the `filters` parameter, which supports all filter types and combinations with boolean operators.** You can use numeric comparison operators: `<`, `<=`, `=`, `!=`, `>`, `>=`. Comparisons are precise up to 3 decimals. You can also provide ranges: `facet: TO `. The range includes the lower and upper boundaries. The same combination rules apply as for `facetFilters`. + */ +export type NumericFilters = Array | string; diff --git a/packages/composition/model/optionalFilters.ts b/packages/composition/model/optionalFilters.ts new file mode 100644 index 000000000..677b9239c --- /dev/null +++ b/packages/composition/model/optionalFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filters to promote or demote records in the search results. Optional filters work like facet filters, but they don\'t exclude records from the search results. Records that match the optional filter rank before records that don\'t match. If you\'re using a negative filter `facet:-value`, matching records rank after records that don\'t match. - Optional filters don\'t work on virtual replicas. - Optional filters are applied _after_ sort-by attributes. - Optional filters are applied _before_ custom ranking attributes (in the default [ranking](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/)). - Optional filters don\'t work with numeric attributes. + */ +export type OptionalFilters = Array | string; diff --git a/packages/composition/model/params.ts b/packages/composition/model/params.ts new file mode 100644 index 000000000..013907f5c --- /dev/null +++ b/packages/composition/model/params.ts @@ -0,0 +1,120 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AroundPrecision } from './aroundPrecision'; +import type { AroundRadius } from './aroundRadius'; +import type { FacetFilters } from './facetFilters'; +import type { InsideBoundingBox } from './insideBoundingBox'; +import type { NumericFilters } from './numericFilters'; +import type { OptionalFilters } from './optionalFilters'; +import type { SupportedLanguage } from './supportedLanguage'; + +export type Params = { + /** + * Search query. + */ + query?: string; + + /** + * Filter expression to only include items that match the filter criteria in the response. You can use these filter expressions: - **Numeric filters.** ` `, where `` is one of `<`, `<=`, `=`, `!=`, `>`, `>=`. - **Ranges.** `: TO ` where `` and `` are the lower and upper limits of the range (inclusive). - **Facet filters.** `:` where `` is a facet attribute (case-sensitive) and `` a facet value. - **Tag filters.** `_tags:` or just `` (case-sensitive). - **Boolean filters.** `: true | false`. You can combine filters with `AND`, `OR`, and `NOT` operators with the following restrictions: - You can only combine filters of the same type with `OR`. **Not supported:** `facet:value OR num > 3`. - You can\'t use `NOT` with combinations of filters. **Not supported:** `NOT(facet:value OR facet:value)` - You can\'t combine conjunctions (`AND`) with `OR`. **Not supported:** `facet:value OR (facet:value AND facet:value)` Use quotes around your filters, if the facet attribute name or facet value has spaces, keywords (`OR`, `AND`, `NOT`), or quotes. If a facet attribute is an array, the filter matches if it matches at least one element of the array. For more information, see [Filters](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/). + */ + filters?: string; + + /** + * Page of search results to retrieve. + */ + page?: number; + + /** + * Whether the search response should include detailed ranking information. + */ + getRankingInfo?: boolean; + + relevancyStrictness?: number; + + facetFilters?: FacetFilters; + + optionalFilters?: OptionalFilters; + + numericFilters?: NumericFilters; + + /** + * Number of hits per page. + */ + hitsPerPage?: number; + + /** + * Coordinates for the center of a circle, expressed as a comma-separated string of latitude and longitude. Only records included within a circle around this central location are included in the results. The radius of the circle is determined by the `aroundRadius` and `minimumAroundRadius` settings. This parameter is ignored if you also specify `insidePolygon` or `insideBoundingBox`. + */ + aroundLatLng?: string; + + /** + * Whether to obtain the coordinates from the request\'s IP address. + */ + aroundLatLngViaIP?: boolean; + + aroundRadius?: AroundRadius; + + aroundPrecision?: AroundPrecision; + + /** + * Minimum radius (in meters) for a search around a location when `aroundRadius` isn\'t set. + */ + minimumAroundRadius?: number; + + insideBoundingBox?: InsideBoundingBox | null; + + /** + * Coordinates of a polygon in which to search. Polygons are defined by 3 to 10,000 points. Each point is represented by its latitude and longitude. Provide multiple polygons as nested arrays. For more information, see [filtering inside polygons](https://www.algolia.com/doc/guides/managing-results/refine-results/geolocation/#filtering-inside-rectangular-or-polygonal-areas). This parameter is ignored if you also specify `insideBoundingBox`. + */ + insidePolygon?: Array>; + + /** + * Languages for language-specific query processing steps such as plurals, stop-word removal, and word-detection dictionaries. This setting sets a default list of languages used by the `removeStopWords` and `ignorePlurals` settings. This setting also sets a dictionary for word detection in the logogram-based [CJK](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/normalization/#normalization-for-logogram-based-languages-cjk) languages. To support this, you must place the CJK language **first**. **You should always specify a query language.** If you don\'t specify an indexing language, the search engine uses all [supported languages](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/supported-languages/), or the languages you specified with the `ignorePlurals` or `removeStopWords` parameters. This can lead to unexpected search results. For more information, see [Language-specific configuration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/). + */ + queryLanguages?: Array; + + /** + * ISO language codes that adjust settings that are useful for processing natural language queries (as opposed to keyword searches): - Sets `removeStopWords` and `ignorePlurals` to the list of provided languages. - Sets `removeWordsIfNoResults` to `allOptional`. - Adds a `natural_language` attribute to `ruleContexts` and `analyticsTags`. + */ + naturalLanguages?: Array; + + /** + * Whether to enable rules. + */ + enableRules?: boolean; + + /** + * Assigns a rule context to the search query. [Rule contexts](https://www.algolia.com/doc/guides/managing-results/rules/rules-overview/how-to/customize-search-results-by-platform/#whats-a-context) are strings that you can use to trigger matching rules. + */ + ruleContexts?: Array; + + /** + * Unique pseudonymous or anonymous user identifier. This helps with analytics and click and conversion events. For more information, see [user token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken?: string; + + /** + * Whether to include a `queryID` attribute in the response. The query ID is a unique identifier for a search query and is required for tracking [click and conversion events](https://www.algolia.com/guides/sending-events/getting-started/). + */ + clickAnalytics?: boolean; + + /** + * Whether this search will be included in Analytics. + */ + analytics?: boolean; + + /** + * Tags to apply to the query for [segmenting analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + analyticsTags?: Array; + + /** + * Whether to enable A/B testing for this search. + */ + enableABTest?: boolean; + + /** + * Whether this search will use [Dynamic Re-Ranking](https://www.algolia.com/doc/guides/algolia-ai/re-ranking/). This setting only has an effect if you activated Dynamic Re-Ranking for this index in the Algolia dashboard. + */ + enableReRanking?: boolean; +}; diff --git a/packages/composition/model/personalization.ts b/packages/composition/model/personalization.ts new file mode 100644 index 000000000..c8efd58b1 --- /dev/null +++ b/packages/composition/model/personalization.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Personalization = { + /** + * The score of the filters. + */ + filtersScore?: number; + + /** + * The score of the ranking. + */ + rankingScore?: number; + + /** + * The score of the event. + */ + score?: number; +}; diff --git a/packages/composition/model/range.ts b/packages/composition/model/range.ts new file mode 100644 index 000000000..780b75be7 --- /dev/null +++ b/packages/composition/model/range.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Range object with lower and upper values in meters to define custom ranges. + */ +export type Range = { + /** + * Lower boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. + */ + from?: number; + + /** + * Upper boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. + */ + value?: number; +}; diff --git a/packages/composition/model/rankingInfo.ts b/packages/composition/model/rankingInfo.ts new file mode 100644 index 000000000..50c5a3058 --- /dev/null +++ b/packages/composition/model/rankingInfo.ts @@ -0,0 +1,68 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchedGeoLocation } from './matchedGeoLocation'; +import type { Personalization } from './personalization'; + +/** + * Object with detailed information about the record\'s ranking. + */ +export type RankingInfo = { + /** + * Whether a filter matched the query. + */ + filters?: number; + + /** + * Position of the first matched word in the best matching attribute of the record. + */ + firstMatchedWord: number; + + /** + * Distance between the geo location in the search query and the best matching geo location in the record, divided by the geo precision (in meters). + */ + geoDistance: number; + + /** + * Precision used when computing the geo distance, in meters. + */ + geoPrecision?: number; + + matchedGeoLocation?: MatchedGeoLocation; + + personalization?: Personalization; + + /** + * Number of exactly matched words. + */ + nbExactWords: number; + + /** + * Number of typos encountered when matching the record. + */ + nbTypos: number; + + /** + * Whether the record was promoted by a rule. + */ + promoted?: boolean; + + /** + * Number of words between multiple matches in the query plus 1. For single word queries, `proximityDistance` is 0. + */ + proximityDistance?: number; + + /** + * Overall ranking of the record, expressed as a single integer. This attribute is internal. + */ + userScore: number; + + /** + * Number of matched words. + */ + words?: number; + + /** + * Whether the record is re-ranked. + */ + promotedByReRanking?: boolean; +}; diff --git a/packages/composition/model/redirect.ts b/packages/composition/model/redirect.ts new file mode 100644 index 000000000..fa3ea30ff --- /dev/null +++ b/packages/composition/model/redirect.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RedirectRuleIndexMetadata } from './redirectRuleIndexMetadata'; + +/** + * [Redirect results to a URL](https://www.algolia.com/doc/guides/managing-results/rules/merchandising-and-promoting/how-to/redirects/), this this parameter is for internal use only. + */ +export type Redirect = { + index?: Array; +}; diff --git a/packages/composition/model/redirectRuleIndexData.ts b/packages/composition/model/redirectRuleIndexData.ts new file mode 100644 index 000000000..fbb7ea140 --- /dev/null +++ b/packages/composition/model/redirectRuleIndexData.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Redirect rule data. + */ +export type RedirectRuleIndexData = { + ruleObjectID: string; +}; diff --git a/packages/composition/model/redirectRuleIndexMetadata.ts b/packages/composition/model/redirectRuleIndexMetadata.ts new file mode 100644 index 000000000..33802fc69 --- /dev/null +++ b/packages/composition/model/redirectRuleIndexMetadata.ts @@ -0,0 +1,27 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RedirectRuleIndexData } from './redirectRuleIndexData'; + +export type RedirectRuleIndexMetadata = { + /** + * Source index for the redirect rule. + */ + source: string; + + /** + * Destination index for the redirect rule. + */ + dest: string; + + /** + * Reason for the redirect rule. + */ + reason: string; + + /** + * Redirect rule status. + */ + succeed: boolean; + + data: RedirectRuleIndexData; +}; diff --git a/packages/composition/model/redirectURL.ts b/packages/composition/model/redirectURL.ts new file mode 100644 index 000000000..8f66f7ee2 --- /dev/null +++ b/packages/composition/model/redirectURL.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * The redirect rule container. + */ +export type RedirectURL = { + url?: string; +}; diff --git a/packages/composition/model/renderingContent.ts b/packages/composition/model/renderingContent.ts new file mode 100644 index 000000000..ddb01bde8 --- /dev/null +++ b/packages/composition/model/renderingContent.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FacetOrdering } from './facetOrdering'; +import type { RedirectURL } from './redirectURL'; +import type { Widgets } from './widgets'; + +/** + * Extra data that can be used in the search UI. You can use this to control aspects of your search UI, such as the order of facet names and values without changing your frontend code. + */ +export type RenderingContent = { + facetOrdering?: FacetOrdering; + + redirect?: RedirectURL; + + widgets?: Widgets; +}; diff --git a/packages/composition/model/requestBody.ts b/packages/composition/model/requestBody.ts new file mode 100644 index 000000000..3e936f9eb --- /dev/null +++ b/packages/composition/model/requestBody.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Params } from './params'; + +export type RequestBody = { + params?: Params; +}; diff --git a/packages/composition/model/resultsCompositionInfoResponse.ts b/packages/composition/model/resultsCompositionInfoResponse.ts new file mode 100644 index 000000000..2aa12f6ef --- /dev/null +++ b/packages/composition/model/resultsCompositionInfoResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ResultsInjectedItemInfoResponse } from './resultsInjectedItemInfoResponse'; + +export type ResultsCompositionInfoResponse = { + injectedItems: Array; +}; diff --git a/packages/composition/model/resultsCompositionsResponse.ts b/packages/composition/model/resultsCompositionsResponse.ts new file mode 100644 index 000000000..763a799e2 --- /dev/null +++ b/packages/composition/model/resultsCompositionsResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ResultsCompositionInfoResponse } from './resultsCompositionInfoResponse'; + +export type ResultsCompositionsResponse = Record & { + compositions: { [key: string]: ResultsCompositionInfoResponse }; +}; diff --git a/packages/composition/model/resultsInjectedItemAppliedRulesInfoResponse.ts b/packages/composition/model/resultsInjectedItemAppliedRulesInfoResponse.ts new file mode 100644 index 000000000..b70808f3d --- /dev/null +++ b/packages/composition/model/resultsInjectedItemAppliedRulesInfoResponse.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type ResultsInjectedItemAppliedRulesInfoResponse = { + /** + * Unique record identifier. + */ + objectID: string; +}; diff --git a/packages/composition/model/resultsInjectedItemInfoResponse.ts b/packages/composition/model/resultsInjectedItemInfoResponse.ts new file mode 100644 index 000000000..35a86a467 --- /dev/null +++ b/packages/composition/model/resultsInjectedItemInfoResponse.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ResultsInjectedItemAppliedRulesInfoResponse } from './resultsInjectedItemAppliedRulesInfoResponse'; + +export type ResultsInjectedItemInfoResponse = Record & { + key: string; + + appliedRules?: Array; +}; diff --git a/packages/composition/model/searchForFacetValuesParams.ts b/packages/composition/model/searchForFacetValuesParams.ts new file mode 100644 index 000000000..8b57a2e7e --- /dev/null +++ b/packages/composition/model/searchForFacetValuesParams.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Params } from './params'; + +export type SearchForFacetValuesParams = { + /** + * Search query. + */ + query?: string; + + /** + * Maximum number of facet values to return when [searching for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ + maxFacetHits?: number; + + searchQuery?: Params; +}; diff --git a/packages/composition/model/searchForFacetValuesRequest.ts b/packages/composition/model/searchForFacetValuesRequest.ts new file mode 100644 index 000000000..62ac3a2dd --- /dev/null +++ b/packages/composition/model/searchForFacetValuesRequest.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchForFacetValuesParams } from './searchForFacetValuesParams'; + +export type SearchForFacetValuesRequest = { + params?: SearchForFacetValuesParams; +}; diff --git a/packages/composition/model/searchForFacetValuesResponse.ts b/packages/composition/model/searchForFacetValuesResponse.ts new file mode 100644 index 000000000..cbe8e92f7 --- /dev/null +++ b/packages/composition/model/searchForFacetValuesResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchForFacetValuesResults } from './searchForFacetValuesResults'; + +export type SearchForFacetValuesResponse = { + /** + * Search for facet values results. + */ + results?: Array; +}; diff --git a/packages/composition/model/searchForFacetValuesResults.ts b/packages/composition/model/searchForFacetValuesResults.ts new file mode 100644 index 000000000..94960fdee --- /dev/null +++ b/packages/composition/model/searchForFacetValuesResults.ts @@ -0,0 +1,22 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FacetHits } from './facetHits'; + +export type SearchForFacetValuesResults = { + indexName: string; + + /** + * Matching facet values. + */ + facetHits: Array; + + /** + * Whether the facet count is exhaustive (true) or approximate (false). For more information, see [Why are my facet and hit counts not accurate](https://support.algolia.com/hc/en-us/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate-). + */ + exhaustiveFacetsCount: boolean; + + /** + * Time the server took to process the request, in milliseconds. + */ + processingTimeMS?: number; +}; diff --git a/packages/composition/model/searchHits.ts b/packages/composition/model/searchHits.ts new file mode 100644 index 000000000..3e410b8a0 --- /dev/null +++ b/packages/composition/model/searchHits.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Hit } from './hit'; + +export type SearchHits> = Record & { + /** + * Search results (hits). Hits are records from your index that match the search criteria, augmented with additional attributes, such as, for highlighting. + */ + hits: Hit[]; + + /** + * Search query. + */ + query: string; + + /** + * URL-encoded string of all search parameters. + */ + params: string; +}; diff --git a/packages/composition/model/searchPagination.ts b/packages/composition/model/searchPagination.ts new file mode 100644 index 000000000..d5420c628 --- /dev/null +++ b/packages/composition/model/searchPagination.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SearchPagination = { + /** + * Page of search results to retrieve. + */ + page: number; + + /** + * Number of results (hits). + */ + nbHits: number; + + /** + * Number of pages of results. + */ + nbPages: number; + + /** + * Number of hits per page. + */ + hitsPerPage: number; +}; diff --git a/packages/composition/model/searchResponse.ts b/packages/composition/model/searchResponse.ts new file mode 100644 index 000000000..61fd97428 --- /dev/null +++ b/packages/composition/model/searchResponse.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CompositionBaseSearchResponse } from './compositionBaseSearchResponse'; +import type { SearchResults } from './searchResults'; + +export type SearchResponse> = CompositionBaseSearchResponse & SearchResults; diff --git a/packages/composition/model/searchResults.ts b/packages/composition/model/searchResults.ts new file mode 100644 index 000000000..34e9a400a --- /dev/null +++ b/packages/composition/model/searchResults.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SearchResultsItem } from './searchResultsItem'; + +export type SearchResults> = { + /** + * Search results. + */ + results: SearchResultsItem[]; +}; diff --git a/packages/composition/model/searchResultsItem.ts b/packages/composition/model/searchResultsItem.ts new file mode 100644 index 000000000..7ada04731 --- /dev/null +++ b/packages/composition/model/searchResultsItem.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchResponse } from './baseSearchResponse'; +import type { ResultsCompositionsResponse } from './resultsCompositionsResponse'; +import type { SearchHits } from './searchHits'; +import type { SearchPagination } from './searchPagination'; + +export type SearchResultsItem> = BaseSearchResponse & + SearchPagination & + SearchHits & + ResultsCompositionsResponse; diff --git a/packages/composition/model/snippetResult.ts b/packages/composition/model/snippetResult.ts new file mode 100644 index 000000000..0d9abff48 --- /dev/null +++ b/packages/composition/model/snippetResult.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SnippetResultOption } from './snippetResultOption'; + +export type SnippetResult = SnippetResultOption | { [key: string]: SnippetResult } | Array; diff --git a/packages/composition/model/snippetResultOption.ts b/packages/composition/model/snippetResultOption.ts new file mode 100644 index 000000000..daab65f2d --- /dev/null +++ b/packages/composition/model/snippetResultOption.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchLevel } from './matchLevel'; + +/** + * Snippets that show the context around a matching search query. + */ +export type SnippetResultOption = { + /** + * Highlighted attribute value, including HTML tags. + */ + value: string; + + matchLevel: MatchLevel; +}; diff --git a/packages/composition/model/sortRemainingBy.ts b/packages/composition/model/sortRemainingBy.ts new file mode 100644 index 000000000..85fc5bd88 --- /dev/null +++ b/packages/composition/model/sortRemainingBy.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Order of facet values that aren\'t explicitly positioned with the `order` setting. - `count`. Order remaining facet values by decreasing count. The count is the number of matching records containing this facet value. - `alpha`. Sort facet values alphabetically. - `hidden`. Don\'t show facet values that aren\'t explicitly positioned. + */ +export type SortRemainingBy = 'count' | 'alpha' | 'hidden'; diff --git a/packages/composition/model/supportedLanguage.ts b/packages/composition/model/supportedLanguage.ts new file mode 100644 index 000000000..85f2111cc --- /dev/null +++ b/packages/composition/model/supportedLanguage.ts @@ -0,0 +1,74 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * ISO code for a supported language. + */ +export type SupportedLanguage = + | 'af' + | 'ar' + | 'az' + | 'bg' + | 'bn' + | 'ca' + | 'cs' + | 'cy' + | 'da' + | 'de' + | 'el' + | 'en' + | 'eo' + | 'es' + | 'et' + | 'eu' + | 'fa' + | 'fi' + | 'fo' + | 'fr' + | 'ga' + | 'gl' + | 'he' + | 'hi' + | 'hu' + | 'hy' + | 'id' + | 'is' + | 'it' + | 'ja' + | 'ka' + | 'kk' + | 'ko' + | 'ku' + | 'ky' + | 'lt' + | 'lv' + | 'mi' + | 'mn' + | 'mr' + | 'ms' + | 'mt' + | 'nb' + | 'nl' + | 'no' + | 'ns' + | 'pl' + | 'ps' + | 'pt' + | 'pt-br' + | 'qu' + | 'ro' + | 'ru' + | 'sk' + | 'sq' + | 'sv' + | 'sw' + | 'ta' + | 'te' + | 'th' + | 'tl' + | 'tn' + | 'tr' + | 'tt' + | 'uk' + | 'ur' + | 'uz' + | 'zh'; diff --git a/packages/composition/model/value.ts b/packages/composition/model/value.ts new file mode 100644 index 000000000..72cd05add --- /dev/null +++ b/packages/composition/model/value.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SortRemainingBy } from './sortRemainingBy'; + +export type Value = { + /** + * Explicit order of facets or facet values. This setting lets you always show specific facets or facet values at the top of the list. + */ + order?: Array; + + sortRemainingBy?: SortRemainingBy; + + /** + * Hide facet values. + */ + hide?: Array; +}; diff --git a/packages/composition/model/widgets.ts b/packages/composition/model/widgets.ts new file mode 100644 index 000000000..ee0f95779 --- /dev/null +++ b/packages/composition/model/widgets.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Banner } from './banner'; + +/** + * Widgets returned from any rules that are applied to the current search. + */ +export type Widgets = { + /** + * Banners defined in the Merchandising Studio for a given search. + */ + banners?: Array; +}; diff --git a/packages/composition/package.json b/packages/composition/package.json new file mode 100644 index 000000000..34894a6cf --- /dev/null +++ b/packages/composition/package.json @@ -0,0 +1,68 @@ +{ + "version": "0.0.1-beta.12", + "repository": { + "type": "git", + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/composition#readme", + "type": "module", + "license": "MIT", + "author": "Algolia", + "scripts": { + "build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js", + "clean": "rm -rf ./dist || true", + "test:bundle": "publint . && attw --pack ." + }, + "name": "@algolia/composition", + "description": "JavaScript client for composition", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/builds/node.js", + "module": "./dist/builds/node.js", + "require": "./dist/builds/node.cjs" + }, + "worker": { + "types": "./dist/worker.d.ts", + "default": "./dist/builds/worker.js" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/builds/browser.js", + "import": "./dist/builds/browser.js", + "default": "./dist/builds/browser.umd.js" + } + }, + "./dist/builds/*": "./dist/builds/*.js" + }, + "jsdelivr": "./dist/builds/browser.umd.js", + "unpkg": "./dist/builds/browser.umd.js", + "react-native": "./dist/builds/browser.js", + "files": [ + "dist", + "index.js", + "index.d.ts" + ], + "dependencies": { + "@algolia/client-common": "5.23.3", + "@algolia/requester-browser-xhr": "5.23.3", + "@algolia/requester-fetch": "5.23.3", + "@algolia/requester-node-http": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "publint": "0.3.10", + "rollup": "4.39.0", + "tsup": "8.4.0", + "typescript": "5.8.3" + }, + "engines": { + "node": ">= 14.0.0" + } +} diff --git a/packages/composition/rollup.config.js b/packages/composition/rollup.config.js new file mode 100644 index 000000000..1746eabe0 --- /dev/null +++ b/packages/composition/rollup.config.js @@ -0,0 +1,17 @@ +export default [ + { + input: 'dist/builds/browser.min.js', + external: ['dom'], + cache: false, + output: { + esModule: false, + file: 'dist/builds/browser.umd.js', + name: '@algolia/composition', + format: 'umd', + sourcemap: false, + globals: { + ['compositionClient']: 'compositionClient', + }, + }, + }, +]; diff --git a/packages/composition/src/compositionClient.ts b/packages/composition/src/compositionClient.ts new file mode 100644 index 000000000..1cded2ebb --- /dev/null +++ b/packages/composition/src/compositionClient.ts @@ -0,0 +1,217 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { + CreateClientOptions, + Headers, + Host, + QueryParameters, + Request, + RequestOptions, +} from '@algolia/client-common'; +import { createAuth, createTransporter, getAlgoliaAgent, shuffle } from '@algolia/client-common'; + +import type { SearchForFacetValuesResponse } from '../model/searchForFacetValuesResponse'; +import type { SearchResponse } from '../model/searchResponse'; + +import type { SearchForFacetValuesProps, SearchProps } from '../model/clientMethodProps'; + +export const apiClientVersion = '0.0.1-beta.12'; + +function getDefaultHosts(appId: string): Host[] { + return ( + [ + { + url: `${appId}-dsn.algolia.net`, + accept: 'read', + protocol: 'https', + }, + { + url: `${appId}.algolia.net`, + accept: 'write', + protocol: 'https', + }, + ] as Host[] + ).concat( + shuffle([ + { + url: `${appId}-1.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + { + url: `${appId}-2.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + { + url: `${appId}-3.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + ]), + ); +} + +export function createCompositionClient({ + appId: appIdOption, + apiKey: apiKeyOption, + authMode, + algoliaAgents, + ...options +}: CreateClientOptions) { + const auth = createAuth(appIdOption, apiKeyOption, authMode); + const transporter = createTransporter({ + hosts: getDefaultHosts(appIdOption), + ...options, + algoliaAgent: getAlgoliaAgent({ + algoliaAgents, + client: 'Composition', + version: apiClientVersion, + }), + baseHeaders: { + 'content-type': 'text/plain', + ...auth.headers(), + ...options.baseHeaders, + }, + baseQueryParameters: { + ...auth.queryParameters(), + ...options.baseQueryParameters, + }, + }); + + return { + transporter, + + /** + * The `appId` currently in use. + */ + appId: appIdOption, + + /** + * The `apiKey` currently in use. + */ + apiKey: apiKeyOption, + + /** + * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties. + */ + clearCache(): Promise { + return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => undefined); + }, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return transporter.algoliaAgent.value; + }, + + /** + * Adds a `segment` to the `x-algolia-agent` sent with every requests. + * + * @param segment - The algolia agent (user-agent) segment to add. + * @param version - The version of the agent. + */ + addAlgoliaAgent(segment: string, version?: string): void { + transporter.algoliaAgent.add({ segment, version }); + }, + + /** + * Helper method to switch the API key used to authenticate the requests. + * + * @param params - Method params. + * @param params.apiKey - The new API Key to use. + */ + setClientApiKey({ apiKey }: { apiKey: string }): void { + if (!authMode || authMode === 'WithinHeaders') { + transporter.baseHeaders['x-algolia-api-key'] = apiKey; + } else { + transporter.baseQueryParameters['x-algolia-api-key'] = apiKey; + } + }, + + /** + * Runs a query on a single composition and returns matching results. + * + * Required API Key ACLs: + * - search + * @param search - The search object. + * @param search.compositionID - Unique Composition ObjectID. + * @param search.requestBody - The requestBody object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + search( + { compositionID, requestBody }: SearchProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!compositionID) { + throw new Error('Parameter `compositionID` is required when calling `search`.'); + } + + if (!requestBody) { + throw new Error('Parameter `requestBody` is required when calling `search`.'); + } + + const requestPath = '/1/compositions/{compositionID}/run'.replace( + '{compositionID}', + encodeURIComponent(compositionID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: requestBody, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for values of a specified facet attribute on the composition\'s main source\'s index. - By default, facet values are sorted by decreasing count. You can adjust this with the `sortFacetValueBy` parameter. - Searching for facet values doesn\'t work if you have **more than 65 searchable facets and searchable attributes combined**. + * + * Required API Key ACLs: + * - search + * @param searchForFacetValues - The searchForFacetValues object. + * @param searchForFacetValues.compositionID - Unique Composition ObjectID. + * @param searchForFacetValues.facetName - Facet attribute in which to search for values. This attribute must be included in the `attributesForFaceting` index setting with the `searchable()` modifier. + * @param searchForFacetValues.searchForFacetValuesRequest - The searchForFacetValuesRequest object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchForFacetValues( + { compositionID, facetName, searchForFacetValuesRequest }: SearchForFacetValuesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!compositionID) { + throw new Error('Parameter `compositionID` is required when calling `searchForFacetValues`.'); + } + + if (!facetName) { + throw new Error('Parameter `facetName` is required when calling `searchForFacetValues`.'); + } + + const requestPath = '/1/compositions/{compositionID}/facets/{facetName}/query' + .replace('{compositionID}', encodeURIComponent(compositionID)) + .replace('{facetName}', encodeURIComponent(facetName)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: searchForFacetValuesRequest ? searchForFacetValuesRequest : {}, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + }; +} diff --git a/packages/composition/tsconfig.json b/packages/composition/tsconfig.json new file mode 100644 index 000000000..444e8bb64 --- /dev/null +++ b/packages/composition/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src", "model", "builds"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/composition/tsup.config.ts b/packages/composition/tsup.config.ts new file mode 100644 index 000000000..8c60a6c07 --- /dev/null +++ b/packages/composition/tsup.config.ts @@ -0,0 +1,67 @@ +import type { Options } from 'tsup'; +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions, getDependencies } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +const nodeOptions: Options = { + ...getBaseNodeOptions(pkg, __dirname), + dts: { entry: { node: 'builds/node.ts' } }, + entry: ['builds/node.ts', 'src/*.ts'], +}; + +const nodeConfigs: Options[] = [ + { + ...nodeOptions, + format: 'cjs', + name: `node ${pkg.name} cjs`, + }, + { + ...nodeOptions, + format: 'esm', + name: `node ${pkg.name} esm`, + }, + { + ...nodeOptions, + format: 'esm', + name: `fetch ${pkg.name} esm`, + dts: { entry: { fetch: 'builds/fetch.ts' } }, + external: getDependencies(pkg, 'fetch'), + entry: ['builds/fetch.ts', 'src/*.ts'], + }, + { + ...nodeOptions, + format: 'esm', + name: `worker ${pkg.name} esm`, + dts: { entry: { worker: 'builds/worker.ts' } }, + external: getDependencies(pkg, 'worker'), + entry: ['builds/worker.ts', 'src/*.ts'], + }, +]; + +const browserOptions: Options = { + ...getBaseBrowserOptions(pkg, __dirname), + globalName: 'compositionClient', +}; + +const browserConfigs: Options[] = [ + { + ...browserOptions, + minify: false, + name: `browser ${pkg.name} esm`, + dts: { entry: { browser: 'builds/browser.ts' } }, + entry: ['builds/browser.ts', 'src/*.ts'], + }, + { + ...browserOptions, + dts: false, + minify: true, + name: `browser ${pkg.name} min esm`, + entry: { 'builds/browser.min': 'builds/browser.ts' }, + external: [], + noExternal: getDependencies(pkg, 'xhr'), + }, +]; + +export default defineConfig([...nodeConfigs, ...browserConfigs]); diff --git a/packages/ingestion/LICENSE b/packages/ingestion/LICENSE new file mode 100644 index 000000000..fddf416f9 --- /dev/null +++ b/packages/ingestion/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-Present Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/ingestion/README.md b/packages/ingestion/README.md new file mode 100644 index 000000000..56b91246a --- /dev/null +++ b/packages/ingestion/README.md @@ -0,0 +1,77 @@ +

+ + Algolia for JavaScript + + +

The perfect starting point to integrate Algolia within your JavaScript project

+ +

+ NPM version + NPM downloads + jsDelivr Downloads + License +

+

+ +

+ Documentation • + InstantSearch • + Community Forum • + Stack Overflow • + Report a bug • + FAQ • + Support +

+ +## ✨ Features + +- Thin & **minimal low-level HTTP client** to interact with Algolia's API +- Works both on the **browser** and **node.js** +- **UMD and ESM compatible**, you can use it with any module loader +- Built with TypeScript + +## 💡 Getting Started + +> [!TIP] +> This API client is already a dependency of [the algoliasearch client](https://www.npmjs.com/package/algoliasearch), you don't need to manually install `@algolia/ingestion` if you already have `algoliasearch` installed. + +To get started, you first need to install @algolia/ingestion (or any other available API client package). +All of our clients comes with type definition, and are available for both browser and node environments. + +### With a package manager + +```bash +yarn add @algolia/ingestion@1.23.3 +# or +npm install @algolia/ingestion@1.23.3 +# or +pnpm add @algolia/ingestion@1.23.3 +``` + +### Without a package manager + +Add the following JavaScript snippet to the of your website: + +```html + +``` + +### Usage + +You can now import the Algolia API client in your project and play with it. + +```js +import { ingestionClient } from '@algolia/ingestion'; + +const client = ingestionClient('YOUR_APP_ID', 'YOUR_API_KEY'); +``` + +For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/javascript/v5/methods/ingestion/)**. + +## ❓ Troubleshooting + +Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/libraries/javascript/v5/) where you will find answers for the most common issues and gotchas with the client. You can also open [a GitHub issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=&projects=&template=Bug_report.md) + +## 📄 License + +The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). diff --git a/packages/ingestion/builds/browser.ts b/packages/ingestion/builds/browser.ts new file mode 100644 index 000000000..cbd5f919d --- /dev/null +++ b/packages/ingestion/builds/browser.ts @@ -0,0 +1,65 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import { createXhrRequester } from '@algolia/requester-browser-xhr'; + +import { + createBrowserLocalStorageCache, + createFallbackableCache, + createMemoryCache, + createNullLogger, +} from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { apiClientVersion, createIngestionClient } from '../src/ingestionClient'; + +import type { Region } from '../src/ingestionClient'; +import { REGIONS } from '../src/ingestionClient'; + +export type { Region, RegionOptions } from '../src/ingestionClient'; + +export { apiClientVersion, isOnDemandTrigger, isScheduleTrigger, isSubscriptionTrigger } from '../src/ingestionClient'; + +export * from '../model'; + +export function ingestionClient( + appId: string, + apiKey: string, + region: Region, + options?: ClientOptions, +): IngestionClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (!region || (region && (typeof region !== 'string' || !REGIONS.includes(region)))) { + throw new Error(`\`region\` is required and must be one of the following: ${REGIONS.join(', ')}`); + } + + return createIngestionClient({ + appId, + apiKey, + region, + timeouts: { + connect: 25000, + read: 25000, + write: 25000, + }, + logger: createNullLogger(), + requester: createXhrRequester(), + algoliaAgents: [{ segment: 'Browser' }], + authMode: 'WithinQueryParameters', + responsesCache: createMemoryCache(), + requestsCache: createMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], + }), + ...options, + }); +} + +export type IngestionClient = ReturnType; diff --git a/packages/ingestion/builds/fetch.ts b/packages/ingestion/builds/fetch.ts new file mode 100644 index 000000000..1aec0613a --- /dev/null +++ b/packages/ingestion/builds/fetch.ts @@ -0,0 +1,58 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type IngestionClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createIngestionClient } from '../src/ingestionClient'; + +import type { Region } from '../src/ingestionClient'; +import { REGIONS } from '../src/ingestionClient'; + +export type { Region, RegionOptions } from '../src/ingestionClient'; + +export { apiClientVersion, isOnDemandTrigger, isScheduleTrigger, isSubscriptionTrigger } from '../src/ingestionClient'; + +export * from '../model'; + +export function ingestionClient( + appId: string, + apiKey: string, + region: Region, + options?: ClientOptions, +): IngestionClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (!region || (region && (typeof region !== 'string' || !REGIONS.includes(region)))) { + throw new Error(`\`region\` is required and must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createIngestionClient({ + appId, + apiKey, + region, + timeouts: { + connect: 25000, + read: 25000, + write: 25000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Fetch' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/ingestion/builds/node.ts b/packages/ingestion/builds/node.ts new file mode 100644 index 000000000..caba62d76 --- /dev/null +++ b/packages/ingestion/builds/node.ts @@ -0,0 +1,59 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type IngestionClient = ReturnType; + +import { createHttpRequester } from '@algolia/requester-node-http'; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createIngestionClient } from '../src/ingestionClient'; + +import type { Region } from '../src/ingestionClient'; +import { REGIONS } from '../src/ingestionClient'; + +export type { Region, RegionOptions } from '../src/ingestionClient'; + +export { apiClientVersion, isOnDemandTrigger, isScheduleTrigger, isSubscriptionTrigger } from '../src/ingestionClient'; + +export * from '../model'; + +export function ingestionClient( + appId: string, + apiKey: string, + region: Region, + options?: ClientOptions, +): IngestionClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (!region || (region && (typeof region !== 'string' || !REGIONS.includes(region)))) { + throw new Error(`\`region\` is required and must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createIngestionClient({ + appId, + apiKey, + region, + timeouts: { + connect: 25000, + read: 25000, + write: 25000, + }, + logger: createNullLogger(), + requester: createHttpRequester(), + algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/ingestion/builds/worker.ts b/packages/ingestion/builds/worker.ts new file mode 100644 index 000000000..0d8b59d62 --- /dev/null +++ b/packages/ingestion/builds/worker.ts @@ -0,0 +1,58 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type IngestionClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createIngestionClient } from '../src/ingestionClient'; + +import type { Region } from '../src/ingestionClient'; +import { REGIONS } from '../src/ingestionClient'; + +export type { Region, RegionOptions } from '../src/ingestionClient'; + +export { apiClientVersion, isOnDemandTrigger, isScheduleTrigger, isSubscriptionTrigger } from '../src/ingestionClient'; + +export * from '../model'; + +export function ingestionClient( + appId: string, + apiKey: string, + region: Region, + options?: ClientOptions, +): IngestionClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + if (!region || (region && (typeof region !== 'string' || !REGIONS.includes(region)))) { + throw new Error(`\`region\` is required and must be one of the following: ${REGIONS.join(', ')}`); + } + + return { + ...createIngestionClient({ + appId, + apiKey, + region, + timeouts: { + connect: 25000, + read: 25000, + write: 25000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Worker' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/ingestion/index.d.ts b/packages/ingestion/index.d.ts new file mode 100644 index 000000000..e81a1cd3e --- /dev/null +++ b/packages/ingestion/index.d.ts @@ -0,0 +1 @@ +export * from './dist/node'; diff --git a/packages/ingestion/index.js b/packages/ingestion/index.js new file mode 100644 index 000000000..21e26aad3 --- /dev/null +++ b/packages/ingestion/index.js @@ -0,0 +1 @@ +module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/ingestion/model/action.ts b/packages/ingestion/model/action.ts new file mode 100644 index 000000000..20d62e69a --- /dev/null +++ b/packages/ingestion/model/action.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Type of indexing operation. + */ +export type Action = + | 'addObject' + | 'updateObject' + | 'partialUpdateObject' + | 'partialUpdateObjectNoCreate' + | 'deleteObject' + | 'delete' + | 'clear'; diff --git a/packages/ingestion/model/actionType.ts b/packages/ingestion/model/actionType.ts new file mode 100644 index 000000000..25957c6d1 --- /dev/null +++ b/packages/ingestion/model/actionType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Action to perform on the Algolia index. + */ +export type ActionType = 'replace' | 'save' | 'partial' | 'append'; diff --git a/packages/ingestion/model/authAPIKey.ts b/packages/ingestion/model/authAPIKey.ts new file mode 100644 index 000000000..3adfa15a1 --- /dev/null +++ b/packages/ingestion/model/authAPIKey.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Credentials for authenticating with an API key. + */ +export type AuthAPIKey = { + /** + * API key. This field is `null` in the API response. + */ + key: string; +}; diff --git a/packages/ingestion/model/authAPIKeyPartial.ts b/packages/ingestion/model/authAPIKeyPartial.ts new file mode 100644 index 000000000..7db1043ef --- /dev/null +++ b/packages/ingestion/model/authAPIKeyPartial.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Credentials for authenticating with an API key. + */ +export type AuthAPIKeyPartial = { + /** + * API key. This field is `null` in the API response. + */ + key?: string; +}; diff --git a/packages/ingestion/model/authAlgolia.ts b/packages/ingestion/model/authAlgolia.ts new file mode 100644 index 000000000..2e81fd24c --- /dev/null +++ b/packages/ingestion/model/authAlgolia.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Credentials for authenticating with Algolia. + */ +export type AuthAlgolia = { + /** + * Algolia application ID. + */ + appID: string; + + /** + * Algolia API key with the ACL: `addObject`, `deleteObject`, `settings`, `editSettings`, `listIndexes`, `deleteIndex`. This field is `null` in the API response. + */ + apiKey: string; +}; diff --git a/packages/ingestion/model/authAlgoliaInsights.ts b/packages/ingestion/model/authAlgoliaInsights.ts new file mode 100644 index 000000000..5731c14fe --- /dev/null +++ b/packages/ingestion/model/authAlgoliaInsights.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Credentials for authenticating with the Algolia Insights API. + */ +export type AuthAlgoliaInsights = { + /** + * Algolia application ID. + */ + appID: string; + + /** + * Algolia API key with the ACL: `search`. This field is `null` in the API response. + */ + apiKey: string; +}; diff --git a/packages/ingestion/model/authAlgoliaInsightsPartial.ts b/packages/ingestion/model/authAlgoliaInsightsPartial.ts new file mode 100644 index 000000000..8a949db0d --- /dev/null +++ b/packages/ingestion/model/authAlgoliaInsightsPartial.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Credentials for authenticating with the Algolia Insights API. + */ +export type AuthAlgoliaInsightsPartial = { + /** + * Algolia application ID. + */ + appID?: string; + + /** + * Algolia API key with the ACL: `search`. This field is `null` in the API response. + */ + apiKey?: string; +}; diff --git a/packages/ingestion/model/authAlgoliaPartial.ts b/packages/ingestion/model/authAlgoliaPartial.ts new file mode 100644 index 000000000..7d24829a8 --- /dev/null +++ b/packages/ingestion/model/authAlgoliaPartial.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Credentials for authenticating with Algolia. + */ +export type AuthAlgoliaPartial = { + /** + * Algolia application ID. + */ + appID?: string; + + /** + * Algolia API key with the ACL: `addObject`, `deleteObject`, `settings`, `editSettings`, `listIndexes`, `deleteIndex`. This field is `null` in the API response. + */ + apiKey?: string; +}; diff --git a/packages/ingestion/model/authBasic.ts b/packages/ingestion/model/authBasic.ts new file mode 100644 index 000000000..cf779d92c --- /dev/null +++ b/packages/ingestion/model/authBasic.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Credentials for authenticating with user name and password. + */ +export type AuthBasic = { + /** + * Username. + */ + username: string; + + /** + * Password. This field is `null` in the API response. + */ + password: string; +}; diff --git a/packages/ingestion/model/authBasicPartial.ts b/packages/ingestion/model/authBasicPartial.ts new file mode 100644 index 000000000..aad038c96 --- /dev/null +++ b/packages/ingestion/model/authBasicPartial.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Credentials for authenticating with user name and password. + */ +export type AuthBasicPartial = { + /** + * Username. + */ + username?: string; + + /** + * Password. This field is `null` in the API response. + */ + password?: string; +}; diff --git a/packages/ingestion/model/authGoogleServiceAccount.ts b/packages/ingestion/model/authGoogleServiceAccount.ts new file mode 100644 index 000000000..6cd4c6ff6 --- /dev/null +++ b/packages/ingestion/model/authGoogleServiceAccount.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Credentials for authenticating with a Google service account, such as BigQuery. + */ +export type AuthGoogleServiceAccount = { + /** + * Email address of the Google service account. + */ + clientEmail: string; + + /** + * Private key of the Google service account. This field is `null` in the API response. + */ + privateKey: string; +}; diff --git a/packages/ingestion/model/authGoogleServiceAccountPartial.ts b/packages/ingestion/model/authGoogleServiceAccountPartial.ts new file mode 100644 index 000000000..4676dc67a --- /dev/null +++ b/packages/ingestion/model/authGoogleServiceAccountPartial.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Credentials for authenticating with a Google service account, such as BigQuery. + */ +export type AuthGoogleServiceAccountPartial = { + /** + * Email address of the Google service account. + */ + clientEmail?: string; + + /** + * Private key of the Google service account. This field is `null` in the API response. + */ + privateKey?: string; +}; diff --git a/packages/ingestion/model/authInput.ts b/packages/ingestion/model/authInput.ts new file mode 100644 index 000000000..788fdec7c --- /dev/null +++ b/packages/ingestion/model/authInput.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AuthAPIKey } from './authAPIKey'; +import type { AuthAlgolia } from './authAlgolia'; +import type { AuthAlgoliaInsights } from './authAlgoliaInsights'; +import type { AuthBasic } from './authBasic'; +import type { AuthGoogleServiceAccount } from './authGoogleServiceAccount'; +import type { AuthOAuth } from './authOAuth'; + +export type AuthInput = + | AuthGoogleServiceAccount + | AuthBasic + | AuthAPIKey + | AuthOAuth + | AuthAlgolia + | AuthAlgoliaInsights + | { [key: string]: string }; diff --git a/packages/ingestion/model/authInputPartial.ts b/packages/ingestion/model/authInputPartial.ts new file mode 100644 index 000000000..965f2cb5a --- /dev/null +++ b/packages/ingestion/model/authInputPartial.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AuthAPIKeyPartial } from './authAPIKeyPartial'; +import type { AuthAlgoliaInsightsPartial } from './authAlgoliaInsightsPartial'; +import type { AuthAlgoliaPartial } from './authAlgoliaPartial'; +import type { AuthBasicPartial } from './authBasicPartial'; +import type { AuthGoogleServiceAccountPartial } from './authGoogleServiceAccountPartial'; +import type { AuthOAuthPartial } from './authOAuthPartial'; + +export type AuthInputPartial = + | AuthGoogleServiceAccountPartial + | AuthBasicPartial + | AuthAPIKeyPartial + | AuthOAuthPartial + | AuthAlgoliaPartial + | AuthAlgoliaInsightsPartial + | { [key: string]: string }; diff --git a/packages/ingestion/model/authOAuth.ts b/packages/ingestion/model/authOAuth.ts new file mode 100644 index 000000000..3b27f1d8b --- /dev/null +++ b/packages/ingestion/model/authOAuth.ts @@ -0,0 +1,26 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Credentials for authenticating with OAuth 2.0. + */ +export type AuthOAuth = { + /** + * URL for the OAuth endpoint. + */ + url: string; + + /** + * Client ID. + */ + client_id: string; + + /** + * Client secret. This field is `null` in the API response. + */ + client_secret: string; + + /** + * OAuth scope. + */ + scope?: string; +}; diff --git a/packages/ingestion/model/authOAuthPartial.ts b/packages/ingestion/model/authOAuthPartial.ts new file mode 100644 index 000000000..e17ef261f --- /dev/null +++ b/packages/ingestion/model/authOAuthPartial.ts @@ -0,0 +1,26 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Credentials for authenticating with OAuth 2.0. + */ +export type AuthOAuthPartial = { + /** + * URL for the OAuth endpoint. + */ + url?: string; + + /** + * Client ID. + */ + client_id?: string; + + /** + * Client secret. This field is `null` in the API response. + */ + client_secret?: string; + + /** + * OAuth scope. + */ + scope?: string; +}; diff --git a/packages/ingestion/model/authentication.ts b/packages/ingestion/model/authentication.ts new file mode 100644 index 000000000..c06cf0930 --- /dev/null +++ b/packages/ingestion/model/authentication.ts @@ -0,0 +1,41 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AuthInputPartial } from './authInputPartial'; +import type { AuthenticationType } from './authenticationType'; +import type { Platform } from './platform'; + +/** + * Resource representing the information required to authenticate with a source or a destination. + */ +export type Authentication = { + /** + * Universally unique identifier (UUID) of an authentication resource. + */ + authenticationID: string; + + type: AuthenticationType; + + /** + * Descriptive name for the resource. + */ + name: string; + + platform?: Platform | null; + + /** + * Owner of the resource. + */ + owner?: string | null; + + input: AuthInputPartial; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; + + /** + * Date of last update in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/ingestion/model/authenticationCreate.ts b/packages/ingestion/model/authenticationCreate.ts new file mode 100644 index 000000000..31f7bfaaf --- /dev/null +++ b/packages/ingestion/model/authenticationCreate.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AuthInput } from './authInput'; +import type { AuthenticationType } from './authenticationType'; +import type { Platform } from './platform'; + +/** + * Request body for creating a new authentication resource. + */ +export type AuthenticationCreate = { + type: AuthenticationType; + + /** + * Descriptive name for the resource. + */ + name: string; + + platform?: Platform | null; + + input: AuthInput; +}; diff --git a/packages/ingestion/model/authenticationCreateResponse.ts b/packages/ingestion/model/authenticationCreateResponse.ts new file mode 100644 index 000000000..b519dd50e --- /dev/null +++ b/packages/ingestion/model/authenticationCreateResponse.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * API response for the successful creation of an authentication resource. + */ +export type AuthenticationCreateResponse = { + /** + * Universally unique identifier (UUID) of an authentication resource. + */ + authenticationID: string; + + /** + * Descriptive name for the resource. + */ + name: string; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; +}; diff --git a/packages/ingestion/model/authenticationSearch.ts b/packages/ingestion/model/authenticationSearch.ts new file mode 100644 index 000000000..62f1faf84 --- /dev/null +++ b/packages/ingestion/model/authenticationSearch.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Request body for searching for authentication resources. + */ +export type AuthenticationSearch = { + authenticationIDs: Array; +}; diff --git a/packages/ingestion/model/authenticationSortKeys.ts b/packages/ingestion/model/authenticationSortKeys.ts new file mode 100644 index 000000000..c876d0657 --- /dev/null +++ b/packages/ingestion/model/authenticationSortKeys.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Property by which to sort the list of authentications. + */ +export type AuthenticationSortKeys = 'name' | 'type' | 'platform' | 'updatedAt' | 'createdAt'; diff --git a/packages/ingestion/model/authenticationType.ts b/packages/ingestion/model/authenticationType.ts new file mode 100644 index 000000000..e161faf80 --- /dev/null +++ b/packages/ingestion/model/authenticationType.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Type of authentication. This determines the type of credentials required in the `input` object. + */ +export type AuthenticationType = + | 'googleServiceAccount' + | 'basic' + | 'apiKey' + | 'oauth' + | 'algolia' + | 'algoliaInsights' + | 'secrets'; diff --git a/packages/ingestion/model/authenticationUpdate.ts b/packages/ingestion/model/authenticationUpdate.ts new file mode 100644 index 000000000..398aaddcc --- /dev/null +++ b/packages/ingestion/model/authenticationUpdate.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AuthInputPartial } from './authInputPartial'; +import type { AuthenticationType } from './authenticationType'; +import type { Platform } from './platform'; + +/** + * Request body for updating an authentication resource. + */ +export type AuthenticationUpdate = { + type?: AuthenticationType; + + /** + * Descriptive name for the resource. + */ + name?: string; + + platform?: Platform | null; + + input?: AuthInputPartial; +}; diff --git a/packages/ingestion/model/authenticationUpdateResponse.ts b/packages/ingestion/model/authenticationUpdateResponse.ts new file mode 100644 index 000000000..8433bb75a --- /dev/null +++ b/packages/ingestion/model/authenticationUpdateResponse.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * API response for a successful update of an authentication resource. + */ +export type AuthenticationUpdateResponse = { + /** + * Universally unique identifier (UUID) of an authentication resource. + */ + authenticationID: string; + + /** + * Descriptive name for the resource. + */ + name: string; + + /** + * Date of last update in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/ingestion/model/bigCommerceChannel.ts b/packages/ingestion/model/bigCommerceChannel.ts new file mode 100644 index 000000000..102a1fde6 --- /dev/null +++ b/packages/ingestion/model/bigCommerceChannel.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BigCommerceChannel = { + /** + * ID of the BigCommerce channel. + */ + id: number; + + /** + * Currencies for the given channel. + */ + currencies?: Array; +}; diff --git a/packages/ingestion/model/bigCommerceMetafield.ts b/packages/ingestion/model/bigCommerceMetafield.ts new file mode 100644 index 000000000..6be2ffb5b --- /dev/null +++ b/packages/ingestion/model/bigCommerceMetafield.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BigCommerceMetafield = { + /** + * Namespace of the metafield. + */ + namespace: string; + + /** + * Key identifier of the metafield. + */ + key: string; +}; diff --git a/packages/ingestion/model/bigQueryDataType.ts b/packages/ingestion/model/bigQueryDataType.ts new file mode 100644 index 000000000..ed9d8a8db --- /dev/null +++ b/packages/ingestion/model/bigQueryDataType.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BigQueryDataType = 'ga4' | 'ga360'; diff --git a/packages/ingestion/model/clientMethodProps.ts b/packages/ingestion/model/clientMethodProps.ts new file mode 100644 index 000000000..24a6412d4 --- /dev/null +++ b/packages/ingestion/model/clientMethodProps.ts @@ -0,0 +1,731 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ActionType } from '../model/actionType'; + +import type { AuthenticationSortKeys } from '../model/authenticationSortKeys'; +import type { AuthenticationType } from '../model/authenticationType'; +import type { AuthenticationUpdate } from '../model/authenticationUpdate'; + +import type { DestinationSortKeys } from '../model/destinationSortKeys'; +import type { DestinationType } from '../model/destinationType'; +import type { DestinationUpdate } from '../model/destinationUpdate'; + +import type { EventSortKeys } from '../model/eventSortKeys'; +import type { EventStatus } from '../model/eventStatus'; +import type { EventType } from '../model/eventType'; + +import type { OrderKeys } from '../model/orderKeys'; +import type { PlatformWithNone } from '../model/platformWithNone'; +import type { PushTaskPayload } from '../model/pushTaskPayload'; + +import type { RunSortKeys } from '../model/runSortKeys'; +import type { RunSourcePayload } from '../model/runSourcePayload'; + +import type { RunStatus } from '../model/runStatus'; +import type { RunType } from '../model/runType'; + +import type { SourceSortKeys } from '../model/sourceSortKeys'; +import type { SourceType } from '../model/sourceType'; +import type { SourceUpdate } from '../model/sourceUpdate'; + +import type { TaskSortKeys } from '../model/taskSortKeys'; +import type { TaskUpdate } from '../model/taskUpdate'; + +import type { TaskUpdateV1 } from '../model/taskUpdateV1'; + +import type { TransformationCreate } from '../model/transformationCreate'; + +import type { TransformationSortKeys } from '../model/transformationSortKeys'; +import type { TransformationTry } from '../model/transformationTry'; + +import type { TriggerType } from '../model/triggerType'; + +/** + * Properties for the `customDelete` method. + */ +export type CustomDeleteProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customGet` method. + */ +export type CustomGetProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customPost` method. + */ +export type CustomPostProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `customPut` method. + */ +export type CustomPutProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `deleteAuthentication` method. + */ +export type DeleteAuthenticationProps = { + /** + * Unique identifier of an authentication resource. + */ + authenticationID: string; +}; + +/** + * Properties for the `deleteDestination` method. + */ +export type DeleteDestinationProps = { + /** + * Unique identifier of a destination. + */ + destinationID: string; +}; + +/** + * Properties for the `deleteSource` method. + */ +export type DeleteSourceProps = { + /** + * Unique identifier of a source. + */ + sourceID: string; +}; + +/** + * Properties for the `deleteTask` method. + */ +export type DeleteTaskProps = { + /** + * Unique identifier of a task. + */ + taskID: string; +}; + +/** + * Properties for the `deleteTaskV1` method. + */ +export type DeleteTaskV1Props = { + /** + * Unique identifier of a task. + */ + taskID: string; +}; + +/** + * Properties for the `deleteTransformation` method. + */ +export type DeleteTransformationProps = { + /** + * Unique identifier of a transformation. + */ + transformationID: string; +}; + +/** + * Properties for the `disableTask` method. + */ +export type DisableTaskProps = { + /** + * Unique identifier of a task. + */ + taskID: string; +}; + +/** + * Properties for the `disableTaskV1` method. + */ +export type DisableTaskV1Props = { + /** + * Unique identifier of a task. + */ + taskID: string; +}; + +/** + * Properties for the `enableTask` method. + */ +export type EnableTaskProps = { + /** + * Unique identifier of a task. + */ + taskID: string; +}; + +/** + * Properties for the `enableTaskV1` method. + */ +export type EnableTaskV1Props = { + /** + * Unique identifier of a task. + */ + taskID: string; +}; + +/** + * Properties for the `getAuthentication` method. + */ +export type GetAuthenticationProps = { + /** + * Unique identifier of an authentication resource. + */ + authenticationID: string; +}; + +/** + * Properties for the `getDestination` method. + */ +export type GetDestinationProps = { + /** + * Unique identifier of a destination. + */ + destinationID: string; +}; + +/** + * Properties for the `getEvent` method. + */ +export type GetEventProps = { + /** + * Unique identifier of a task run. + */ + runID: string; + /** + * Unique identifier of an event. + */ + eventID: string; +}; + +/** + * Properties for the `getRun` method. + */ +export type GetRunProps = { + /** + * Unique identifier of a task run. + */ + runID: string; +}; + +/** + * Properties for the `getSource` method. + */ +export type GetSourceProps = { + /** + * Unique identifier of a source. + */ + sourceID: string; +}; + +/** + * Properties for the `getTask` method. + */ +export type GetTaskProps = { + /** + * Unique identifier of a task. + */ + taskID: string; +}; + +/** + * Properties for the `getTaskV1` method. + */ +export type GetTaskV1Props = { + /** + * Unique identifier of a task. + */ + taskID: string; +}; + +/** + * Properties for the `getTransformation` method. + */ +export type GetTransformationProps = { + /** + * Unique identifier of a transformation. + */ + transformationID: string; +}; + +/** + * Properties for the `listAuthentications` method. + */ +export type ListAuthenticationsProps = { + /** + * Number of items per page. + */ + itemsPerPage?: number; + /** + * Page number of the paginated API response. + */ + page?: number; + /** + * Type of authentication resource to retrieve. + */ + type?: Array; + /** + * Ecommerce platform for which to retrieve authentications. + */ + platform?: Array; + /** + * Property by which to sort the list of authentications. + */ + sort?: AuthenticationSortKeys; + /** + * Sort order of the response, ascending or descending. + */ + order?: OrderKeys; +}; + +/** + * Properties for the `listDestinations` method. + */ +export type ListDestinationsProps = { + /** + * Number of items per page. + */ + itemsPerPage?: number; + /** + * Page number of the paginated API response. + */ + page?: number; + /** + * Destination type. + */ + type?: Array; + /** + * Authentication ID used by destinations. + */ + authenticationID?: Array; + /** + * Get the list of destinations used by a transformation. + */ + transformationID?: string; + /** + * Property by which to sort the destinations. + */ + sort?: DestinationSortKeys; + /** + * Sort order of the response, ascending or descending. + */ + order?: OrderKeys; +}; + +/** + * Properties for the `listEvents` method. + */ +export type ListEventsProps = { + /** + * Unique identifier of a task run. + */ + runID: string; + /** + * Number of items per page. + */ + itemsPerPage?: number; + /** + * Page number of the paginated API response. + */ + page?: number; + /** + * Event status for filtering the list of task runs. + */ + status?: Array; + /** + * Event type for filtering the list of task runs. + */ + type?: Array; + /** + * Property by which to sort the list of task run events. + */ + sort?: EventSortKeys; + /** + * Sort order of the response, ascending or descending. + */ + order?: OrderKeys; + /** + * Date and time in RFC 3339 format for the earliest events to retrieve. By default, the current time minus three hours is used. + */ + startDate?: string; + /** + * Date and time in RFC 3339 format for the latest events to retrieve. By default, the current time is used. + */ + endDate?: string; +}; + +/** + * Properties for the `listRuns` method. + */ +export type ListRunsProps = { + /** + * Number of items per page. + */ + itemsPerPage?: number; + /** + * Page number of the paginated API response. + */ + page?: number; + /** + * Run status for filtering the list of task runs. + */ + status?: Array; + /** + * Run type for filtering the list of task runs. + */ + type?: Array; + /** + * Task ID for filtering the list of task runs. + */ + taskID?: string; + /** + * Property by which to sort the list of task runs. + */ + sort?: RunSortKeys; + /** + * Sort order of the response, ascending or descending. + */ + order?: OrderKeys; + /** + * Date in RFC 3339 format for the earliest run to retrieve. By default, the current day minus seven days is used. + */ + startDate?: string; + /** + * Date in RFC 3339 format for the latest run to retrieve. By default, the current day is used. + */ + endDate?: string; +}; + +/** + * Properties for the `listSources` method. + */ +export type ListSourcesProps = { + /** + * Number of items per page. + */ + itemsPerPage?: number; + /** + * Page number of the paginated API response. + */ + page?: number; + /** + * Source type. Some sources require authentication. + */ + type?: Array; + /** + * Authentication IDs of the sources to retrieve. \'none\' returns sources that doesn\'t have an authentication. + */ + authenticationID?: Array; + /** + * Property by which to sort the list of sources. + */ + sort?: SourceSortKeys; + /** + * Sort order of the response, ascending or descending. + */ + order?: OrderKeys; +}; + +/** + * Properties for the `listTasks` method. + */ +export type ListTasksProps = { + /** + * Number of items per page. + */ + itemsPerPage?: number; + /** + * Page number of the paginated API response. + */ + page?: number; + /** + * Actions for filtering the list of tasks. + */ + action?: Array; + /** + * Whether to filter the list of tasks by the `enabled` status. + */ + enabled?: boolean; + /** + * Source IDs for filtering the list of tasks. + */ + sourceID?: Array; + /** + * Filters the tasks with the specified source type. + */ + sourceType?: Array; + /** + * Destination IDs for filtering the list of tasks. + */ + destinationID?: Array; + /** + * Type of task trigger for filtering the list of tasks. + */ + triggerType?: Array; + /** + * If specified, the response only includes tasks with notifications.email.enabled set to this value. + */ + withEmailNotifications?: boolean; + /** + * Property by which to sort the list of tasks. + */ + sort?: TaskSortKeys; + /** + * Sort order of the response, ascending or descending. + */ + order?: OrderKeys; +}; + +/** + * Properties for the `listTasksV1` method. + */ +export type ListTasksV1Props = { + /** + * Number of items per page. + */ + itemsPerPage?: number; + /** + * Page number of the paginated API response. + */ + page?: number; + /** + * Actions for filtering the list of tasks. + */ + action?: Array; + /** + * Whether to filter the list of tasks by the `enabled` status. + */ + enabled?: boolean; + /** + * Source IDs for filtering the list of tasks. + */ + sourceID?: Array; + /** + * Destination IDs for filtering the list of tasks. + */ + destinationID?: Array; + /** + * Type of task trigger for filtering the list of tasks. + */ + triggerType?: Array; + /** + * Property by which to sort the list of tasks. + */ + sort?: TaskSortKeys; + /** + * Sort order of the response, ascending or descending. + */ + order?: OrderKeys; +}; + +/** + * Properties for the `listTransformations` method. + */ +export type ListTransformationsProps = { + /** + * Number of items per page. + */ + itemsPerPage?: number; + /** + * Page number of the paginated API response. + */ + page?: number; + /** + * Property by which to sort the list of transformations. + */ + sort?: TransformationSortKeys; + /** + * Sort order of the response, ascending or descending. + */ + order?: OrderKeys; +}; + +/** + * Properties for the `pushTask` method. + */ +export type PushTaskProps = { + /** + * Unique identifier of a task. + */ + taskID: string; + /** + * Request body of a Search API `batch` request that will be pushed in the Connectors pipeline. + */ + pushTaskPayload: PushTaskPayload; + /** + * When provided, the push operation will be synchronous and the API will wait for the ingestion to be finished before responding. + */ + watch?: boolean; +}; + +/** + * Properties for the `runSource` method. + */ +export type RunSourceProps = { + /** + * Unique identifier of a source. + */ + sourceID: string; + /** + * + */ + runSourcePayload?: RunSourcePayload; +}; + +/** + * Properties for the `runTask` method. + */ +export type RunTaskProps = { + /** + * Unique identifier of a task. + */ + taskID: string; +}; + +/** + * Properties for the `runTaskV1` method. + */ +export type RunTaskV1Props = { + /** + * Unique identifier of a task. + */ + taskID: string; +}; + +/** + * Properties for the `triggerDockerSourceDiscover` method. + */ +export type TriggerDockerSourceDiscoverProps = { + /** + * Unique identifier of a source. + */ + sourceID: string; +}; + +/** + * Properties for the `tryTransformationBeforeUpdate` method. + */ +export type TryTransformationBeforeUpdateProps = { + /** + * Unique identifier of a transformation. + */ + transformationID: string; + transformationTry: TransformationTry; +}; + +/** + * Properties for the `updateAuthentication` method. + */ +export type UpdateAuthenticationProps = { + /** + * Unique identifier of an authentication resource. + */ + authenticationID: string; + authenticationUpdate: AuthenticationUpdate; +}; + +/** + * Properties for the `updateDestination` method. + */ +export type UpdateDestinationProps = { + /** + * Unique identifier of a destination. + */ + destinationID: string; + destinationUpdate: DestinationUpdate; +}; + +/** + * Properties for the `updateSource` method. + */ +export type UpdateSourceProps = { + /** + * Unique identifier of a source. + */ + sourceID: string; + sourceUpdate: SourceUpdate; +}; + +/** + * Properties for the `updateTask` method. + */ +export type UpdateTaskProps = { + /** + * Unique identifier of a task. + */ + taskID: string; + taskUpdate: TaskUpdate; +}; + +/** + * Properties for the `updateTaskV1` method. + */ +export type UpdateTaskV1Props = { + /** + * Unique identifier of a task. + */ + taskID: string; + taskUpdate: TaskUpdateV1; +}; + +/** + * Properties for the `updateTransformation` method. + */ +export type UpdateTransformationProps = { + /** + * Unique identifier of a transformation. + */ + transformationID: string; + transformationCreate: TransformationCreate; +}; + +/** + * Properties for the `validateSourceBeforeUpdate` method. + */ +export type ValidateSourceBeforeUpdateProps = { + /** + * Unique identifier of a source. + */ + sourceID: string; + sourceUpdate: SourceUpdate; +}; diff --git a/packages/ingestion/model/commercetoolsCustomFields.ts b/packages/ingestion/model/commercetoolsCustomFields.ts new file mode 100644 index 000000000..356edb03d --- /dev/null +++ b/packages/ingestion/model/commercetoolsCustomFields.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Custom fields from commercetools to add to the records. For more information, see [Using Custom Types and Custom Fields](https://docs.commercetools.com/tutorials/custom-types). + */ +export type CommercetoolsCustomFields = { + /** + * Inventory custom fields. + */ + inventory?: Array | null; + + /** + * Price custom fields. + */ + price?: Array | null; + + /** + * Category custom fields. + */ + category?: Array | null; +}; diff --git a/packages/ingestion/model/deleteResponse.ts b/packages/ingestion/model/deleteResponse.ts new file mode 100644 index 000000000..7bf1629c9 --- /dev/null +++ b/packages/ingestion/model/deleteResponse.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type DeleteResponse = { + /** + * Date of deletion in RFC 3339 format. + */ + deletedAt: string; +}; diff --git a/packages/ingestion/model/destination.ts b/packages/ingestion/model/destination.ts new file mode 100644 index 000000000..2ff3fe108 --- /dev/null +++ b/packages/ingestion/model/destination.ts @@ -0,0 +1,45 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DestinationInput } from './destinationInput'; +import type { DestinationType } from './destinationType'; + +/** + * Destinations are Algolia resources like indices or event streams. + */ +export type Destination = { + /** + * Universally unique identifier (UUID) of a destination resource. + */ + destinationID: string; + + type: DestinationType; + + /** + * Descriptive name for the resource. + */ + name: string; + + /** + * Owner of the resource. + */ + owner?: string | null; + + input: DestinationInput; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; + + /** + * Date of last update in RFC 3339 format. + */ + updatedAt: string; + + /** + * Universally unique identifier (UUID) of an authentication resource. + */ + authenticationID?: string; + + transformationIDs?: Array; +}; diff --git a/packages/ingestion/model/destinationCreate.ts b/packages/ingestion/model/destinationCreate.ts new file mode 100644 index 000000000..023b56d99 --- /dev/null +++ b/packages/ingestion/model/destinationCreate.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DestinationInput } from './destinationInput'; +import type { DestinationType } from './destinationType'; + +/** + * API request body for creating a new destination. + */ +export type DestinationCreate = { + type: DestinationType; + + /** + * Descriptive name for the resource. + */ + name: string; + + input: DestinationInput; + + /** + * Universally unique identifier (UUID) of an authentication resource. + */ + authenticationID?: string; + + transformationIDs?: Array; +}; diff --git a/packages/ingestion/model/destinationCreateResponse.ts b/packages/ingestion/model/destinationCreateResponse.ts new file mode 100644 index 000000000..50f84e3c2 --- /dev/null +++ b/packages/ingestion/model/destinationCreateResponse.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * API response for creating a new destination. + */ +export type DestinationCreateResponse = { + /** + * Universally unique identifier (UUID) of a destination resource. + */ + destinationID: string; + + /** + * Descriptive name for the resource. + */ + name: string; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; +}; diff --git a/packages/ingestion/model/destinationIndexName.ts b/packages/ingestion/model/destinationIndexName.ts new file mode 100644 index 000000000..8230504db --- /dev/null +++ b/packages/ingestion/model/destinationIndexName.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecordType } from './recordType'; + +export type DestinationIndexName = { + /** + * Algolia index name (case-sensitive). + */ + indexName: string; + + recordType?: RecordType; + + /** + * Attributes from your source to exclude from Algolia records. Not all your data attributes will be useful for searching. Keeping your Algolia records small increases indexing and search performance. - Exclude nested attributes with `.` notation. For example, `foo.bar` indexes the `foo` attribute and all its children **except** the `bar` attribute. - Exclude attributes from arrays with `[i]`, where `i` is the index of the array element. For example, `foo.[0].bar` only excludes the `bar` attribute from the first element of the `foo` array, but indexes the complete `foo` attribute for all other elements. Use `*` as wildcard: `foo.[*].bar` excludes `bar` from all elements of the `foo` array. + */ + attributesToExclude?: Array; +}; diff --git a/packages/ingestion/model/destinationInput.ts b/packages/ingestion/model/destinationInput.ts new file mode 100644 index 000000000..c1a549826 --- /dev/null +++ b/packages/ingestion/model/destinationInput.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DestinationIndexName } from './destinationIndexName'; + +export type DestinationInput = DestinationIndexName; diff --git a/packages/ingestion/model/destinationSearch.ts b/packages/ingestion/model/destinationSearch.ts new file mode 100644 index 000000000..bbb601021 --- /dev/null +++ b/packages/ingestion/model/destinationSearch.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * API request body for searching destinations. + */ +export type DestinationSearch = { + destinationIDs: Array; +}; diff --git a/packages/ingestion/model/destinationSortKeys.ts b/packages/ingestion/model/destinationSortKeys.ts new file mode 100644 index 000000000..c4feb53e9 --- /dev/null +++ b/packages/ingestion/model/destinationSortKeys.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Property by which to sort the destinations. + */ +export type DestinationSortKeys = 'name' | 'type' | 'updatedAt' | 'createdAt'; diff --git a/packages/ingestion/model/destinationType.ts b/packages/ingestion/model/destinationType.ts new file mode 100644 index 000000000..c970c8589 --- /dev/null +++ b/packages/ingestion/model/destinationType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Destination type. - `search`. Data is stored in an Algolia index. - `insights`. Data is recorded as user events in the Insights API. + */ +export type DestinationType = 'search' | 'insights'; diff --git a/packages/ingestion/model/destinationUpdate.ts b/packages/ingestion/model/destinationUpdate.ts new file mode 100644 index 000000000..3d024d7e7 --- /dev/null +++ b/packages/ingestion/model/destinationUpdate.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DestinationInput } from './destinationInput'; +import type { DestinationType } from './destinationType'; + +/** + * API request body for updating a destination. + */ +export type DestinationUpdate = { + type?: DestinationType; + + /** + * Descriptive name for the resource. + */ + name?: string; + + input?: DestinationInput; + + /** + * Universally unique identifier (UUID) of an authentication resource. + */ + authenticationID?: string; + + transformationIDs?: Array; +}; diff --git a/packages/ingestion/model/destinationUpdateResponse.ts b/packages/ingestion/model/destinationUpdateResponse.ts new file mode 100644 index 000000000..8424db8ff --- /dev/null +++ b/packages/ingestion/model/destinationUpdateResponse.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * API response for updating a destination. + */ +export type DestinationUpdateResponse = { + /** + * Universally unique identifier (UUID) of a destination resource. + */ + destinationID: string; + + /** + * Descriptive name for the resource. + */ + name: string; + + /** + * Date of last update in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/ingestion/model/dockerStreams.ts b/packages/ingestion/model/dockerStreams.ts new file mode 100644 index 000000000..3ae14bbcf --- /dev/null +++ b/packages/ingestion/model/dockerStreams.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DockerStreamsSyncMode } from './dockerStreamsSyncMode'; + +export type DockerStreams = { + /** + * The name of the stream to fetch the data from (e.g. table name). + */ + name: string; + + /** + * The properties of the stream to select (e.g. column). + */ + properties?: Array; + + syncMode: DockerStreamsSyncMode; +}; diff --git a/packages/ingestion/model/dockerStreamsInput.ts b/packages/ingestion/model/dockerStreamsInput.ts new file mode 100644 index 000000000..d01999d29 --- /dev/null +++ b/packages/ingestion/model/dockerStreamsInput.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DockerStreams } from './dockerStreams'; + +/** + * The selected streams of an airbyte connector. + */ +export type DockerStreamsInput = { + streams: Array; +}; diff --git a/packages/ingestion/model/dockerStreamsSyncMode.ts b/packages/ingestion/model/dockerStreamsSyncMode.ts new file mode 100644 index 000000000..05e40ce54 --- /dev/null +++ b/packages/ingestion/model/dockerStreamsSyncMode.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * The strategy to use to fetch the data. + */ +export type DockerStreamsSyncMode = 'incremental' | 'fullTable'; diff --git a/packages/ingestion/model/emailNotifications.ts b/packages/ingestion/model/emailNotifications.ts new file mode 100644 index 000000000..c4fb89879 --- /dev/null +++ b/packages/ingestion/model/emailNotifications.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type EmailNotifications = { + /** + * Whether to send email notifications, note that this doesn\'t prevent the task from being blocked. + */ + enabled?: boolean; +}; diff --git a/packages/ingestion/model/entityType.ts b/packages/ingestion/model/entityType.ts new file mode 100644 index 000000000..5fe42d4d4 --- /dev/null +++ b/packages/ingestion/model/entityType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Type of entity to update. + */ +export type EntityType = 'product' | 'collection'; diff --git a/packages/ingestion/model/errorBase.ts b/packages/ingestion/model/errorBase.ts new file mode 100644 index 000000000..960e509cb --- /dev/null +++ b/packages/ingestion/model/errorBase.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Error. + */ +export type ErrorBase = Record & { + message?: string; +}; diff --git a/packages/ingestion/model/event.ts b/packages/ingestion/model/event.ts new file mode 100644 index 000000000..2194c7bc0 --- /dev/null +++ b/packages/ingestion/model/event.ts @@ -0,0 +1,35 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { EventStatus } from './eventStatus'; +import type { EventType } from './eventType'; + +/** + * An event describe a step of the task execution flow.. + */ +export type Event = { + /** + * Universally unique identifier (UUID) of an event. + */ + eventID: string; + + /** + * Universally unique identifier (UUID) of a task run. + */ + runID: string; + + status: EventStatus; + + type: EventType; + + /** + * The extracted record batch size. + */ + batchSize: number; + + data?: { [key: string]: any }; + + /** + * Date of publish RFC 3339 format. + */ + publishedAt: string; +}; diff --git a/packages/ingestion/model/eventSortKeys.ts b/packages/ingestion/model/eventSortKeys.ts new file mode 100644 index 000000000..ab3c32630 --- /dev/null +++ b/packages/ingestion/model/eventSortKeys.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Property by which to sort the list of task run events. + */ +export type EventSortKeys = 'status' | 'type' | 'publishedAt'; diff --git a/packages/ingestion/model/eventStatus.ts b/packages/ingestion/model/eventStatus.ts new file mode 100644 index 000000000..16fb14c85 --- /dev/null +++ b/packages/ingestion/model/eventStatus.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type EventStatus = 'created' | 'started' | 'retried' | 'failed' | 'succeeded' | 'critical'; diff --git a/packages/ingestion/model/eventType.ts b/packages/ingestion/model/eventType.ts new file mode 100644 index 000000000..1be6a0e70 --- /dev/null +++ b/packages/ingestion/model/eventType.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type EventType = 'fetch' | 'record' | 'log' | 'transform'; diff --git a/packages/ingestion/model/index.ts b/packages/ingestion/model/index.ts new file mode 100644 index 000000000..e02de3a10 --- /dev/null +++ b/packages/ingestion/model/index.ts @@ -0,0 +1,148 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export * from './action'; +export * from './actionType'; +export * from './authAlgolia'; +export * from './authAlgoliaInsights'; +export * from './authAlgoliaInsightsPartial'; +export * from './authAlgoliaPartial'; +export * from './authAPIKey'; +export * from './authAPIKeyPartial'; +export * from './authBasic'; +export * from './authBasicPartial'; +export * from './authentication'; +export * from './authenticationCreate'; +export * from './authenticationCreateResponse'; +export * from './authenticationSearch'; +export * from './authenticationSortKeys'; +export * from './authenticationType'; +export * from './authenticationUpdate'; +export * from './authenticationUpdateResponse'; +export * from './authGoogleServiceAccount'; +export * from './authGoogleServiceAccountPartial'; +export * from './authInput'; +export * from './authInputPartial'; +export * from './authOAuth'; +export * from './authOAuthPartial'; +export * from './bigCommerceChannel'; +export * from './bigCommerceMetafield'; +export * from './bigQueryDataType'; +export * from './clientMethodProps'; +export * from './commercetoolsCustomFields'; +export * from './deleteResponse'; +export * from './destination'; +export * from './destinationCreate'; +export * from './destinationCreateResponse'; +export * from './destinationIndexName'; +export * from './destinationInput'; +export * from './destinationSearch'; +export * from './destinationSortKeys'; +export * from './destinationType'; +export * from './destinationUpdate'; +export * from './destinationUpdateResponse'; +export * from './dockerStreams'; +export * from './dockerStreamsInput'; +export * from './dockerStreamsSyncMode'; +export * from './emailNotifications'; +export * from './entityType'; +export * from './errorBase'; +export * from './event'; +export * from './eventSortKeys'; +export * from './eventStatus'; +export * from './eventType'; +export * from './listAuthenticationsResponse'; +export * from './listDestinationsResponse'; +export * from './listEventsResponse'; +export * from './listSourcesResponse'; +export * from './listTasksResponse'; +export * from './listTasksResponseV1'; +export * from './listTransformationsResponse'; +export * from './mappingFieldDirective'; +export * from './mappingFormatSchema'; +export * from './mappingInput'; +export * from './mappingKitAction'; +export * from './mappingTypeCSV'; +export * from './methodType'; +export * from './notifications'; +export * from './onDemandTrigger'; +export * from './onDemandTriggerInput'; +export * from './onDemandTriggerType'; +export * from './orderKeys'; +export * from './pagination'; +export * from './platform'; +export * from './platformNone'; +export * from './platformWithNone'; +export * from './policies'; +export * from './pushTaskPayload'; +export * from './pushTaskRecords'; +export * from './recordType'; +export * from './run'; +export * from './runListResponse'; +export * from './runOutcome'; +export * from './runProgress'; +export * from './runReasonCode'; +export * from './runResponse'; +export * from './runSortKeys'; +export * from './runSourcePayload'; +export * from './runSourceResponse'; +export * from './runStatus'; +export * from './runType'; +export * from './scheduleTrigger'; +export * from './scheduleTriggerInput'; +export * from './scheduleTriggerType'; +export * from './shopifyInput'; +export * from './shopifyMarket'; +export * from './shopifyMetafield'; +export * from './source'; +export * from './sourceBigCommerce'; +export * from './sourceBigQuery'; +export * from './sourceCommercetools'; +export * from './sourceCreate'; +export * from './sourceCreateResponse'; +export * from './sourceCSV'; +export * from './sourceDocker'; +export * from './sourceGA4BigQueryExport'; +export * from './sourceInput'; +export * from './sourceJSON'; +export * from './sourceSearch'; +export * from './sourceShopify'; +export * from './sourceShopifyBase'; +export * from './sourceSortKeys'; +export * from './sourceType'; +export * from './sourceUpdate'; +export * from './sourceUpdateCommercetools'; +export * from './sourceUpdateDocker'; +export * from './sourceUpdateInput'; +export * from './sourceUpdateResponse'; +export * from './sourceUpdateShopify'; +export * from './streamingInput'; +export * from './streamingTrigger'; +export * from './streamingTriggerType'; +export * from './subscriptionTrigger'; +export * from './subscriptionTriggerType'; +export * from './task'; +export * from './taskCreate'; +export * from './taskCreateResponse'; +export * from './taskCreateTrigger'; +export * from './taskCreateV1'; +export * from './taskInput'; +export * from './taskSearch'; +export * from './taskSortKeys'; +export * from './taskUpdate'; +export * from './taskUpdateResponse'; +export * from './taskUpdateV1'; +export * from './taskV1'; +export * from './transformation'; +export * from './transformationCreate'; +export * from './transformationCreateResponse'; +export * from './transformationError'; +export * from './transformationSearch'; +export * from './transformationSortKeys'; +export * from './transformationTry'; +export * from './transformationTryResponse'; +export * from './transformationUpdateResponse'; +export * from './trigger'; +export * from './triggerType'; +export * from './triggerUpdateInput'; +export * from './watchResponse'; +export * from './window'; diff --git a/packages/ingestion/model/listAuthenticationsResponse.ts b/packages/ingestion/model/listAuthenticationsResponse.ts new file mode 100644 index 000000000..2b95fa6eb --- /dev/null +++ b/packages/ingestion/model/listAuthenticationsResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Authentication } from './authentication'; +import type { Pagination } from './pagination'; + +export type ListAuthenticationsResponse = { + authentications: Array; + + pagination: Pagination; +}; diff --git a/packages/ingestion/model/listDestinationsResponse.ts b/packages/ingestion/model/listDestinationsResponse.ts new file mode 100644 index 000000000..05922d886 --- /dev/null +++ b/packages/ingestion/model/listDestinationsResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Destination } from './destination'; +import type { Pagination } from './pagination'; + +export type ListDestinationsResponse = { + destinations: Array; + + pagination: Pagination; +}; diff --git a/packages/ingestion/model/listEventsResponse.ts b/packages/ingestion/model/listEventsResponse.ts new file mode 100644 index 000000000..6771785c7 --- /dev/null +++ b/packages/ingestion/model/listEventsResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Event } from './event'; +import type { Pagination } from './pagination'; +import type { Window } from './window'; + +export type ListEventsResponse = { + events: Array; + + pagination: Pagination; + + window: Window; +}; diff --git a/packages/ingestion/model/listSourcesResponse.ts b/packages/ingestion/model/listSourcesResponse.ts new file mode 100644 index 000000000..2d42ccbb8 --- /dev/null +++ b/packages/ingestion/model/listSourcesResponse.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Pagination } from './pagination'; +import type { Source } from './source'; + +export type ListSourcesResponse = { + sources: Array; + + pagination: Pagination; +}; diff --git a/packages/ingestion/model/listTasksResponse.ts b/packages/ingestion/model/listTasksResponse.ts new file mode 100644 index 000000000..abc5250f7 --- /dev/null +++ b/packages/ingestion/model/listTasksResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Pagination } from './pagination'; +import type { Task } from './task'; + +/** + * Configured tasks and pagination information. + */ +export type ListTasksResponse = { + tasks: Array; + + pagination: Pagination; +}; diff --git a/packages/ingestion/model/listTasksResponseV1.ts b/packages/ingestion/model/listTasksResponseV1.ts new file mode 100644 index 000000000..5abccbc9c --- /dev/null +++ b/packages/ingestion/model/listTasksResponseV1.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Pagination } from './pagination'; +import type { TaskV1 } from './taskV1'; + +/** + * Configured tasks and pagination information. + */ +export type ListTasksResponseV1 = { + tasks: Array; + + pagination: Pagination; +}; diff --git a/packages/ingestion/model/listTransformationsResponse.ts b/packages/ingestion/model/listTransformationsResponse.ts new file mode 100644 index 000000000..d2e920236 --- /dev/null +++ b/packages/ingestion/model/listTransformationsResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Pagination } from './pagination'; +import type { Transformation } from './transformation'; + +/** + * Configured transformations and pagination information. + */ +export type ListTransformationsResponse = { + transformations: Array; + + pagination: Pagination; +}; diff --git a/packages/ingestion/model/mappingFieldDirective.ts b/packages/ingestion/model/mappingFieldDirective.ts new file mode 100644 index 000000000..e4a083f63 --- /dev/null +++ b/packages/ingestion/model/mappingFieldDirective.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Describes how a field should be resolved by applying a set of directives. + */ +export type MappingFieldDirective = { + /** + * Destination field key. + */ + fieldKey: string; + + /** + * How the destination field should be resolved from the source. + */ + value: { [key: string]: any }; +}; diff --git a/packages/ingestion/model/mappingFormatSchema.ts b/packages/ingestion/model/mappingFormatSchema.ts new file mode 100644 index 000000000..ba47ff4fe --- /dev/null +++ b/packages/ingestion/model/mappingFormatSchema.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Mapping format schema. + */ +export type MappingFormatSchema = 'mappingkit/v1'; diff --git a/packages/ingestion/model/mappingInput.ts b/packages/ingestion/model/mappingInput.ts new file mode 100644 index 000000000..3979b6f79 --- /dev/null +++ b/packages/ingestion/model/mappingInput.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MappingFormatSchema } from './mappingFormatSchema'; +import type { MappingKitAction } from './mappingKitAction'; + +/** + * Transformations to apply to the source, serialized as a JSON string. + */ +export type MappingInput = { + format: MappingFormatSchema; + + actions: Array; +}; diff --git a/packages/ingestion/model/mappingKitAction.ts b/packages/ingestion/model/mappingKitAction.ts new file mode 100644 index 000000000..07f0d649e --- /dev/null +++ b/packages/ingestion/model/mappingKitAction.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MappingFieldDirective } from './mappingFieldDirective'; + +/** + * Describes how a destination object should be resolved by means of applying a set of directives. + */ +export type MappingKitAction = { + /** + * ID to uniquely identify this action. + */ + id?: string; + + /** + * Whether this action has any effect. + */ + enabled: boolean; + + /** + * Condition which must be satisfied to apply the action. If this evaluates to false, the action is not applied, and the process attempts to apply the next action, if any. + */ + trigger: string; + + fieldDirectives: Array; +}; diff --git a/packages/ingestion/model/mappingTypeCSV.ts b/packages/ingestion/model/mappingTypeCSV.ts new file mode 100644 index 000000000..4a41ccb06 --- /dev/null +++ b/packages/ingestion/model/mappingTypeCSV.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type MappingTypeCSV = 'string' | 'integer' | 'float' | 'boolean' | 'json'; diff --git a/packages/ingestion/model/methodType.ts b/packages/ingestion/model/methodType.ts new file mode 100644 index 000000000..9f50aca5b --- /dev/null +++ b/packages/ingestion/model/methodType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * HTTP method to be used for retrieving your data. + */ +export type MethodType = 'GET' | 'POST'; diff --git a/packages/ingestion/model/notifications.ts b/packages/ingestion/model/notifications.ts new file mode 100644 index 000000000..67e3fa4e5 --- /dev/null +++ b/packages/ingestion/model/notifications.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { EmailNotifications } from './emailNotifications'; + +/** + * Notifications settings for a task. + */ +export type Notifications = { + email: EmailNotifications; +}; diff --git a/packages/ingestion/model/onDemandTrigger.ts b/packages/ingestion/model/onDemandTrigger.ts new file mode 100644 index 000000000..4cf41444e --- /dev/null +++ b/packages/ingestion/model/onDemandTrigger.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { OnDemandTriggerType } from './onDemandTriggerType'; + +/** + * Trigger information for manually-triggered tasks. + */ +export type OnDemandTrigger = { + type: OnDemandTriggerType; + + /** + * The last time the scheduled task ran in RFC 3339 format. + */ + lastRun?: string; +}; diff --git a/packages/ingestion/model/onDemandTriggerInput.ts b/packages/ingestion/model/onDemandTriggerInput.ts new file mode 100644 index 000000000..947b5e17d --- /dev/null +++ b/packages/ingestion/model/onDemandTriggerInput.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { OnDemandTriggerType } from './onDemandTriggerType'; + +/** + * Trigger information for manually-triggered tasks. + */ +export type OnDemandTriggerInput = { + type: OnDemandTriggerType; +}; diff --git a/packages/ingestion/model/onDemandTriggerType.ts b/packages/ingestion/model/onDemandTriggerType.ts new file mode 100644 index 000000000..fbc5b504b --- /dev/null +++ b/packages/ingestion/model/onDemandTriggerType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Task is run manually, with the `/run` endpoint. + */ +export type OnDemandTriggerType = 'onDemand'; diff --git a/packages/ingestion/model/orderKeys.ts b/packages/ingestion/model/orderKeys.ts new file mode 100644 index 000000000..215e6d6d4 --- /dev/null +++ b/packages/ingestion/model/orderKeys.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Ascending or descending sort order. + */ +export type OrderKeys = 'asc' | 'desc'; diff --git a/packages/ingestion/model/pagination.ts b/packages/ingestion/model/pagination.ts new file mode 100644 index 000000000..fc359ae3c --- /dev/null +++ b/packages/ingestion/model/pagination.ts @@ -0,0 +1,26 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Paginated API response. + */ +export type Pagination = { + /** + * Number of pages in the API response. + */ + nbPages: number; + + /** + * Page of the API response to retrieve. + */ + page: number; + + /** + * Number of items in the API response. + */ + nbItems: number; + + /** + * Number of items per page. + */ + itemsPerPage: number; +}; diff --git a/packages/ingestion/model/platform.ts b/packages/ingestion/model/platform.ts new file mode 100644 index 000000000..03bb1273c --- /dev/null +++ b/packages/ingestion/model/platform.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Name of an ecommerce platform with which to authenticate. This determines which authentication type you can select. + */ +export type Platform = 'bigcommerce' | 'commercetools' | 'shopify'; diff --git a/packages/ingestion/model/platformNone.ts b/packages/ingestion/model/platformNone.ts new file mode 100644 index 000000000..be1069c9e --- /dev/null +++ b/packages/ingestion/model/platformNone.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Authentication resource not tied to any ecommerce platform, used for filtering. + */ +export type PlatformNone = 'none'; diff --git a/packages/ingestion/model/platformWithNone.ts b/packages/ingestion/model/platformWithNone.ts new file mode 100644 index 000000000..30fefad8b --- /dev/null +++ b/packages/ingestion/model/platformWithNone.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Platform } from './platform'; +import type { PlatformNone } from './platformNone'; + +export type PlatformWithNone = Platform | PlatformNone; diff --git a/packages/ingestion/model/policies.ts b/packages/ingestion/model/policies.ts new file mode 100644 index 000000000..618d463b4 --- /dev/null +++ b/packages/ingestion/model/policies.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Set of rules for a task. + */ +export type Policies = { + /** + * The number of critical failures in a row before blocking the task and sending a notification. + */ + criticalThreshold?: number; +}; diff --git a/packages/ingestion/model/pushTaskPayload.ts b/packages/ingestion/model/pushTaskPayload.ts new file mode 100644 index 000000000..70402bb23 --- /dev/null +++ b/packages/ingestion/model/pushTaskPayload.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Action } from './action'; +import type { PushTaskRecords } from './pushTaskRecords'; + +export type PushTaskPayload = { + action: Action; + + records: Array; +}; diff --git a/packages/ingestion/model/pushTaskRecords.ts b/packages/ingestion/model/pushTaskRecords.ts new file mode 100644 index 000000000..ce64ade2e --- /dev/null +++ b/packages/ingestion/model/pushTaskRecords.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type PushTaskRecords = Record & { + /** + * Unique record identifier. + */ + objectID: string; +}; diff --git a/packages/ingestion/model/recordType.ts b/packages/ingestion/model/recordType.ts new file mode 100644 index 000000000..0573f3126 --- /dev/null +++ b/packages/ingestion/model/recordType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Record type for ecommerce sources. + */ +export type RecordType = 'product' | 'variant'; diff --git a/packages/ingestion/model/run.ts b/packages/ingestion/model/run.ts new file mode 100644 index 000000000..745b44187 --- /dev/null +++ b/packages/ingestion/model/run.ts @@ -0,0 +1,56 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RunOutcome } from './runOutcome'; +import type { RunProgress } from './runProgress'; +import type { RunReasonCode } from './runReasonCode'; +import type { RunStatus } from './runStatus'; +import type { RunType } from './runType'; + +export type Run = { + /** + * Universally unique identifier (UUID) of a task run. + */ + runID: string; + + appID: string; + + /** + * Universally unique identifier (UUID) of a task. + */ + taskID: string; + + status: RunStatus; + + progress?: RunProgress; + + outcome?: RunOutcome; + + /** + * Maximum accepted percentage of failures for a task run to finish successfully. + */ + failureThreshold?: number; + + /** + * More information about the task run\'s outcome. + */ + reason?: string; + + reasonCode?: RunReasonCode; + + type: RunType; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; + + /** + * Date of start in RFC 3339 format. + */ + startedAt?: string; + + /** + * Date of finish in RFC 3339 format. + */ + finishedAt?: string; +}; diff --git a/packages/ingestion/model/runListResponse.ts b/packages/ingestion/model/runListResponse.ts new file mode 100644 index 000000000..785329627 --- /dev/null +++ b/packages/ingestion/model/runListResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Pagination } from './pagination'; +import type { Run } from './run'; +import type { Window } from './window'; + +export type RunListResponse = { + runs: Array; + + pagination: Pagination; + + window: Window; +}; diff --git a/packages/ingestion/model/runOutcome.ts b/packages/ingestion/model/runOutcome.ts new file mode 100644 index 000000000..48bddb6a4 --- /dev/null +++ b/packages/ingestion/model/runOutcome.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Task run outcome. + */ +export type RunOutcome = 'success' | 'failure'; diff --git a/packages/ingestion/model/runProgress.ts b/packages/ingestion/model/runProgress.ts new file mode 100644 index 000000000..545f98517 --- /dev/null +++ b/packages/ingestion/model/runProgress.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type RunProgress = { + expectedNbOfEvents: number; + + receivedNbOfEvents: number; +}; diff --git a/packages/ingestion/model/runReasonCode.ts b/packages/ingestion/model/runReasonCode.ts new file mode 100644 index 000000000..b45fbf9d1 --- /dev/null +++ b/packages/ingestion/model/runReasonCode.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * A code for the task run\'s outcome. A readable description of the code is included in the `reason` response property. + */ +export type RunReasonCode = 'internal' | 'critical' | 'no_events' | 'too_many_errors' | 'ok' | 'discarded' | 'blocking'; diff --git a/packages/ingestion/model/runResponse.ts b/packages/ingestion/model/runResponse.ts new file mode 100644 index 000000000..2c46a4c91 --- /dev/null +++ b/packages/ingestion/model/runResponse.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * API response for running a task. + */ +export type RunResponse = { + /** + * Universally unique identifier (UUID) of a task run. + */ + runID: string; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; +}; diff --git a/packages/ingestion/model/runSortKeys.ts b/packages/ingestion/model/runSortKeys.ts new file mode 100644 index 000000000..7215c8781 --- /dev/null +++ b/packages/ingestion/model/runSortKeys.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Property by which to sort the list of task runs. + */ +export type RunSortKeys = 'status' | 'updatedAt' | 'createdAt'; diff --git a/packages/ingestion/model/runSourcePayload.ts b/packages/ingestion/model/runSourcePayload.ts new file mode 100644 index 000000000..71b813783 --- /dev/null +++ b/packages/ingestion/model/runSourcePayload.ts @@ -0,0 +1,22 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { EntityType } from './entityType'; + +export type RunSourcePayload = { + /** + * List of index names to include in reidexing/update. + */ + indexToInclude?: Array; + + /** + * List of index names to exclude in reidexing/update. + */ + indexToExclude?: Array; + + /** + * List of entityID to update. + */ + entityIDs?: Array; + + entityType?: EntityType; +}; diff --git a/packages/ingestion/model/runSourceResponse.ts b/packages/ingestion/model/runSourceResponse.ts new file mode 100644 index 000000000..3c667bbd5 --- /dev/null +++ b/packages/ingestion/model/runSourceResponse.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type RunSourceResponse = { + /** + * Map of taskID sent for reindex with the corresponding runID. + */ + taskWithRunID: { [key: string]: string }; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; +}; diff --git a/packages/ingestion/model/runStatus.ts b/packages/ingestion/model/runStatus.ts new file mode 100644 index 000000000..39d367dbd --- /dev/null +++ b/packages/ingestion/model/runStatus.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Task run status. + */ +export type RunStatus = 'created' | 'started' | 'idled' | 'finished' | 'skipped'; diff --git a/packages/ingestion/model/runType.ts b/packages/ingestion/model/runType.ts new file mode 100644 index 000000000..4ec88b3a3 --- /dev/null +++ b/packages/ingestion/model/runType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Task run type. + */ +export type RunType = 'reindex' | 'update' | 'discover' | 'validate' | 'push'; diff --git a/packages/ingestion/model/scheduleTrigger.ts b/packages/ingestion/model/scheduleTrigger.ts new file mode 100644 index 000000000..5fd9cf743 --- /dev/null +++ b/packages/ingestion/model/scheduleTrigger.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ScheduleTriggerType } from './scheduleTriggerType'; + +/** + * Trigger information for scheduled tasks. + */ +export type ScheduleTrigger = { + type: ScheduleTriggerType; + + /** + * Cron expression for the task\'s schedule. + */ + cron: string; + + /** + * The last time the scheduled task ran in RFC 3339 format. + */ + lastRun?: string; + + /** + * The next scheduled run of the task in RFC 3339 format. + */ + nextRun: string; +}; diff --git a/packages/ingestion/model/scheduleTriggerInput.ts b/packages/ingestion/model/scheduleTriggerInput.ts new file mode 100644 index 000000000..f96e656e0 --- /dev/null +++ b/packages/ingestion/model/scheduleTriggerInput.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ScheduleTriggerType } from './scheduleTriggerType'; + +/** + * Trigger input for scheduled tasks. + */ +export type ScheduleTriggerInput = { + type: ScheduleTriggerType; + + /** + * Cron expression for the task\'s schedule. + */ + cron: string; +}; diff --git a/packages/ingestion/model/scheduleTriggerType.ts b/packages/ingestion/model/scheduleTriggerType.ts new file mode 100644 index 000000000..a5cebe1ed --- /dev/null +++ b/packages/ingestion/model/scheduleTriggerType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Task runs on a schedule. + */ +export type ScheduleTriggerType = 'schedule'; diff --git a/packages/ingestion/model/shopifyInput.ts b/packages/ingestion/model/shopifyInput.ts new file mode 100644 index 000000000..726a5d1f1 --- /dev/null +++ b/packages/ingestion/model/shopifyInput.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ShopifyMarket } from './shopifyMarket'; +import type { ShopifyMetafield } from './shopifyMetafield'; + +/** + * Represents the required elements of the task input when using a `shopify` source. + */ +export type ShopifyInput = { + metafields: Array; + + market: ShopifyMarket; +}; diff --git a/packages/ingestion/model/shopifyMarket.ts b/packages/ingestion/model/shopifyMarket.ts new file mode 100644 index 000000000..68af37e90 --- /dev/null +++ b/packages/ingestion/model/shopifyMarket.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Represents a market in Shopify. + */ +export type ShopifyMarket = { + countries: Array; + + currencies: Array; + + locales: Array; +}; diff --git a/packages/ingestion/model/shopifyMetafield.ts b/packages/ingestion/model/shopifyMetafield.ts new file mode 100644 index 000000000..af6ba8e47 --- /dev/null +++ b/packages/ingestion/model/shopifyMetafield.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Represents a metafield in Shopify. + */ +export type ShopifyMetafield = { + namespace: string; + + key: string; + + value: string; +}; diff --git a/packages/ingestion/model/source.ts b/packages/ingestion/model/source.ts new file mode 100644 index 000000000..c8d6a30fc --- /dev/null +++ b/packages/ingestion/model/source.ts @@ -0,0 +1,37 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SourceInput } from './sourceInput'; +import type { SourceType } from './sourceType'; + +export type Source = { + /** + * Universally uniqud identifier (UUID) of a source. + */ + sourceID: string; + + type: SourceType; + + name: string; + + /** + * Owner of the resource. + */ + owner?: string | null; + + input?: SourceInput; + + /** + * Universally unique identifier (UUID) of an authentication resource. + */ + authenticationID?: string; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; + + /** + * Date of last update in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/ingestion/model/sourceBigCommerce.ts b/packages/ingestion/model/sourceBigCommerce.ts new file mode 100644 index 000000000..827c62b2b --- /dev/null +++ b/packages/ingestion/model/sourceBigCommerce.ts @@ -0,0 +1,19 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BigCommerceChannel } from './bigCommerceChannel'; +import type { BigCommerceMetafield } from './bigCommerceMetafield'; + +export type SourceBigCommerce = { + /** + * Store hash identifying your BigCommerce store. + */ + storeHash: string; + + channel?: BigCommerceChannel; + + customFields?: Array; + + productMetafields?: Array; + + variantMetafields?: Array; +}; diff --git a/packages/ingestion/model/sourceBigQuery.ts b/packages/ingestion/model/sourceBigQuery.ts new file mode 100644 index 000000000..9eca240cc --- /dev/null +++ b/packages/ingestion/model/sourceBigQuery.ts @@ -0,0 +1,37 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BigQueryDataType } from './bigQueryDataType'; + +export type SourceBigQuery = { + /** + * Project ID of the BigQuery source. + */ + projectID: string; + + /** + * Dataset ID of the BigQuery source. + */ + datasetID: string; + + dataType?: BigQueryDataType; + + /** + * Table name for the BigQuery export. + */ + table?: string; + + /** + * Table prefix for a Google Analytics 4 data export to BigQuery. + */ + tablePrefix?: string; + + /** + * Custom SQL request to extract data from the BigQuery table. + */ + customSQLRequest?: string; + + /** + * Name of a column that contains a unique ID which will be used as `objectID` in Algolia. + */ + uniqueIDColumn?: string; +}; diff --git a/packages/ingestion/model/sourceCSV.ts b/packages/ingestion/model/sourceCSV.ts new file mode 100644 index 000000000..0796d62f7 --- /dev/null +++ b/packages/ingestion/model/sourceCSV.ts @@ -0,0 +1,28 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MappingTypeCSV } from './mappingTypeCSV'; +import type { MethodType } from './methodType'; + +export type SourceCSV = { + /** + * URL of the file. + */ + url: string; + + /** + * Name of a column that contains a unique ID which will be used as `objectID` in Algolia. + */ + uniqueIDColumn?: string; + + /** + * Key-value pairs of column names and their expected types. + */ + mapping?: { [key: string]: MappingTypeCSV }; + + method?: MethodType; + + /** + * The character used to split the value on each line, default to a comma (\\r, \\n, 0xFFFD, and space are forbidden). + */ + delimiter?: string; +}; diff --git a/packages/ingestion/model/sourceCommercetools.ts b/packages/ingestion/model/sourceCommercetools.ts new file mode 100644 index 000000000..21c96eecf --- /dev/null +++ b/packages/ingestion/model/sourceCommercetools.ts @@ -0,0 +1,28 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CommercetoolsCustomFields } from './commercetoolsCustomFields'; + +export type SourceCommercetools = { + storeKeys?: Array; + + /** + * Locales for your commercetools stores. + */ + locales?: Array; + + url: string; + + projectKey: string; + + /** + * Whether a fallback value is stored in the Algolia record if there\'s no inventory information about the product. + */ + fallbackIsInStockValue?: boolean; + + /** + * Predicate to filter out specific products when indexing. For more information, see [Query Predicate](https://docs.commercetools.com/api/predicates/query). + */ + productQueryPredicate?: string; + + customFields?: CommercetoolsCustomFields; +}; diff --git a/packages/ingestion/model/sourceCreate.ts b/packages/ingestion/model/sourceCreate.ts new file mode 100644 index 000000000..7eef4bebf --- /dev/null +++ b/packages/ingestion/model/sourceCreate.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SourceInput } from './sourceInput'; +import type { SourceType } from './sourceType'; + +export type SourceCreate = { + type: SourceType; + + /** + * Descriptive name of the source. + */ + name: string; + + input?: SourceInput; + + /** + * Universally unique identifier (UUID) of an authentication resource. + */ + authenticationID?: string; +}; diff --git a/packages/ingestion/model/sourceCreateResponse.ts b/packages/ingestion/model/sourceCreateResponse.ts new file mode 100644 index 000000000..f742efedc --- /dev/null +++ b/packages/ingestion/model/sourceCreateResponse.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SourceCreateResponse = { + /** + * Universally uniqud identifier (UUID) of a source. + */ + sourceID: string; + + /** + * Descriptive name of the source. + */ + name: string; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; +}; diff --git a/packages/ingestion/model/sourceDocker.ts b/packages/ingestion/model/sourceDocker.ts new file mode 100644 index 000000000..6ea1fe6ee --- /dev/null +++ b/packages/ingestion/model/sourceDocker.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SourceDocker = { + /** + * Shortname of the image, as returned by the referential. + */ + image: string; + + /** + * Configuration of the spec. + */ + configuration: Record; +}; diff --git a/packages/ingestion/model/sourceGA4BigQueryExport.ts b/packages/ingestion/model/sourceGA4BigQueryExport.ts new file mode 100644 index 000000000..c92e1a309 --- /dev/null +++ b/packages/ingestion/model/sourceGA4BigQueryExport.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SourceGA4BigQueryExport = { + /** + * GCP project ID that the BigQuery export writes to. + */ + projectID: string; + + /** + * BigQuery dataset ID that the BigQuery export writes to. + */ + datasetID: string; + + /** + * Prefix of the tables that the BigQuery Export writes to. + */ + tablePrefix: string; +}; diff --git a/packages/ingestion/model/sourceInput.ts b/packages/ingestion/model/sourceInput.ts new file mode 100644 index 000000000..4b982ff9d --- /dev/null +++ b/packages/ingestion/model/sourceInput.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SourceBigCommerce } from './sourceBigCommerce'; +import type { SourceBigQuery } from './sourceBigQuery'; +import type { SourceCSV } from './sourceCSV'; +import type { SourceCommercetools } from './sourceCommercetools'; +import type { SourceDocker } from './sourceDocker'; +import type { SourceGA4BigQueryExport } from './sourceGA4BigQueryExport'; +import type { SourceJSON } from './sourceJSON'; +import type { SourceShopify } from './sourceShopify'; + +export type SourceInput = + | SourceCommercetools + | SourceBigCommerce + | SourceJSON + | SourceCSV + | SourceBigQuery + | SourceGA4BigQueryExport + | SourceDocker + | SourceShopify; diff --git a/packages/ingestion/model/sourceJSON.ts b/packages/ingestion/model/sourceJSON.ts new file mode 100644 index 000000000..c01b9ed61 --- /dev/null +++ b/packages/ingestion/model/sourceJSON.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MethodType } from './methodType'; + +export type SourceJSON = { + /** + * URL of the file. + */ + url: string; + + /** + * Name of a column that contains a unique ID which will be used as `objectID` in Algolia. + */ + uniqueIDColumn?: string; + + method?: MethodType; +}; diff --git a/packages/ingestion/model/sourceSearch.ts b/packages/ingestion/model/sourceSearch.ts new file mode 100644 index 000000000..4a57588a8 --- /dev/null +++ b/packages/ingestion/model/sourceSearch.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SourceSearch = { + sourceIDs: Array; +}; diff --git a/packages/ingestion/model/sourceShopify.ts b/packages/ingestion/model/sourceShopify.ts new file mode 100644 index 000000000..e355e5069 --- /dev/null +++ b/packages/ingestion/model/sourceShopify.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SourceShopifyBase } from './sourceShopifyBase'; +import type { SourceUpdateShopify } from './sourceUpdateShopify'; + +export type SourceShopify = SourceUpdateShopify & SourceShopifyBase; diff --git a/packages/ingestion/model/sourceShopifyBase.ts b/packages/ingestion/model/sourceShopifyBase.ts new file mode 100644 index 000000000..e2f776541 --- /dev/null +++ b/packages/ingestion/model/sourceShopifyBase.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SourceShopifyBase = { + /** + * URL of the Shopify store. + */ + shopURL: string; +}; diff --git a/packages/ingestion/model/sourceSortKeys.ts b/packages/ingestion/model/sourceSortKeys.ts new file mode 100644 index 000000000..19ebbe59f --- /dev/null +++ b/packages/ingestion/model/sourceSortKeys.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Property by which to sort the list of sources. + */ +export type SourceSortKeys = 'name' | 'type' | 'updatedAt' | 'createdAt'; diff --git a/packages/ingestion/model/sourceType.ts b/packages/ingestion/model/sourceType.ts new file mode 100644 index 000000000..cbc0e4d21 --- /dev/null +++ b/packages/ingestion/model/sourceType.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SourceType = + | 'bigcommerce' + | 'bigquery' + | 'commercetools' + | 'csv' + | 'docker' + | 'ga4BigqueryExport' + | 'json' + | 'shopify' + | 'push'; diff --git a/packages/ingestion/model/sourceUpdate.ts b/packages/ingestion/model/sourceUpdate.ts new file mode 100644 index 000000000..af2977c2c --- /dev/null +++ b/packages/ingestion/model/sourceUpdate.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SourceUpdateInput } from './sourceUpdateInput'; + +export type SourceUpdate = { + /** + * Descriptive name of the source. + */ + name?: string; + + input?: SourceUpdateInput; + + /** + * Universally unique identifier (UUID) of an authentication resource. + */ + authenticationID?: string; +}; diff --git a/packages/ingestion/model/sourceUpdateCommercetools.ts b/packages/ingestion/model/sourceUpdateCommercetools.ts new file mode 100644 index 000000000..8aa3d294d --- /dev/null +++ b/packages/ingestion/model/sourceUpdateCommercetools.ts @@ -0,0 +1,26 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { CommercetoolsCustomFields } from './commercetoolsCustomFields'; + +export type SourceUpdateCommercetools = { + storeKeys?: Array; + + /** + * Locales for your commercetools stores. + */ + locales?: Array; + + url?: string; + + /** + * Whether a fallback value is stored in the Algolia record if there\'s no inventory information about the product. + */ + fallbackIsInStockValue?: boolean; + + /** + * Predicate to filter out specific products when indexing. For more information, see [Query Predicate](https://docs.commercetools.com/api/predicates/query). + */ + productQueryPredicate?: string; + + customFields?: CommercetoolsCustomFields; +}; diff --git a/packages/ingestion/model/sourceUpdateDocker.ts b/packages/ingestion/model/sourceUpdateDocker.ts new file mode 100644 index 000000000..ab8d27fed --- /dev/null +++ b/packages/ingestion/model/sourceUpdateDocker.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SourceUpdateDocker = { + /** + * Configuration of the spec. + */ + configuration: Record; +}; diff --git a/packages/ingestion/model/sourceUpdateInput.ts b/packages/ingestion/model/sourceUpdateInput.ts new file mode 100644 index 000000000..1c669a438 --- /dev/null +++ b/packages/ingestion/model/sourceUpdateInput.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SourceBigQuery } from './sourceBigQuery'; +import type { SourceCSV } from './sourceCSV'; +import type { SourceGA4BigQueryExport } from './sourceGA4BigQueryExport'; +import type { SourceJSON } from './sourceJSON'; +import type { SourceUpdateCommercetools } from './sourceUpdateCommercetools'; +import type { SourceUpdateDocker } from './sourceUpdateDocker'; +import type { SourceUpdateShopify } from './sourceUpdateShopify'; + +export type SourceUpdateInput = + | SourceUpdateCommercetools + | SourceJSON + | SourceCSV + | SourceBigQuery + | SourceGA4BigQueryExport + | SourceUpdateDocker + | SourceUpdateShopify; diff --git a/packages/ingestion/model/sourceUpdateResponse.ts b/packages/ingestion/model/sourceUpdateResponse.ts new file mode 100644 index 000000000..2fbef0b1b --- /dev/null +++ b/packages/ingestion/model/sourceUpdateResponse.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SourceUpdateResponse = { + /** + * Universally uniqud identifier (UUID) of a source. + */ + sourceID: string; + + /** + * Descriptive name of the source. + */ + name: string; + + /** + * Date of last update in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/ingestion/model/sourceUpdateShopify.ts b/packages/ingestion/model/sourceUpdateShopify.ts new file mode 100644 index 000000000..ecbbe7849 --- /dev/null +++ b/packages/ingestion/model/sourceUpdateShopify.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SourceUpdateShopify = { + /** + * Feature flags for the Shopify source. + */ + featureFlags?: { [key: string]: any }; +}; diff --git a/packages/ingestion/model/streamingInput.ts b/packages/ingestion/model/streamingInput.ts new file mode 100644 index 000000000..ecd003dc5 --- /dev/null +++ b/packages/ingestion/model/streamingInput.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MappingInput } from './mappingInput'; + +/** + * Input for a `streaming` task whose source is of type `ga4BigqueryExport` and for which extracted data is continuously streamed. + */ +export type StreamingInput = { + mapping: MappingInput; +}; diff --git a/packages/ingestion/model/streamingTrigger.ts b/packages/ingestion/model/streamingTrigger.ts new file mode 100644 index 000000000..df5fee4ff --- /dev/null +++ b/packages/ingestion/model/streamingTrigger.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { StreamingTriggerType } from './streamingTriggerType'; + +/** + * Trigger input for continuously running tasks. + */ +export type StreamingTrigger = { + type: StreamingTriggerType; +}; diff --git a/packages/ingestion/model/streamingTriggerType.ts b/packages/ingestion/model/streamingTriggerType.ts new file mode 100644 index 000000000..218b70a24 --- /dev/null +++ b/packages/ingestion/model/streamingTriggerType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Task runs continuously. + */ +export type StreamingTriggerType = 'streaming'; diff --git a/packages/ingestion/model/subscriptionTrigger.ts b/packages/ingestion/model/subscriptionTrigger.ts new file mode 100644 index 000000000..a579c42c8 --- /dev/null +++ b/packages/ingestion/model/subscriptionTrigger.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SubscriptionTriggerType } from './subscriptionTriggerType'; + +/** + * Trigger input for subscription tasks. + */ +export type SubscriptionTrigger = { + type: SubscriptionTriggerType; +}; diff --git a/packages/ingestion/model/subscriptionTriggerType.ts b/packages/ingestion/model/subscriptionTriggerType.ts new file mode 100644 index 000000000..99d7fb416 --- /dev/null +++ b/packages/ingestion/model/subscriptionTriggerType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Task runs after receiving subscribed event. + */ +export type SubscriptionTriggerType = 'subscription'; diff --git a/packages/ingestion/model/task.ts b/packages/ingestion/model/task.ts new file mode 100644 index 000000000..fa0cadf81 --- /dev/null +++ b/packages/ingestion/model/task.ts @@ -0,0 +1,78 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ActionType } from './actionType'; +import type { Notifications } from './notifications'; +import type { Policies } from './policies'; +import type { TaskInput } from './taskInput'; + +export type Task = { + /** + * Universally unique identifier (UUID) of a task. + */ + taskID: string; + + /** + * Universally uniqud identifier (UUID) of a source. + */ + sourceID: string; + + /** + * Universally unique identifier (UUID) of a destination resource. + */ + destinationID: string; + + /** + * Cron expression for the task\'s schedule. + */ + cron?: string; + + /** + * The last time the scheduled task ran in RFC 3339 format. + */ + lastRun?: string; + + /** + * The next scheduled run of the task in RFC 3339 format. + */ + nextRun?: string; + + /** + * Owner of the resource. + */ + owner?: string | null; + + input?: TaskInput; + + /** + * Whether the task is enabled. + */ + enabled: boolean; + + /** + * Maximum accepted percentage of failures for a task run to finish successfully. + */ + failureThreshold?: number; + + action?: ActionType; + + subscriptionAction?: ActionType; + + /** + * Date of the last cursor in RFC 3339 format. + */ + cursor?: string; + + notifications?: Notifications; + + policies?: Policies; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; + + /** + * Date of last update in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/ingestion/model/taskCreate.ts b/packages/ingestion/model/taskCreate.ts new file mode 100644 index 000000000..ab9b7d933 --- /dev/null +++ b/packages/ingestion/model/taskCreate.ts @@ -0,0 +1,51 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ActionType } from './actionType'; +import type { Notifications } from './notifications'; +import type { Policies } from './policies'; +import type { TaskInput } from './taskInput'; + +/** + * API request body for creating a task. + */ +export type TaskCreate = { + /** + * Universally uniqud identifier (UUID) of a source. + */ + sourceID: string; + + /** + * Universally unique identifier (UUID) of a destination resource. + */ + destinationID: string; + + action: ActionType; + + subscriptionAction?: ActionType; + + /** + * Cron expression for the task\'s schedule. + */ + cron?: string; + + /** + * Whether the task is enabled. + */ + enabled?: boolean; + + /** + * Maximum accepted percentage of failures for a task run to finish successfully. + */ + failureThreshold?: number; + + input?: TaskInput; + + /** + * Date of the last cursor in RFC 3339 format. + */ + cursor?: string; + + notifications?: Notifications; + + policies?: Policies; +}; diff --git a/packages/ingestion/model/taskCreateResponse.ts b/packages/ingestion/model/taskCreateResponse.ts new file mode 100644 index 000000000..b0a4e4395 --- /dev/null +++ b/packages/ingestion/model/taskCreateResponse.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * API response for creating a task. + */ +export type TaskCreateResponse = { + /** + * Universally unique identifier (UUID) of a task. + */ + taskID: string; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; +}; diff --git a/packages/ingestion/model/taskCreateTrigger.ts b/packages/ingestion/model/taskCreateTrigger.ts new file mode 100644 index 000000000..f0b651223 --- /dev/null +++ b/packages/ingestion/model/taskCreateTrigger.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { OnDemandTriggerInput } from './onDemandTriggerInput'; +import type { ScheduleTriggerInput } from './scheduleTriggerInput'; +import type { StreamingTrigger } from './streamingTrigger'; + +import type { SubscriptionTrigger } from './subscriptionTrigger'; + +export type TaskCreateTrigger = OnDemandTriggerInput | ScheduleTriggerInput | SubscriptionTrigger | StreamingTrigger; diff --git a/packages/ingestion/model/taskCreateV1.ts b/packages/ingestion/model/taskCreateV1.ts new file mode 100644 index 000000000..3e420f750 --- /dev/null +++ b/packages/ingestion/model/taskCreateV1.ts @@ -0,0 +1,41 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ActionType } from './actionType'; +import type { TaskCreateTrigger } from './taskCreateTrigger'; +import type { TaskInput } from './taskInput'; + +/** + * API request body for creating a task using the V1 shape, please use methods and types that don\'t contain the V1 suffix. + */ +export type TaskCreateV1 = { + /** + * Universally uniqud identifier (UUID) of a source. + */ + sourceID: string; + + /** + * Universally unique identifier (UUID) of a destination resource. + */ + destinationID: string; + + trigger: TaskCreateTrigger; + + action: ActionType; + + /** + * Whether the task is enabled. + */ + enabled?: boolean; + + /** + * Maximum accepted percentage of failures for a task run to finish successfully. + */ + failureThreshold?: number; + + input?: TaskInput; + + /** + * Date of the last cursor in RFC 3339 format. + */ + cursor?: string; +}; diff --git a/packages/ingestion/model/taskInput.ts b/packages/ingestion/model/taskInput.ts new file mode 100644 index 000000000..d555eff25 --- /dev/null +++ b/packages/ingestion/model/taskInput.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { DockerStreamsInput } from './dockerStreamsInput'; + +import type { ShopifyInput } from './shopifyInput'; + +import type { StreamingInput } from './streamingInput'; + +/** + * Configuration of the task, depending on its type. + */ +export type TaskInput = StreamingInput | DockerStreamsInput | ShopifyInput; diff --git a/packages/ingestion/model/taskSearch.ts b/packages/ingestion/model/taskSearch.ts new file mode 100644 index 000000000..8ec874919 --- /dev/null +++ b/packages/ingestion/model/taskSearch.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type TaskSearch = { + taskIDs: Array; +}; diff --git a/packages/ingestion/model/taskSortKeys.ts b/packages/ingestion/model/taskSortKeys.ts new file mode 100644 index 000000000..457d011cc --- /dev/null +++ b/packages/ingestion/model/taskSortKeys.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Property by which to sort the list of tasks. + */ +export type TaskSortKeys = 'enabled' | 'triggerType' | 'action' | 'updatedAt' | 'createdAt'; diff --git a/packages/ingestion/model/taskUpdate.ts b/packages/ingestion/model/taskUpdate.ts new file mode 100644 index 000000000..8b188db33 --- /dev/null +++ b/packages/ingestion/model/taskUpdate.ts @@ -0,0 +1,39 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ActionType } from './actionType'; +import type { Notifications } from './notifications'; +import type { Policies } from './policies'; +import type { TaskInput } from './taskInput'; + +/** + * API request body for updating a task. + */ +export type TaskUpdate = { + /** + * Universally unique identifier (UUID) of a destination resource. + */ + destinationID?: string; + + /** + * Cron expression for the task\'s schedule. + */ + cron?: string; + + input?: TaskInput; + + /** + * Whether the task is enabled. + */ + enabled?: boolean; + + subscriptionAction?: ActionType; + + /** + * Maximum accepted percentage of failures for a task run to finish successfully. + */ + failureThreshold?: number; + + notifications?: Notifications; + + policies?: Policies; +}; diff --git a/packages/ingestion/model/taskUpdateResponse.ts b/packages/ingestion/model/taskUpdateResponse.ts new file mode 100644 index 000000000..9c0c72abf --- /dev/null +++ b/packages/ingestion/model/taskUpdateResponse.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * API response for updating a task. + */ +export type TaskUpdateResponse = { + /** + * Universally unique identifier (UUID) of a task. + */ + taskID: string; + + /** + * Date of last update in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/ingestion/model/taskUpdateV1.ts b/packages/ingestion/model/taskUpdateV1.ts new file mode 100644 index 000000000..9769c54be --- /dev/null +++ b/packages/ingestion/model/taskUpdateV1.ts @@ -0,0 +1,28 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TaskInput } from './taskInput'; +import type { TriggerUpdateInput } from './triggerUpdateInput'; + +/** + * API request body for updating a task using the V1 shape, please use methods and types that don\'t contain the V1 suffix. + */ +export type TaskUpdateV1 = { + /** + * Universally unique identifier (UUID) of a destination resource. + */ + destinationID?: string; + + trigger?: TriggerUpdateInput; + + input?: TaskInput; + + /** + * Whether the task is enabled. + */ + enabled?: boolean; + + /** + * Maximum accepted percentage of failures for a task run to finish successfully. + */ + failureThreshold?: number; +}; diff --git a/packages/ingestion/model/taskV1.ts b/packages/ingestion/model/taskV1.ts new file mode 100644 index 000000000..704549340 --- /dev/null +++ b/packages/ingestion/model/taskV1.ts @@ -0,0 +1,62 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ActionType } from './actionType'; +import type { Notifications } from './notifications'; +import type { Policies } from './policies'; +import type { TaskInput } from './taskInput'; +import type { Trigger } from './trigger'; + +/** + * The V1 task object, please use methods and types that don\'t contain the V1 suffix. + */ +export type TaskV1 = { + /** + * Universally unique identifier (UUID) of a task. + */ + taskID: string; + + /** + * Universally uniqud identifier (UUID) of a source. + */ + sourceID: string; + + /** + * Universally unique identifier (UUID) of a destination resource. + */ + destinationID: string; + + trigger: Trigger; + + input?: TaskInput; + + /** + * Whether the task is enabled. + */ + enabled: boolean; + + /** + * Maximum accepted percentage of failures for a task run to finish successfully. + */ + failureThreshold?: number; + + action?: ActionType; + + /** + * Date of the last cursor in RFC 3339 format. + */ + cursor?: string; + + notifications?: Notifications; + + policies?: Policies; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; + + /** + * Date of last update in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/ingestion/model/transformation.ts b/packages/ingestion/model/transformation.ts new file mode 100644 index 000000000..fad3c4d86 --- /dev/null +++ b/packages/ingestion/model/transformation.ts @@ -0,0 +1,43 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Transformation = { + /** + * Universally unique identifier (UUID) of a transformation. + */ + transformationID: string; + + /** + * The authentications associated with the current transformation. + */ + authenticationIDs?: Array; + + /** + * The source code of the transformation. + */ + code: string; + + /** + * The uniquely identified name of your transformation. + */ + name: string; + + /** + * A descriptive name for your transformation of what it does. + */ + description?: string; + + /** + * Owner of the resource. + */ + owner?: string | null; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; + + /** + * Date of last update in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/ingestion/model/transformationCreate.ts b/packages/ingestion/model/transformationCreate.ts new file mode 100644 index 000000000..263c9f0f0 --- /dev/null +++ b/packages/ingestion/model/transformationCreate.ts @@ -0,0 +1,26 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * API request body for creating a transformation. + */ +export type TransformationCreate = { + /** + * The source code of the transformation. + */ + code: string; + + /** + * The uniquely identified name of your transformation. + */ + name: string; + + /** + * A descriptive name for your transformation of what it does. + */ + description?: string; + + /** + * The authentications associated with the current transformation. + */ + authenticationIDs?: Array; +}; diff --git a/packages/ingestion/model/transformationCreateResponse.ts b/packages/ingestion/model/transformationCreateResponse.ts new file mode 100644 index 000000000..2eb7fe54b --- /dev/null +++ b/packages/ingestion/model/transformationCreateResponse.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * API response for creating a transformation. + */ +export type TransformationCreateResponse = { + /** + * Universally unique identifier (UUID) of a transformation. + */ + transformationID: string; + + /** + * Date of creation in RFC 3339 format. + */ + createdAt: string; +}; diff --git a/packages/ingestion/model/transformationError.ts b/packages/ingestion/model/transformationError.ts new file mode 100644 index 000000000..1974cf2a5 --- /dev/null +++ b/packages/ingestion/model/transformationError.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * The error if the transformation failed. + */ +export type TransformationError = { + /** + * The error status code. + */ + code?: number; + + /** + * A descriptive message explaining the failure. + */ + message?: string; +}; diff --git a/packages/ingestion/model/transformationSearch.ts b/packages/ingestion/model/transformationSearch.ts new file mode 100644 index 000000000..e57e44e0e --- /dev/null +++ b/packages/ingestion/model/transformationSearch.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type TransformationSearch = { + transformationIDs: Array; +}; diff --git a/packages/ingestion/model/transformationSortKeys.ts b/packages/ingestion/model/transformationSortKeys.ts new file mode 100644 index 000000000..b0c4cbb47 --- /dev/null +++ b/packages/ingestion/model/transformationSortKeys.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Property by which to sort the list of transformations. + */ +export type TransformationSortKeys = 'name' | 'updatedAt' | 'createdAt'; diff --git a/packages/ingestion/model/transformationTry.ts b/packages/ingestion/model/transformationTry.ts new file mode 100644 index 000000000..7bd732984 --- /dev/null +++ b/packages/ingestion/model/transformationTry.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AuthenticationCreate } from './authenticationCreate'; + +export type TransformationTry = { + /** + * The source code of the transformation. + */ + code: string; + + /** + * The record to apply the given code to. + */ + sampleRecord: Record; + + authentications?: Array; +}; diff --git a/packages/ingestion/model/transformationTryResponse.ts b/packages/ingestion/model/transformationTryResponse.ts new file mode 100644 index 000000000..e43c4a506 --- /dev/null +++ b/packages/ingestion/model/transformationTryResponse.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TransformationError } from './transformationError'; + +export type TransformationTryResponse = { + /** + * The array of stringified records returned by the transformation service. + */ + payloads: Array; + + error?: TransformationError; +}; diff --git a/packages/ingestion/model/transformationUpdateResponse.ts b/packages/ingestion/model/transformationUpdateResponse.ts new file mode 100644 index 000000000..0cd8cded7 --- /dev/null +++ b/packages/ingestion/model/transformationUpdateResponse.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * API response for updating a transformation. + */ +export type TransformationUpdateResponse = { + /** + * Universally unique identifier (UUID) of a transformation. + */ + transformationID: string; + + /** + * Date of last update in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/ingestion/model/trigger.ts b/packages/ingestion/model/trigger.ts new file mode 100644 index 000000000..b3a76193e --- /dev/null +++ b/packages/ingestion/model/trigger.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { OnDemandTrigger } from './onDemandTrigger'; +import type { ScheduleTrigger } from './scheduleTrigger'; +import type { StreamingTrigger } from './streamingTrigger'; + +import type { SubscriptionTrigger } from './subscriptionTrigger'; + +/** + * Trigger that runs the task. + */ +export type Trigger = OnDemandTrigger | ScheduleTrigger | SubscriptionTrigger | StreamingTrigger; diff --git a/packages/ingestion/model/triggerType.ts b/packages/ingestion/model/triggerType.ts new file mode 100644 index 000000000..5c9a3b782 --- /dev/null +++ b/packages/ingestion/model/triggerType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Task trigger, describing when a task should run. - `onDemand`. Manually trigger the task with the `/run` endpoint. - `schedule`. Regularly trigger the task on a `cron` schedule. - `subscription`. Trigger the task after an event is received, such as, a webhook. - `streaming`. Run the task continuously. + */ +export type TriggerType = 'onDemand' | 'schedule' | 'subscription' | 'streaming'; diff --git a/packages/ingestion/model/triggerUpdateInput.ts b/packages/ingestion/model/triggerUpdateInput.ts new file mode 100644 index 000000000..9179499b0 --- /dev/null +++ b/packages/ingestion/model/triggerUpdateInput.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Trigger for a task update. + */ +export type TriggerUpdateInput = { + /** + * Cron expression for the task\'s schedule. + */ + cron: string; +}; diff --git a/packages/ingestion/model/watchResponse.ts b/packages/ingestion/model/watchResponse.ts new file mode 100644 index 000000000..1f3974906 --- /dev/null +++ b/packages/ingestion/model/watchResponse.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Event } from './event'; + +export type WatchResponse = { + /** + * Universally unique identifier (UUID) of a task run. + */ + runID: string; + + /** + * when used with discovering or validating sources, the sampled data of your source is returned. + */ + data?: Array>; + + /** + * in case of error, observability events will be added to the response, if any. + */ + events?: Array; + + /** + * a message describing the outcome of a validate run. + */ + message?: string; +}; diff --git a/packages/ingestion/model/window.ts b/packages/ingestion/model/window.ts new file mode 100644 index 000000000..3a56bd15e --- /dev/null +++ b/packages/ingestion/model/window.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Time window by which to filter the observability data. + */ +export type Window = { + /** + * Date in RFC 3339 format representing the oldest data in the time window. + */ + startDate: string; + + /** + * Date in RFC 3339 format representing the newest data in the time window. + */ + endDate: string; +}; diff --git a/packages/ingestion/package.json b/packages/ingestion/package.json new file mode 100644 index 000000000..c65cf2878 --- /dev/null +++ b/packages/ingestion/package.json @@ -0,0 +1,68 @@ +{ + "version": "1.23.3", + "repository": { + "type": "git", + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/ingestion#readme", + "type": "module", + "license": "MIT", + "author": "Algolia", + "scripts": { + "build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js", + "clean": "rm -rf ./dist || true", + "test:bundle": "publint . && attw --pack ." + }, + "name": "@algolia/ingestion", + "description": "JavaScript client for ingestion", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/builds/node.js", + "module": "./dist/builds/node.js", + "require": "./dist/builds/node.cjs" + }, + "worker": { + "types": "./dist/worker.d.ts", + "default": "./dist/builds/worker.js" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/builds/browser.js", + "import": "./dist/builds/browser.js", + "default": "./dist/builds/browser.umd.js" + } + }, + "./dist/builds/*": "./dist/builds/*.js" + }, + "jsdelivr": "./dist/builds/browser.umd.js", + "unpkg": "./dist/builds/browser.umd.js", + "react-native": "./dist/builds/browser.js", + "files": [ + "dist", + "index.js", + "index.d.ts" + ], + "dependencies": { + "@algolia/client-common": "5.23.3", + "@algolia/requester-browser-xhr": "5.23.3", + "@algolia/requester-fetch": "5.23.3", + "@algolia/requester-node-http": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "publint": "0.3.10", + "rollup": "4.39.0", + "tsup": "8.4.0", + "typescript": "5.8.3" + }, + "engines": { + "node": ">= 14.0.0" + } +} diff --git a/packages/ingestion/rollup.config.js b/packages/ingestion/rollup.config.js new file mode 100644 index 000000000..a464798e4 --- /dev/null +++ b/packages/ingestion/rollup.config.js @@ -0,0 +1,17 @@ +export default [ + { + input: 'dist/builds/browser.min.js', + external: ['dom'], + cache: false, + output: { + esModule: false, + file: 'dist/builds/browser.umd.js', + name: '@algolia/ingestion', + format: 'umd', + sourcemap: false, + globals: { + ['ingestionClient']: 'ingestionClient', + }, + }, + }, +]; diff --git a/packages/ingestion/src/ingestionClient.ts b/packages/ingestion/src/ingestionClient.ts new file mode 100644 index 000000000..dfc149ab5 --- /dev/null +++ b/packages/ingestion/src/ingestionClient.ts @@ -0,0 +1,2537 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { + CreateClientOptions, + Headers, + Host, + QueryParameters, + Request, + RequestOptions, +} from '@algolia/client-common'; +import { createAuth, createTransporter, getAlgoliaAgent } from '@algolia/client-common'; + +import type { Authentication } from '../model/authentication'; +import type { AuthenticationCreate } from '../model/authenticationCreate'; +import type { AuthenticationCreateResponse } from '../model/authenticationCreateResponse'; +import type { AuthenticationSearch } from '../model/authenticationSearch'; + +import type { AuthenticationUpdateResponse } from '../model/authenticationUpdateResponse'; +import type { DeleteResponse } from '../model/deleteResponse'; +import type { Destination } from '../model/destination'; +import type { DestinationCreate } from '../model/destinationCreate'; +import type { DestinationCreateResponse } from '../model/destinationCreateResponse'; +import type { DestinationSearch } from '../model/destinationSearch'; + +import type { DestinationUpdateResponse } from '../model/destinationUpdateResponse'; + +import type { Event } from '../model/event'; + +import type { ListAuthenticationsResponse } from '../model/listAuthenticationsResponse'; +import type { ListDestinationsResponse } from '../model/listDestinationsResponse'; +import type { ListEventsResponse } from '../model/listEventsResponse'; +import type { ListSourcesResponse } from '../model/listSourcesResponse'; +import type { ListTasksResponse } from '../model/listTasksResponse'; +import type { ListTasksResponseV1 } from '../model/listTasksResponseV1'; +import type { ListTransformationsResponse } from '../model/listTransformationsResponse'; + +import type { Run } from '../model/run'; +import type { RunListResponse } from '../model/runListResponse'; +import type { RunResponse } from '../model/runResponse'; + +import type { RunSourceResponse } from '../model/runSourceResponse'; + +import type { Source } from '../model/source'; +import type { SourceCreate } from '../model/sourceCreate'; +import type { SourceCreateResponse } from '../model/sourceCreateResponse'; +import type { SourceSearch } from '../model/sourceSearch'; + +import type { SourceUpdateResponse } from '../model/sourceUpdateResponse'; +import type { Task } from '../model/task'; +import type { TaskCreate } from '../model/taskCreate'; +import type { TaskCreateResponse } from '../model/taskCreateResponse'; +import type { TaskCreateV1 } from '../model/taskCreateV1'; +import type { TaskSearch } from '../model/taskSearch'; + +import type { TaskUpdateResponse } from '../model/taskUpdateResponse'; + +import type { TaskV1 } from '../model/taskV1'; +import type { Transformation } from '../model/transformation'; +import type { TransformationCreate } from '../model/transformationCreate'; +import type { TransformationCreateResponse } from '../model/transformationCreateResponse'; +import type { TransformationSearch } from '../model/transformationSearch'; + +import type { TransformationTry } from '../model/transformationTry'; +import type { TransformationTryResponse } from '../model/transformationTryResponse'; +import type { TransformationUpdateResponse } from '../model/transformationUpdateResponse'; + +import type { WatchResponse } from '../model/watchResponse'; + +import type { + CustomDeleteProps, + CustomGetProps, + CustomPostProps, + CustomPutProps, + DeleteAuthenticationProps, + DeleteDestinationProps, + DeleteSourceProps, + DeleteTaskProps, + DeleteTaskV1Props, + DeleteTransformationProps, + DisableTaskProps, + DisableTaskV1Props, + EnableTaskProps, + EnableTaskV1Props, + GetAuthenticationProps, + GetDestinationProps, + GetEventProps, + GetRunProps, + GetSourceProps, + GetTaskProps, + GetTaskV1Props, + GetTransformationProps, + ListAuthenticationsProps, + ListDestinationsProps, + ListEventsProps, + ListRunsProps, + ListSourcesProps, + ListTasksProps, + ListTasksV1Props, + ListTransformationsProps, + PushTaskProps, + RunSourceProps, + RunTaskProps, + RunTaskV1Props, + TriggerDockerSourceDiscoverProps, + TryTransformationBeforeUpdateProps, + UpdateAuthenticationProps, + UpdateDestinationProps, + UpdateSourceProps, + UpdateTaskProps, + UpdateTaskV1Props, + UpdateTransformationProps, + ValidateSourceBeforeUpdateProps, +} from '../model/clientMethodProps'; + +import type { OnDemandTrigger } from '../model/onDemandTrigger'; +import type { ScheduleTrigger } from '../model/scheduleTrigger'; +import type { SubscriptionTrigger } from '../model/subscriptionTrigger'; +import type { TaskCreateTrigger } from '../model/taskCreateTrigger'; +import type { Trigger } from '../model/trigger'; + +export const apiClientVersion = '1.23.3'; + +export const REGIONS = ['eu', 'us'] as const; +export type Region = (typeof REGIONS)[number]; +export type RegionOptions = { region: Region }; + +function getDefaultHosts(region: Region): Host[] { + const url = 'data.{region}.algolia.com'.replace('{region}', region); + + return [{ url, accept: 'readWrite', protocol: 'https' }]; +} + +/** + * Guard: Return strongly typed specific OnDemandTrigger for a given Trigger. + * + * @summary Guard method that returns a strongly typed specific OnDemandTrigger for a given Trigger. + * @param trigger - The given Task Trigger. + */ +export function isOnDemandTrigger(trigger: TaskCreateTrigger | Trigger): trigger is OnDemandTrigger { + return trigger.type === 'onDemand'; +} + +/** + * Guard: Return strongly typed specific ScheduleTrigger for a given Trigger. + * + * @summary Guard method that returns a strongly typed specific ScheduleTrigger for a given Trigger. + * @param trigger - The given Task Trigger. + */ +export function isScheduleTrigger(trigger: TaskCreateTrigger | Trigger): trigger is ScheduleTrigger { + return trigger.type === 'schedule'; +} + +/** + * Guard: Return strongly typed specific SubscriptionTrigger for a given Trigger. + * + * @summary Guard method that returns a strongly typed specific SubscriptionTrigger for a given Trigger. + * @param trigger - The given Task Trigger. + */ +export function isSubscriptionTrigger(trigger: TaskCreateTrigger | Trigger): trigger is SubscriptionTrigger { + return trigger.type === 'subscription'; +} + +export function createIngestionClient({ + appId: appIdOption, + apiKey: apiKeyOption, + authMode, + algoliaAgents, + region: regionOption, + ...options +}: CreateClientOptions & RegionOptions) { + const auth = createAuth(appIdOption, apiKeyOption, authMode); + const transporter = createTransporter({ + hosts: getDefaultHosts(regionOption), + ...options, + algoliaAgent: getAlgoliaAgent({ + algoliaAgents, + client: 'Ingestion', + version: apiClientVersion, + }), + baseHeaders: { + 'content-type': 'text/plain', + ...auth.headers(), + ...options.baseHeaders, + }, + baseQueryParameters: { + ...auth.queryParameters(), + ...options.baseQueryParameters, + }, + }); + + return { + transporter, + + /** + * The `appId` currently in use. + */ + appId: appIdOption, + + /** + * The `apiKey` currently in use. + */ + apiKey: apiKeyOption, + + /** + * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties. + */ + clearCache(): Promise { + return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => undefined); + }, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return transporter.algoliaAgent.value; + }, + + /** + * Adds a `segment` to the `x-algolia-agent` sent with every requests. + * + * @param segment - The algolia agent (user-agent) segment to add. + * @param version - The version of the agent. + */ + addAlgoliaAgent(segment: string, version?: string): void { + transporter.algoliaAgent.add({ segment, version }); + }, + + /** + * Helper method to switch the API key used to authenticate the requests. + * + * @param params - Method params. + * @param params.apiKey - The new API Key to use. + */ + setClientApiKey({ apiKey }: { apiKey: string }): void { + if (!authMode || authMode === 'WithinHeaders') { + transporter.baseHeaders['x-algolia-api-key'] = apiKey; + } else { + transporter.baseQueryParameters['x-algolia-api-key'] = apiKey; + } + }, + + /** + * Creates a new authentication resource. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param authenticationCreate - + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + createAuthentication( + authenticationCreate: AuthenticationCreate, + requestOptions?: RequestOptions, + ): Promise { + if (!authenticationCreate) { + throw new Error('Parameter `authenticationCreate` is required when calling `createAuthentication`.'); + } + + if (!authenticationCreate.type) { + throw new Error('Parameter `authenticationCreate.type` is required when calling `createAuthentication`.'); + } + if (!authenticationCreate.name) { + throw new Error('Parameter `authenticationCreate.name` is required when calling `createAuthentication`.'); + } + if (!authenticationCreate.input) { + throw new Error('Parameter `authenticationCreate.input` is required when calling `createAuthentication`.'); + } + + const requestPath = '/1/authentications'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: authenticationCreate, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Creates a new destination. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param destinationCreate - + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + createDestination( + destinationCreate: DestinationCreate, + requestOptions?: RequestOptions, + ): Promise { + if (!destinationCreate) { + throw new Error('Parameter `destinationCreate` is required when calling `createDestination`.'); + } + + if (!destinationCreate.type) { + throw new Error('Parameter `destinationCreate.type` is required when calling `createDestination`.'); + } + if (!destinationCreate.name) { + throw new Error('Parameter `destinationCreate.name` is required when calling `createDestination`.'); + } + if (!destinationCreate.input) { + throw new Error('Parameter `destinationCreate.input` is required when calling `createDestination`.'); + } + + const requestPath = '/1/destinations'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: destinationCreate, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Creates a new source. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param sourceCreate - + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + createSource(sourceCreate: SourceCreate, requestOptions?: RequestOptions): Promise { + if (!sourceCreate) { + throw new Error('Parameter `sourceCreate` is required when calling `createSource`.'); + } + + if (!sourceCreate.type) { + throw new Error('Parameter `sourceCreate.type` is required when calling `createSource`.'); + } + if (!sourceCreate.name) { + throw new Error('Parameter `sourceCreate.name` is required when calling `createSource`.'); + } + + const requestPath = '/1/sources'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: sourceCreate, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Creates a new task. + * @param taskCreate - Request body for creating a task. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + createTask(taskCreate: TaskCreate, requestOptions?: RequestOptions): Promise { + if (!taskCreate) { + throw new Error('Parameter `taskCreate` is required when calling `createTask`.'); + } + + if (!taskCreate.sourceID) { + throw new Error('Parameter `taskCreate.sourceID` is required when calling `createTask`.'); + } + if (!taskCreate.destinationID) { + throw new Error('Parameter `taskCreate.destinationID` is required when calling `createTask`.'); + } + if (!taskCreate.action) { + throw new Error('Parameter `taskCreate.action` is required when calling `createTask`.'); + } + + const requestPath = '/2/tasks'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: taskCreate, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Creates a new task using the v1 endpoint, please use `createTask` instead. + * + * @deprecated + * @param taskCreate - Request body for creating a task. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + createTaskV1(taskCreate: TaskCreateV1, requestOptions?: RequestOptions): Promise { + if (!taskCreate) { + throw new Error('Parameter `taskCreate` is required when calling `createTaskV1`.'); + } + + if (!taskCreate.sourceID) { + throw new Error('Parameter `taskCreate.sourceID` is required when calling `createTaskV1`.'); + } + if (!taskCreate.destinationID) { + throw new Error('Parameter `taskCreate.destinationID` is required when calling `createTaskV1`.'); + } + if (!taskCreate.trigger) { + throw new Error('Parameter `taskCreate.trigger` is required when calling `createTaskV1`.'); + } + if (!taskCreate.action) { + throw new Error('Parameter `taskCreate.action` is required when calling `createTaskV1`.'); + } + + const requestPath = '/1/tasks'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: taskCreate, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Creates a new transformation. + * @param transformationCreate - Request body for creating a transformation. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + createTransformation( + transformationCreate: TransformationCreate, + requestOptions?: RequestOptions, + ): Promise { + if (!transformationCreate) { + throw new Error('Parameter `transformationCreate` is required when calling `createTransformation`.'); + } + + if (!transformationCreate.code) { + throw new Error('Parameter `transformationCreate.code` is required when calling `createTransformation`.'); + } + if (!transformationCreate.name) { + throw new Error('Parameter `transformationCreate.name` is required when calling `createTransformation`.'); + } + + const requestPath = '/1/transformations'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: transformationCreate, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customDelete - The customDelete object. + * @param customDelete.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customDelete.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customDelete( + { path, parameters }: CustomDeleteProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customDelete`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customGet - The customGet object. + * @param customGet.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customGet.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customGet({ path, parameters }: CustomGetProps, requestOptions?: RequestOptions): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customGet`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPost - The customPost object. + * @param customPost.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPost.parameters - Query parameters to apply to the current query. + * @param customPost.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPost( + { path, parameters, body }: CustomPostProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPost`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPut - The customPut object. + * @param customPut.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPut.parameters - Query parameters to apply to the current query. + * @param customPut.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPut( + { path, parameters, body }: CustomPutProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPut`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes an authentication resource. You can\'t delete authentication resources that are used by a source or a destination. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param deleteAuthentication - The deleteAuthentication object. + * @param deleteAuthentication.authenticationID - Unique identifier of an authentication resource. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteAuthentication( + { authenticationID }: DeleteAuthenticationProps, + requestOptions?: RequestOptions, + ): Promise { + if (!authenticationID) { + throw new Error('Parameter `authenticationID` is required when calling `deleteAuthentication`.'); + } + + const requestPath = '/1/authentications/{authenticationID}'.replace( + '{authenticationID}', + encodeURIComponent(authenticationID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes a destination by its ID. You can\'t delete destinations that are referenced in tasks. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param deleteDestination - The deleteDestination object. + * @param deleteDestination.destinationID - Unique identifier of a destination. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteDestination( + { destinationID }: DeleteDestinationProps, + requestOptions?: RequestOptions, + ): Promise { + if (!destinationID) { + throw new Error('Parameter `destinationID` is required when calling `deleteDestination`.'); + } + + const requestPath = '/1/destinations/{destinationID}'.replace( + '{destinationID}', + encodeURIComponent(destinationID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes a source by its ID. You can\'t delete sources that are referenced in tasks. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param deleteSource - The deleteSource object. + * @param deleteSource.sourceID - Unique identifier of a source. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteSource({ sourceID }: DeleteSourceProps, requestOptions?: RequestOptions): Promise { + if (!sourceID) { + throw new Error('Parameter `sourceID` is required when calling `deleteSource`.'); + } + + const requestPath = '/1/sources/{sourceID}'.replace('{sourceID}', encodeURIComponent(sourceID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes a task by its ID. + * @param deleteTask - The deleteTask object. + * @param deleteTask.taskID - Unique identifier of a task. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteTask({ taskID }: DeleteTaskProps, requestOptions?: RequestOptions): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `deleteTask`.'); + } + + const requestPath = '/2/tasks/{taskID}'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes a task by its ID using the v1 endpoint, please use `deleteTask` instead. + * + * @deprecated + * @param deleteTaskV1 - The deleteTaskV1 object. + * @param deleteTaskV1.taskID - Unique identifier of a task. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteTaskV1({ taskID }: DeleteTaskV1Props, requestOptions?: RequestOptions): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `deleteTaskV1`.'); + } + + const requestPath = '/1/tasks/{taskID}'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes a transformation by its ID. + * @param deleteTransformation - The deleteTransformation object. + * @param deleteTransformation.transformationID - Unique identifier of a transformation. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteTransformation( + { transformationID }: DeleteTransformationProps, + requestOptions?: RequestOptions, + ): Promise { + if (!transformationID) { + throw new Error('Parameter `transformationID` is required when calling `deleteTransformation`.'); + } + + const requestPath = '/1/transformations/{transformationID}'.replace( + '{transformationID}', + encodeURIComponent(transformationID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Disables a task. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param disableTask - The disableTask object. + * @param disableTask.taskID - Unique identifier of a task. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + disableTask({ taskID }: DisableTaskProps, requestOptions?: RequestOptions): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `disableTask`.'); + } + + const requestPath = '/2/tasks/{taskID}/disable'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Disables a task using the v1 endpoint, please use `disableTask` instead. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * + * @deprecated + * @param disableTaskV1 - The disableTaskV1 object. + * @param disableTaskV1.taskID - Unique identifier of a task. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + disableTaskV1({ taskID }: DisableTaskV1Props, requestOptions?: RequestOptions): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `disableTaskV1`.'); + } + + const requestPath = '/1/tasks/{taskID}/disable'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Enables a task. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param enableTask - The enableTask object. + * @param enableTask.taskID - Unique identifier of a task. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + enableTask({ taskID }: EnableTaskProps, requestOptions?: RequestOptions): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `enableTask`.'); + } + + const requestPath = '/2/tasks/{taskID}/enable'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Enables a task using the v1 endpoint, please use `enableTask` instead. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * + * @deprecated + * @param enableTaskV1 - The enableTaskV1 object. + * @param enableTaskV1.taskID - Unique identifier of a task. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + enableTaskV1({ taskID }: EnableTaskV1Props, requestOptions?: RequestOptions): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `enableTaskV1`.'); + } + + const requestPath = '/1/tasks/{taskID}/enable'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves an authentication resource by its ID. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param getAuthentication - The getAuthentication object. + * @param getAuthentication.authenticationID - Unique identifier of an authentication resource. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getAuthentication( + { authenticationID }: GetAuthenticationProps, + requestOptions?: RequestOptions, + ): Promise { + if (!authenticationID) { + throw new Error('Parameter `authenticationID` is required when calling `getAuthentication`.'); + } + + const requestPath = '/1/authentications/{authenticationID}'.replace( + '{authenticationID}', + encodeURIComponent(authenticationID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a destination by its ID. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param getDestination - The getDestination object. + * @param getDestination.destinationID - Unique identifier of a destination. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getDestination({ destinationID }: GetDestinationProps, requestOptions?: RequestOptions): Promise { + if (!destinationID) { + throw new Error('Parameter `destinationID` is required when calling `getDestination`.'); + } + + const requestPath = '/1/destinations/{destinationID}'.replace( + '{destinationID}', + encodeURIComponent(destinationID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a single task run event by its ID. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param getEvent - The getEvent object. + * @param getEvent.runID - Unique identifier of a task run. + * @param getEvent.eventID - Unique identifier of an event. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getEvent({ runID, eventID }: GetEventProps, requestOptions?: RequestOptions): Promise { + if (!runID) { + throw new Error('Parameter `runID` is required when calling `getEvent`.'); + } + + if (!eventID) { + throw new Error('Parameter `eventID` is required when calling `getEvent`.'); + } + + const requestPath = '/1/runs/{runID}/events/{eventID}' + .replace('{runID}', encodeURIComponent(runID)) + .replace('{eventID}', encodeURIComponent(eventID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieve a single task run by its ID. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param getRun - The getRun object. + * @param getRun.runID - Unique identifier of a task run. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getRun({ runID }: GetRunProps, requestOptions?: RequestOptions): Promise { + if (!runID) { + throw new Error('Parameter `runID` is required when calling `getRun`.'); + } + + const requestPath = '/1/runs/{runID}'.replace('{runID}', encodeURIComponent(runID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieve a source by its ID. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param getSource - The getSource object. + * @param getSource.sourceID - Unique identifier of a source. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getSource({ sourceID }: GetSourceProps, requestOptions?: RequestOptions): Promise { + if (!sourceID) { + throw new Error('Parameter `sourceID` is required when calling `getSource`.'); + } + + const requestPath = '/1/sources/{sourceID}'.replace('{sourceID}', encodeURIComponent(sourceID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a task by its ID. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param getTask - The getTask object. + * @param getTask.taskID - Unique identifier of a task. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getTask({ taskID }: GetTaskProps, requestOptions?: RequestOptions): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `getTask`.'); + } + + const requestPath = '/2/tasks/{taskID}'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a task by its ID using the v1 endpoint, please use `getTask` instead. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * + * @deprecated + * @param getTaskV1 - The getTaskV1 object. + * @param getTaskV1.taskID - Unique identifier of a task. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getTaskV1({ taskID }: GetTaskV1Props, requestOptions?: RequestOptions): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `getTaskV1`.'); + } + + const requestPath = '/1/tasks/{taskID}'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a transformation by its ID. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param getTransformation - The getTransformation object. + * @param getTransformation.transformationID - Unique identifier of a transformation. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getTransformation( + { transformationID }: GetTransformationProps, + requestOptions?: RequestOptions, + ): Promise { + if (!transformationID) { + throw new Error('Parameter `transformationID` is required when calling `getTransformation`.'); + } + + const requestPath = '/1/transformations/{transformationID}'.replace( + '{transformationID}', + encodeURIComponent(transformationID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a list of all authentication resources. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param listAuthentications - The listAuthentications object. + * @param listAuthentications.itemsPerPage - Number of items per page. + * @param listAuthentications.page - Page number of the paginated API response. + * @param listAuthentications.type - Type of authentication resource to retrieve. + * @param listAuthentications.platform - Ecommerce platform for which to retrieve authentications. + * @param listAuthentications.sort - Property by which to sort the list of authentications. + * @param listAuthentications.order - Sort order of the response, ascending or descending. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listAuthentications( + { itemsPerPage, page, type, platform, sort, order }: ListAuthenticationsProps = {}, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/1/authentications'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (itemsPerPage !== undefined) { + queryParameters['itemsPerPage'] = itemsPerPage.toString(); + } + + if (page !== undefined) { + queryParameters['page'] = page.toString(); + } + + if (type !== undefined) { + queryParameters['type'] = type.toString(); + } + + if (platform !== undefined) { + queryParameters['platform'] = platform.toString(); + } + + if (sort !== undefined) { + queryParameters['sort'] = sort.toString(); + } + + if (order !== undefined) { + queryParameters['order'] = order.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a list of destinations. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param listDestinations - The listDestinations object. + * @param listDestinations.itemsPerPage - Number of items per page. + * @param listDestinations.page - Page number of the paginated API response. + * @param listDestinations.type - Destination type. + * @param listDestinations.authenticationID - Authentication ID used by destinations. + * @param listDestinations.transformationID - Get the list of destinations used by a transformation. + * @param listDestinations.sort - Property by which to sort the destinations. + * @param listDestinations.order - Sort order of the response, ascending or descending. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listDestinations( + { itemsPerPage, page, type, authenticationID, transformationID, sort, order }: ListDestinationsProps = {}, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/1/destinations'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (itemsPerPage !== undefined) { + queryParameters['itemsPerPage'] = itemsPerPage.toString(); + } + + if (page !== undefined) { + queryParameters['page'] = page.toString(); + } + + if (type !== undefined) { + queryParameters['type'] = type.toString(); + } + + if (authenticationID !== undefined) { + queryParameters['authenticationID'] = authenticationID.toString(); + } + + if (transformationID !== undefined) { + queryParameters['transformationID'] = transformationID.toString(); + } + + if (sort !== undefined) { + queryParameters['sort'] = sort.toString(); + } + + if (order !== undefined) { + queryParameters['order'] = order.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a list of events for a task run, identified by its ID. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param listEvents - The listEvents object. + * @param listEvents.runID - Unique identifier of a task run. + * @param listEvents.itemsPerPage - Number of items per page. + * @param listEvents.page - Page number of the paginated API response. + * @param listEvents.status - Event status for filtering the list of task runs. + * @param listEvents.type - Event type for filtering the list of task runs. + * @param listEvents.sort - Property by which to sort the list of task run events. + * @param listEvents.order - Sort order of the response, ascending or descending. + * @param listEvents.startDate - Date and time in RFC 3339 format for the earliest events to retrieve. By default, the current time minus three hours is used. + * @param listEvents.endDate - Date and time in RFC 3339 format for the latest events to retrieve. By default, the current time is used. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listEvents( + { runID, itemsPerPage, page, status, type, sort, order, startDate, endDate }: ListEventsProps, + requestOptions?: RequestOptions, + ): Promise { + if (!runID) { + throw new Error('Parameter `runID` is required when calling `listEvents`.'); + } + + const requestPath = '/1/runs/{runID}/events'.replace('{runID}', encodeURIComponent(runID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (itemsPerPage !== undefined) { + queryParameters['itemsPerPage'] = itemsPerPage.toString(); + } + + if (page !== undefined) { + queryParameters['page'] = page.toString(); + } + + if (status !== undefined) { + queryParameters['status'] = status.toString(); + } + + if (type !== undefined) { + queryParameters['type'] = type.toString(); + } + + if (sort !== undefined) { + queryParameters['sort'] = sort.toString(); + } + + if (order !== undefined) { + queryParameters['order'] = order.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieve a list of task runs. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param listRuns - The listRuns object. + * @param listRuns.itemsPerPage - Number of items per page. + * @param listRuns.page - Page number of the paginated API response. + * @param listRuns.status - Run status for filtering the list of task runs. + * @param listRuns.type - Run type for filtering the list of task runs. + * @param listRuns.taskID - Task ID for filtering the list of task runs. + * @param listRuns.sort - Property by which to sort the list of task runs. + * @param listRuns.order - Sort order of the response, ascending or descending. + * @param listRuns.startDate - Date in RFC 3339 format for the earliest run to retrieve. By default, the current day minus seven days is used. + * @param listRuns.endDate - Date in RFC 3339 format for the latest run to retrieve. By default, the current day is used. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listRuns( + { itemsPerPage, page, status, type, taskID, sort, order, startDate, endDate }: ListRunsProps = {}, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/1/runs'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (itemsPerPage !== undefined) { + queryParameters['itemsPerPage'] = itemsPerPage.toString(); + } + + if (page !== undefined) { + queryParameters['page'] = page.toString(); + } + + if (status !== undefined) { + queryParameters['status'] = status.toString(); + } + + if (type !== undefined) { + queryParameters['type'] = type.toString(); + } + + if (taskID !== undefined) { + queryParameters['taskID'] = taskID.toString(); + } + + if (sort !== undefined) { + queryParameters['sort'] = sort.toString(); + } + + if (order !== undefined) { + queryParameters['order'] = order.toString(); + } + + if (startDate !== undefined) { + queryParameters['startDate'] = startDate.toString(); + } + + if (endDate !== undefined) { + queryParameters['endDate'] = endDate.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a list of sources. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param listSources - The listSources object. + * @param listSources.itemsPerPage - Number of items per page. + * @param listSources.page - Page number of the paginated API response. + * @param listSources.type - Source type. Some sources require authentication. + * @param listSources.authenticationID - Authentication IDs of the sources to retrieve. \'none\' returns sources that doesn\'t have an authentication. + * @param listSources.sort - Property by which to sort the list of sources. + * @param listSources.order - Sort order of the response, ascending or descending. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listSources( + { itemsPerPage, page, type, authenticationID, sort, order }: ListSourcesProps = {}, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/1/sources'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (itemsPerPage !== undefined) { + queryParameters['itemsPerPage'] = itemsPerPage.toString(); + } + + if (page !== undefined) { + queryParameters['page'] = page.toString(); + } + + if (type !== undefined) { + queryParameters['type'] = type.toString(); + } + + if (authenticationID !== undefined) { + queryParameters['authenticationID'] = authenticationID.toString(); + } + + if (sort !== undefined) { + queryParameters['sort'] = sort.toString(); + } + + if (order !== undefined) { + queryParameters['order'] = order.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a list of tasks. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param listTasks - The listTasks object. + * @param listTasks.itemsPerPage - Number of items per page. + * @param listTasks.page - Page number of the paginated API response. + * @param listTasks.action - Actions for filtering the list of tasks. + * @param listTasks.enabled - Whether to filter the list of tasks by the `enabled` status. + * @param listTasks.sourceID - Source IDs for filtering the list of tasks. + * @param listTasks.sourceType - Filters the tasks with the specified source type. + * @param listTasks.destinationID - Destination IDs for filtering the list of tasks. + * @param listTasks.triggerType - Type of task trigger for filtering the list of tasks. + * @param listTasks.withEmailNotifications - If specified, the response only includes tasks with notifications.email.enabled set to this value. + * @param listTasks.sort - Property by which to sort the list of tasks. + * @param listTasks.order - Sort order of the response, ascending or descending. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listTasks( + { + itemsPerPage, + page, + action, + enabled, + sourceID, + sourceType, + destinationID, + triggerType, + withEmailNotifications, + sort, + order, + }: ListTasksProps = {}, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/2/tasks'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (itemsPerPage !== undefined) { + queryParameters['itemsPerPage'] = itemsPerPage.toString(); + } + + if (page !== undefined) { + queryParameters['page'] = page.toString(); + } + + if (action !== undefined) { + queryParameters['action'] = action.toString(); + } + + if (enabled !== undefined) { + queryParameters['enabled'] = enabled.toString(); + } + + if (sourceID !== undefined) { + queryParameters['sourceID'] = sourceID.toString(); + } + + if (sourceType !== undefined) { + queryParameters['sourceType'] = sourceType.toString(); + } + + if (destinationID !== undefined) { + queryParameters['destinationID'] = destinationID.toString(); + } + + if (triggerType !== undefined) { + queryParameters['triggerType'] = triggerType.toString(); + } + + if (withEmailNotifications !== undefined) { + queryParameters['withEmailNotifications'] = withEmailNotifications.toString(); + } + + if (sort !== undefined) { + queryParameters['sort'] = sort.toString(); + } + + if (order !== undefined) { + queryParameters['order'] = order.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a list of tasks using the v1 endpoint, please use `getTasks` instead. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * + * @deprecated + * @param listTasksV1 - The listTasksV1 object. + * @param listTasksV1.itemsPerPage - Number of items per page. + * @param listTasksV1.page - Page number of the paginated API response. + * @param listTasksV1.action - Actions for filtering the list of tasks. + * @param listTasksV1.enabled - Whether to filter the list of tasks by the `enabled` status. + * @param listTasksV1.sourceID - Source IDs for filtering the list of tasks. + * @param listTasksV1.destinationID - Destination IDs for filtering the list of tasks. + * @param listTasksV1.triggerType - Type of task trigger for filtering the list of tasks. + * @param listTasksV1.sort - Property by which to sort the list of tasks. + * @param listTasksV1.order - Sort order of the response, ascending or descending. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listTasksV1( + { itemsPerPage, page, action, enabled, sourceID, destinationID, triggerType, sort, order }: ListTasksV1Props = {}, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/1/tasks'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (itemsPerPage !== undefined) { + queryParameters['itemsPerPage'] = itemsPerPage.toString(); + } + + if (page !== undefined) { + queryParameters['page'] = page.toString(); + } + + if (action !== undefined) { + queryParameters['action'] = action.toString(); + } + + if (enabled !== undefined) { + queryParameters['enabled'] = enabled.toString(); + } + + if (sourceID !== undefined) { + queryParameters['sourceID'] = sourceID.toString(); + } + + if (destinationID !== undefined) { + queryParameters['destinationID'] = destinationID.toString(); + } + + if (triggerType !== undefined) { + queryParameters['triggerType'] = triggerType.toString(); + } + + if (sort !== undefined) { + queryParameters['sort'] = sort.toString(); + } + + if (order !== undefined) { + queryParameters['order'] = order.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a list of transformations. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param listTransformations - The listTransformations object. + * @param listTransformations.itemsPerPage - Number of items per page. + * @param listTransformations.page - Page number of the paginated API response. + * @param listTransformations.sort - Property by which to sort the list of transformations. + * @param listTransformations.order - Sort order of the response, ascending or descending. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + listTransformations( + { itemsPerPage, page, sort, order }: ListTransformationsProps = {}, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/1/transformations'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (itemsPerPage !== undefined) { + queryParameters['itemsPerPage'] = itemsPerPage.toString(); + } + + if (page !== undefined) { + queryParameters['page'] = page.toString(); + } + + if (sort !== undefined) { + queryParameters['sort'] = sort.toString(); + } + + if (order !== undefined) { + queryParameters['order'] = order.toString(); + } + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Push a `batch` request payload through the Pipeline. You can check the status of task pushes with the observability endpoints. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param pushTask - The pushTask object. + * @param pushTask.taskID - Unique identifier of a task. + * @param pushTask.pushTaskPayload - Request body of a Search API `batch` request that will be pushed in the Connectors pipeline. + * @param pushTask.watch - When provided, the push operation will be synchronous and the API will wait for the ingestion to be finished before responding. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + pushTask( + { taskID, pushTaskPayload, watch }: PushTaskProps, + requestOptions?: RequestOptions, + ): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `pushTask`.'); + } + + if (!pushTaskPayload) { + throw new Error('Parameter `pushTaskPayload` is required when calling `pushTask`.'); + } + + if (!pushTaskPayload.action) { + throw new Error('Parameter `pushTaskPayload.action` is required when calling `pushTask`.'); + } + if (!pushTaskPayload.records) { + throw new Error('Parameter `pushTaskPayload.records` is required when calling `pushTask`.'); + } + + const requestPath = '/2/tasks/{taskID}/push'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + if (watch !== undefined) { + queryParameters['watch'] = watch.toString(); + } + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: pushTaskPayload, + }; + + requestOptions = { + timeouts: { + connect: 180000, + read: 180000, + write: 180000, + ...requestOptions?.timeouts, + }, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Runs all tasks linked to a source, only available for Shopify sources. It will create 1 run per task. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param runSource - The runSource object. + * @param runSource.sourceID - Unique identifier of a source. + * @param runSource.runSourcePayload - + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + runSource( + { sourceID, runSourcePayload }: RunSourceProps, + requestOptions?: RequestOptions, + ): Promise { + if (!sourceID) { + throw new Error('Parameter `sourceID` is required when calling `runSource`.'); + } + + const requestPath = '/1/sources/{sourceID}/run'.replace('{sourceID}', encodeURIComponent(sourceID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: runSourcePayload ? runSourcePayload : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Runs a task. You can check the status of task runs with the observability endpoints. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param runTask - The runTask object. + * @param runTask.taskID - Unique identifier of a task. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + runTask({ taskID }: RunTaskProps, requestOptions?: RequestOptions): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `runTask`.'); + } + + const requestPath = '/2/tasks/{taskID}/run'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Runs a task using the v1 endpoint, please use `runTask` instead. You can check the status of task runs with the observability endpoints. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * + * @deprecated + * @param runTaskV1 - The runTaskV1 object. + * @param runTaskV1.taskID - Unique identifier of a task. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + runTaskV1({ taskID }: RunTaskV1Props, requestOptions?: RequestOptions): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `runTaskV1`.'); + } + + const requestPath = '/1/tasks/{taskID}/run'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for authentication resources. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param authenticationSearch - The authenticationSearch object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchAuthentications( + authenticationSearch: AuthenticationSearch, + requestOptions?: RequestOptions, + ): Promise> { + if (!authenticationSearch) { + throw new Error('Parameter `authenticationSearch` is required when calling `searchAuthentications`.'); + } + + if (!authenticationSearch.authenticationIDs) { + throw new Error( + 'Parameter `authenticationSearch.authenticationIDs` is required when calling `searchAuthentications`.', + ); + } + + const requestPath = '/1/authentications/search'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: authenticationSearch, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for destinations. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param destinationSearch - The destinationSearch object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchDestinations( + destinationSearch: DestinationSearch, + requestOptions?: RequestOptions, + ): Promise> { + if (!destinationSearch) { + throw new Error('Parameter `destinationSearch` is required when calling `searchDestinations`.'); + } + + if (!destinationSearch.destinationIDs) { + throw new Error('Parameter `destinationSearch.destinationIDs` is required when calling `searchDestinations`.'); + } + + const requestPath = '/1/destinations/search'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: destinationSearch, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for sources. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param sourceSearch - The sourceSearch object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchSources(sourceSearch: SourceSearch, requestOptions?: RequestOptions): Promise> { + if (!sourceSearch) { + throw new Error('Parameter `sourceSearch` is required when calling `searchSources`.'); + } + + if (!sourceSearch.sourceIDs) { + throw new Error('Parameter `sourceSearch.sourceIDs` is required when calling `searchSources`.'); + } + + const requestPath = '/1/sources/search'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: sourceSearch, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for tasks. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param taskSearch - The taskSearch object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchTasks(taskSearch: TaskSearch, requestOptions?: RequestOptions): Promise> { + if (!taskSearch) { + throw new Error('Parameter `taskSearch` is required when calling `searchTasks`.'); + } + + if (!taskSearch.taskIDs) { + throw new Error('Parameter `taskSearch.taskIDs` is required when calling `searchTasks`.'); + } + + const requestPath = '/2/tasks/search'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: taskSearch, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for tasks using the v1 endpoint, please use `searchTasks` instead. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * + * @deprecated + * @param taskSearch - The taskSearch object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchTasksV1(taskSearch: TaskSearch, requestOptions?: RequestOptions): Promise> { + if (!taskSearch) { + throw new Error('Parameter `taskSearch` is required when calling `searchTasksV1`.'); + } + + if (!taskSearch.taskIDs) { + throw new Error('Parameter `taskSearch.taskIDs` is required when calling `searchTasksV1`.'); + } + + const requestPath = '/1/tasks/search'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: taskSearch, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for transformations. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param transformationSearch - The transformationSearch object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchTransformations( + transformationSearch: TransformationSearch, + requestOptions?: RequestOptions, + ): Promise> { + if (!transformationSearch) { + throw new Error('Parameter `transformationSearch` is required when calling `searchTransformations`.'); + } + + if (!transformationSearch.transformationIDs) { + throw new Error( + 'Parameter `transformationSearch.transformationIDs` is required when calling `searchTransformations`.', + ); + } + + const requestPath = '/1/transformations/search'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: transformationSearch, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Triggers a stream-listing request for a source. Triggering stream-listing requests only works with sources with `type: docker` and `imageType: airbyte`. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param triggerDockerSourceDiscover - The triggerDockerSourceDiscover object. + * @param triggerDockerSourceDiscover.sourceID - Unique identifier of a source. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + triggerDockerSourceDiscover( + { sourceID }: TriggerDockerSourceDiscoverProps, + requestOptions?: RequestOptions, + ): Promise { + if (!sourceID) { + throw new Error('Parameter `sourceID` is required when calling `triggerDockerSourceDiscover`.'); + } + + const requestPath = '/1/sources/{sourceID}/discover'.replace('{sourceID}', encodeURIComponent(sourceID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + }; + + requestOptions = { + timeouts: { + connect: 180000, + read: 180000, + write: 180000, + ...requestOptions?.timeouts, + }, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Try a transformation before creating it. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param transformationTry - The transformationTry object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + tryTransformation( + transformationTry: TransformationTry, + requestOptions?: RequestOptions, + ): Promise { + if (!transformationTry) { + throw new Error('Parameter `transformationTry` is required when calling `tryTransformation`.'); + } + + if (!transformationTry.code) { + throw new Error('Parameter `transformationTry.code` is required when calling `tryTransformation`.'); + } + if (!transformationTry.sampleRecord) { + throw new Error('Parameter `transformationTry.sampleRecord` is required when calling `tryTransformation`.'); + } + + const requestPath = '/1/transformations/try'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: transformationTry, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Try a transformation before updating it. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param tryTransformationBeforeUpdate - The tryTransformationBeforeUpdate object. + * @param tryTransformationBeforeUpdate.transformationID - Unique identifier of a transformation. + * @param tryTransformationBeforeUpdate.transformationTry - The transformationTry object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + tryTransformationBeforeUpdate( + { transformationID, transformationTry }: TryTransformationBeforeUpdateProps, + requestOptions?: RequestOptions, + ): Promise { + if (!transformationID) { + throw new Error('Parameter `transformationID` is required when calling `tryTransformationBeforeUpdate`.'); + } + + if (!transformationTry) { + throw new Error('Parameter `transformationTry` is required when calling `tryTransformationBeforeUpdate`.'); + } + + if (!transformationTry.code) { + throw new Error('Parameter `transformationTry.code` is required when calling `tryTransformationBeforeUpdate`.'); + } + if (!transformationTry.sampleRecord) { + throw new Error( + 'Parameter `transformationTry.sampleRecord` is required when calling `tryTransformationBeforeUpdate`.', + ); + } + + const requestPath = '/1/transformations/{transformationID}/try'.replace( + '{transformationID}', + encodeURIComponent(transformationID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: transformationTry, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Updates an authentication resource. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param updateAuthentication - The updateAuthentication object. + * @param updateAuthentication.authenticationID - Unique identifier of an authentication resource. + * @param updateAuthentication.authenticationUpdate - The authenticationUpdate object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + updateAuthentication( + { authenticationID, authenticationUpdate }: UpdateAuthenticationProps, + requestOptions?: RequestOptions, + ): Promise { + if (!authenticationID) { + throw new Error('Parameter `authenticationID` is required when calling `updateAuthentication`.'); + } + + if (!authenticationUpdate) { + throw new Error('Parameter `authenticationUpdate` is required when calling `updateAuthentication`.'); + } + + const requestPath = '/1/authentications/{authenticationID}'.replace( + '{authenticationID}', + encodeURIComponent(authenticationID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PATCH', + path: requestPath, + queryParameters, + headers, + data: authenticationUpdate, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Updates the destination by its ID. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param updateDestination - The updateDestination object. + * @param updateDestination.destinationID - Unique identifier of a destination. + * @param updateDestination.destinationUpdate - The destinationUpdate object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + updateDestination( + { destinationID, destinationUpdate }: UpdateDestinationProps, + requestOptions?: RequestOptions, + ): Promise { + if (!destinationID) { + throw new Error('Parameter `destinationID` is required when calling `updateDestination`.'); + } + + if (!destinationUpdate) { + throw new Error('Parameter `destinationUpdate` is required when calling `updateDestination`.'); + } + + const requestPath = '/1/destinations/{destinationID}'.replace( + '{destinationID}', + encodeURIComponent(destinationID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PATCH', + path: requestPath, + queryParameters, + headers, + data: destinationUpdate, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Updates a source by its ID. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param updateSource - The updateSource object. + * @param updateSource.sourceID - Unique identifier of a source. + * @param updateSource.sourceUpdate - The sourceUpdate object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + updateSource( + { sourceID, sourceUpdate }: UpdateSourceProps, + requestOptions?: RequestOptions, + ): Promise { + if (!sourceID) { + throw new Error('Parameter `sourceID` is required when calling `updateSource`.'); + } + + if (!sourceUpdate) { + throw new Error('Parameter `sourceUpdate` is required when calling `updateSource`.'); + } + + const requestPath = '/1/sources/{sourceID}'.replace('{sourceID}', encodeURIComponent(sourceID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PATCH', + path: requestPath, + queryParameters, + headers, + data: sourceUpdate, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Updates a task by its ID. + * @param updateTask - The updateTask object. + * @param updateTask.taskID - Unique identifier of a task. + * @param updateTask.taskUpdate - The taskUpdate object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + updateTask({ taskID, taskUpdate }: UpdateTaskProps, requestOptions?: RequestOptions): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `updateTask`.'); + } + + if (!taskUpdate) { + throw new Error('Parameter `taskUpdate` is required when calling `updateTask`.'); + } + + const requestPath = '/2/tasks/{taskID}'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PATCH', + path: requestPath, + queryParameters, + headers, + data: taskUpdate, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Updates a task by its ID using the v1 endpoint, please use `updateTask` instead. + * + * @deprecated + * @param updateTaskV1 - The updateTaskV1 object. + * @param updateTaskV1.taskID - Unique identifier of a task. + * @param updateTaskV1.taskUpdate - The taskUpdate object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + updateTaskV1( + { taskID, taskUpdate }: UpdateTaskV1Props, + requestOptions?: RequestOptions, + ): Promise { + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `updateTaskV1`.'); + } + + if (!taskUpdate) { + throw new Error('Parameter `taskUpdate` is required when calling `updateTaskV1`.'); + } + + const requestPath = '/1/tasks/{taskID}'.replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PATCH', + path: requestPath, + queryParameters, + headers, + data: taskUpdate, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Updates a transformation by its ID. + * @param updateTransformation - The updateTransformation object. + * @param updateTransformation.transformationID - Unique identifier of a transformation. + * @param updateTransformation.transformationCreate - The transformationCreate object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + updateTransformation( + { transformationID, transformationCreate }: UpdateTransformationProps, + requestOptions?: RequestOptions, + ): Promise { + if (!transformationID) { + throw new Error('Parameter `transformationID` is required when calling `updateTransformation`.'); + } + + if (!transformationCreate) { + throw new Error('Parameter `transformationCreate` is required when calling `updateTransformation`.'); + } + + if (!transformationCreate.code) { + throw new Error('Parameter `transformationCreate.code` is required when calling `updateTransformation`.'); + } + if (!transformationCreate.name) { + throw new Error('Parameter `transformationCreate.name` is required when calling `updateTransformation`.'); + } + + const requestPath = '/1/transformations/{transformationID}'.replace( + '{transformationID}', + encodeURIComponent(transformationID), + ); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: transformationCreate, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Validates a source payload to ensure it can be created and that the data source can be reached by Algolia. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param sourceCreate - + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + validateSource( + sourceCreate: SourceCreate, + requestOptions: RequestOptions | undefined = undefined, + ): Promise { + const requestPath = '/1/sources/validate'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: sourceCreate ? sourceCreate : {}, + }; + + requestOptions = { + timeouts: { + connect: 180000, + read: 180000, + write: 180000, + ...requestOptions?.timeouts, + }, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Validates an update of a source payload to ensure it can be created and that the data source can be reached by Algolia. + * + * Required API Key ACLs: + * - addObject + * - deleteIndex + * - editSettings + * @param validateSourceBeforeUpdate - The validateSourceBeforeUpdate object. + * @param validateSourceBeforeUpdate.sourceID - Unique identifier of a source. + * @param validateSourceBeforeUpdate.sourceUpdate - The sourceUpdate object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + validateSourceBeforeUpdate( + { sourceID, sourceUpdate }: ValidateSourceBeforeUpdateProps, + requestOptions?: RequestOptions, + ): Promise { + if (!sourceID) { + throw new Error('Parameter `sourceID` is required when calling `validateSourceBeforeUpdate`.'); + } + + if (!sourceUpdate) { + throw new Error('Parameter `sourceUpdate` is required when calling `validateSourceBeforeUpdate`.'); + } + + const requestPath = '/1/sources/{sourceID}/validate'.replace('{sourceID}', encodeURIComponent(sourceID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: sourceUpdate, + }; + + requestOptions = { + timeouts: { + connect: 180000, + read: 180000, + write: 180000, + ...requestOptions?.timeouts, + }, + }; + + return transporter.request(request, requestOptions); + }, + }; +} diff --git a/packages/ingestion/tsconfig.json b/packages/ingestion/tsconfig.json new file mode 100644 index 000000000..444e8bb64 --- /dev/null +++ b/packages/ingestion/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src", "model", "builds"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/ingestion/tsup.config.ts b/packages/ingestion/tsup.config.ts new file mode 100644 index 000000000..d506b2487 --- /dev/null +++ b/packages/ingestion/tsup.config.ts @@ -0,0 +1,67 @@ +import type { Options } from 'tsup'; +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions, getDependencies } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +const nodeOptions: Options = { + ...getBaseNodeOptions(pkg, __dirname), + dts: { entry: { node: 'builds/node.ts' } }, + entry: ['builds/node.ts', 'src/*.ts'], +}; + +const nodeConfigs: Options[] = [ + { + ...nodeOptions, + format: 'cjs', + name: `node ${pkg.name} cjs`, + }, + { + ...nodeOptions, + format: 'esm', + name: `node ${pkg.name} esm`, + }, + { + ...nodeOptions, + format: 'esm', + name: `fetch ${pkg.name} esm`, + dts: { entry: { fetch: 'builds/fetch.ts' } }, + external: getDependencies(pkg, 'fetch'), + entry: ['builds/fetch.ts', 'src/*.ts'], + }, + { + ...nodeOptions, + format: 'esm', + name: `worker ${pkg.name} esm`, + dts: { entry: { worker: 'builds/worker.ts' } }, + external: getDependencies(pkg, 'worker'), + entry: ['builds/worker.ts', 'src/*.ts'], + }, +]; + +const browserOptions: Options = { + ...getBaseBrowserOptions(pkg, __dirname), + globalName: 'ingestionClient', +}; + +const browserConfigs: Options[] = [ + { + ...browserOptions, + minify: false, + name: `browser ${pkg.name} esm`, + dts: { entry: { browser: 'builds/browser.ts' } }, + entry: ['builds/browser.ts', 'src/*.ts'], + }, + { + ...browserOptions, + dts: false, + minify: true, + name: `browser ${pkg.name} min esm`, + entry: { 'builds/browser.min': 'builds/browser.ts' }, + external: [], + noExternal: getDependencies(pkg, 'xhr'), + }, +]; + +export default defineConfig([...nodeConfigs, ...browserConfigs]); diff --git a/packages/logger-common/api-extractor.json b/packages/logger-common/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/logger-common/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/logger-common/index.js b/packages/logger-common/index.js deleted file mode 100644 index 56c0010ed..000000000 --- a/packages/logger-common/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/logger-common.cjs.js'); diff --git a/packages/logger-common/package.json b/packages/logger-common/package.json deleted file mode 100644 index 3242494a0..000000000 --- a/packages/logger-common/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "@algolia/logger-common", - "version": "4.13.1", - "private": false, - "description": "Common interfaces for promise-based log libraries", - "repository": { - "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-js.git" - }, - "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/logger-common.esm.js", - "types": "dist/logger-common.d.ts", - "files": [ - "index.js", - "dist" - ] -} diff --git a/packages/logger-common/src/__tests__/null-logger.test.ts b/packages/logger-common/src/__tests__/null-logger.test.ts deleted file mode 100644 index e71e0319f..000000000 --- a/packages/logger-common/src/__tests__/null-logger.test.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint no-console: 0 */ - -import mockConsole from 'jest-mock-console'; - -import { createNullLogger } from '..'; - -describe('null logger', () => { - it('has a null behavior', async () => { - mockConsole(['debug', 'info', 'error']); - - const logger = createNullLogger(); - - await logger.debug('foo', {}); - await logger.info('foo', {}); - await logger.error('foo', {}); - - expect(console.debug).toHaveBeenCalledTimes(0); - expect(console.info).toHaveBeenCalledTimes(0); - expect(console.error).toHaveBeenCalledTimes(0); - }); -}); diff --git a/packages/logger-common/src/createNullLogger.ts b/packages/logger-common/src/createNullLogger.ts deleted file mode 100644 index c7f4457e2..000000000 --- a/packages/logger-common/src/createNullLogger.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Logger } from '.'; - -export function createNullLogger(): Logger { - return { - debug(_message: string, _args?: any): Readonly> { - return Promise.resolve(); - }, - info(_message: string, _args?: any): Readonly> { - return Promise.resolve(); - }, - error(_message: string, _args?: any): Readonly> { - return Promise.resolve(); - }, - }; -} diff --git a/packages/logger-common/src/index.ts b/packages/logger-common/src/index.ts deleted file mode 100644 index e3d87cb22..000000000 --- a/packages/logger-common/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createNullLogger'; -export * from './types/index'; diff --git a/packages/logger-common/src/types/LogLevelType.ts b/packages/logger-common/src/types/LogLevelType.ts deleted file mode 100644 index b01a947a8..000000000 --- a/packages/logger-common/src/types/LogLevelType.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const LogLevelEnum: Readonly> = { - Debug: 1, - Info: 2, - Error: 3, -}; - -export type LogLevelType = 1 | 2 | 3; diff --git a/packages/logger-common/src/types/Logger.ts b/packages/logger-common/src/types/Logger.ts deleted file mode 100644 index a64becaa6..000000000 --- a/packages/logger-common/src/types/Logger.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type Logger = { - /** - * Logs debug messages. - */ - readonly debug: (message: string, args?: any) => Readonly>; - - /** - * Logs info messages. - */ - readonly info: (message: string, args?: any) => Readonly>; - - /** - * Logs error messages. - */ - readonly error: (message: string, args?: any) => Readonly>; -}; diff --git a/packages/logger-common/src/types/index.ts b/packages/logger-common/src/types/index.ts deleted file mode 100644 index e6087ced5..000000000 --- a/packages/logger-common/src/types/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './LogLevelType'; -export * from './Logger'; diff --git a/packages/logger-console/api-extractor.json b/packages/logger-console/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/logger-console/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/logger-console/index.d.ts b/packages/logger-console/index.d.ts new file mode 100644 index 000000000..066d2099a --- /dev/null +++ b/packages/logger-console/index.d.ts @@ -0,0 +1 @@ +export * from './dist/logger'; diff --git a/packages/logger-console/index.js b/packages/logger-console/index.js index 1a8f955bd..9b6252a52 100644 --- a/packages/logger-console/index.js +++ b/packages/logger-console/index.js @@ -1,2 +1 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/logger-console.cjs.js'); +module.exports = require('./dist/logger.cjs'); diff --git a/packages/logger-console/package.json b/packages/logger-console/package.json index fe61257a7..32e59b8b7 100644 --- a/packages/logger-console/package.json +++ b/packages/logger-console/package.json @@ -1,22 +1,53 @@ { "name": "@algolia/logger-console", - "version": "4.13.1", - "private": false, + "version": "5.23.3", "description": "Promise-based log library using console log.", "repository": { "type": "git", "url": "git://github.com/algolia/algoliasearch-client-javascript.git" }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript#readme", "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/logger-console.esm.js", - "types": "dist/logger-console.d.ts", + "author": "Algolia", + "type": "module", "files": [ + "dist", "index.js", - "dist" + "index.d.ts" ], + "exports": { + ".": { + "types": { + "import": "./dist/logger.d.ts", + "module": "./dist/logger.d.ts", + "require": "./dist/logger.d.cts" + }, + "import": "./dist/logger.js", + "module": "./dist/logger.js", + "require": "./dist/logger.cjs" + }, + "./src/*": "./src/*.ts" + }, + "scripts": { + "build": "yarn clean && yarn tsup", + "clean": "rm -rf ./dist || true", + "test": "tsc --noEmit && vitest --run", + "test:bundle": "publint . && attw --pack ." + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "jsdom": "26.0.0", + "publint": "0.3.10", + "ts-node": "10.9.2", + "tsup": "8.4.0", + "typescript": "5.8.3", + "vitest": "3.1.1" + }, "dependencies": { - "@algolia/logger-common": "4.13.1" + "@algolia/client-common": "5.23.3" + }, + "engines": { + "node": ">= 14.0.0" } } diff --git a/packages/logger-console/src/__tests__/console-logger.test.ts b/packages/logger-console/src/__tests__/console-logger.test.ts deleted file mode 100644 index 9e988444d..000000000 --- a/packages/logger-console/src/__tests__/console-logger.test.ts +++ /dev/null @@ -1,48 +0,0 @@ -/* eslint no-console: 0 */ - -import { LogLevelEnum } from '@algolia/logger-common'; -import mockConsole from 'jest-mock-console'; - -import { createConsoleLogger } from '../createConsoleLogger'; - -describe('console logger', () => { - beforeEach(() => { - mockConsole(['debug', 'info', 'error']); - }); - - it('respects log level type debug', async () => { - const logger = createConsoleLogger(LogLevelEnum.Debug); - - await logger.debug('foo', {}); - await logger.info('foo', {}); - await logger.error('foo', {}); - - expect(console.debug).toHaveBeenCalledTimes(1); - expect(console.info).toHaveBeenCalledTimes(1); - expect(console.error).toHaveBeenCalledTimes(1); - }); - - it('respects log level type info', async () => { - const logger = createConsoleLogger(LogLevelEnum.Info); - - await logger.debug('foo', {}); - await logger.info('foo', {}); - await logger.error('foo', {}); - - expect(console.debug).toHaveBeenCalledTimes(0); - expect(console.info).toHaveBeenCalledTimes(1); - expect(console.error).toHaveBeenCalledTimes(1); - }); - - it('respects log level type error', async () => { - const logger = createConsoleLogger(LogLevelEnum.Error); - - await logger.debug('foo', {}); - await logger.info('foo', {}); - await logger.error('foo', {}); - - expect(console.debug).toHaveBeenCalledTimes(0); - expect(console.info).toHaveBeenCalledTimes(0); - expect(console.error).toHaveBeenCalledTimes(1); - }); -}); diff --git a/packages/logger-console/src/__tests__/logger-console.test.ts b/packages/logger-console/src/__tests__/logger-console.test.ts new file mode 100644 index 000000000..8da9e8c0a --- /dev/null +++ b/packages/logger-console/src/__tests__/logger-console.test.ts @@ -0,0 +1,50 @@ +import { beforeEach, describe, expect, test, vi } from 'vitest'; + +import { LogLevelEnum } from '@algolia/client-common'; + +import { createConsoleLogger } from '../logger'; + +describe('console logger', () => { + beforeEach(() => { + vi.resetAllMocks(); + vi.spyOn(console, 'debug'); + vi.spyOn(console, 'info'); + vi.spyOn(console, 'error'); + }); + + test('respects log level type debug', async () => { + const logger = createConsoleLogger(LogLevelEnum.Debug); + + await logger.debug('foo', {}); + await logger.info('foo', {}); + await logger.error('foo', {}); + + expect(console.debug).toHaveBeenCalledTimes(1); + expect(console.info).toHaveBeenCalledTimes(1); + expect(console.error).toHaveBeenCalledTimes(1); + }); + + test('respects log level type info', async () => { + const logger = createConsoleLogger(LogLevelEnum.Info); + + await logger.debug('foo', {}); + await logger.info('foo', {}); + await logger.error('foo', {}); + + expect(console.debug).toHaveBeenCalledTimes(0); + expect(console.info).toHaveBeenCalledTimes(1); + expect(console.error).toHaveBeenCalledTimes(1); + }); + + test('respects log level type error', async () => { + const logger = createConsoleLogger(LogLevelEnum.Error); + + await logger.debug('foo', {}); + await logger.info('foo', {}); + await logger.error('foo', {}); + + expect(console.debug).toHaveBeenCalledTimes(0); + expect(console.info).toHaveBeenCalledTimes(0); + expect(console.error).toHaveBeenCalledTimes(1); + }); +}); diff --git a/packages/logger-console/src/createConsoleLogger.ts b/packages/logger-console/src/createConsoleLogger.ts deleted file mode 100644 index d3df22f78..000000000 --- a/packages/logger-console/src/createConsoleLogger.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* eslint no-console: 0 */ - -import { Logger, LogLevelEnum, LogLevelType } from '@algolia/logger-common'; - -export function createConsoleLogger(logLevel: LogLevelType): Logger { - return { - debug(message: string, args?: any): Readonly> { - if (LogLevelEnum.Debug >= logLevel) { - console.debug(message, args); - } - - return Promise.resolve(); - }, - - info(message: string, args?: any): Readonly> { - if (LogLevelEnum.Info >= logLevel) { - console.info(message, args); - } - - return Promise.resolve(); - }, - - error(message: string, args?: any): Readonly> { - console.error(message, args); - - return Promise.resolve(); - }, - }; -} diff --git a/packages/logger-console/src/index.ts b/packages/logger-console/src/index.ts deleted file mode 100644 index 49b1759dd..000000000 --- a/packages/logger-console/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createConsoleLogger'; diff --git a/packages/logger-console/src/logger.ts b/packages/logger-console/src/logger.ts new file mode 100644 index 000000000..974796ca0 --- /dev/null +++ b/packages/logger-console/src/logger.ts @@ -0,0 +1,28 @@ +import type { LogLevelType, Logger } from '@algolia/client-common'; +import { LogLevelEnum } from '@algolia/client-common'; + +export function createConsoleLogger(logLevel: LogLevelType): Logger { + return { + debug(message: string, args?: any): Readonly> { + if (LogLevelEnum.Debug >= logLevel) { + console.debug(message, args); + } + + return Promise.resolve(); + }, + + info(message: string, args?: any): Readonly> { + if (LogLevelEnum.Info >= logLevel) { + console.info(message, args); + } + + return Promise.resolve(); + }, + + error(message: string, args?: any): Readonly> { + console.error(message, args); + + return Promise.resolve(); + }, + }; +} diff --git a/packages/logger-console/tsconfig.json b/packages/logger-console/tsconfig.json new file mode 100644 index 000000000..a9a49694a --- /dev/null +++ b/packages/logger-console/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "types": ["node", "vitest/globals"], + "outDir": "dist", + "skipLibCheck": true + }, + "include": ["src", "index.ts"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/logger-console/tsup.config.ts b/packages/logger-console/tsup.config.ts new file mode 100644 index 000000000..046f1cb68 --- /dev/null +++ b/packages/logger-console/tsup.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from 'tsup'; + +import { getBaseNodeOptions } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +export default defineConfig([ + { + ...getBaseNodeOptions(pkg, __dirname), + format: 'cjs', + dts: { entry: { logger: 'src/logger.ts' } }, + entry: { logger: 'src/logger.ts' }, + }, + { + ...getBaseNodeOptions(pkg, __dirname), + format: 'esm', + dts: { entry: { logger: 'src/logger.ts' } }, + entry: { logger: 'src/logger.ts' }, + }, +]); diff --git a/packages/logger-console/vitest.workspace.ts b/packages/logger-console/vitest.workspace.ts new file mode 100644 index 000000000..844dc2bd0 --- /dev/null +++ b/packages/logger-console/vitest.workspace.ts @@ -0,0 +1,18 @@ +import { defineWorkspace } from 'vitest/config'; + +export default defineWorkspace([ + { + test: { + include: ['src/__tests__/logger-console.test.ts'], + name: 'node', + environment: 'node', + }, + }, + { + test: { + include: ['src/__tests__/logger-console.test.ts'], + name: 'jsdom', + environment: 'jsdom', + }, + }, +]); diff --git a/packages/monitoring/LICENSE b/packages/monitoring/LICENSE new file mode 100644 index 000000000..fddf416f9 --- /dev/null +++ b/packages/monitoring/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-Present Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/monitoring/README.md b/packages/monitoring/README.md new file mode 100644 index 000000000..ed71658e0 --- /dev/null +++ b/packages/monitoring/README.md @@ -0,0 +1,77 @@ +

+ + Algolia for JavaScript + + +

The perfect starting point to integrate Algolia within your JavaScript project

+ +

+ NPM version + NPM downloads + jsDelivr Downloads + License +

+

+ +

+ Documentation • + InstantSearch • + Community Forum • + Stack Overflow • + Report a bug • + FAQ • + Support +

+ +## ✨ Features + +- Thin & **minimal low-level HTTP client** to interact with Algolia's API +- Works both on the **browser** and **node.js** +- **UMD and ESM compatible**, you can use it with any module loader +- Built with TypeScript + +## 💡 Getting Started + +> [!TIP] +> This API client is already a dependency of [the algoliasearch client](https://www.npmjs.com/package/algoliasearch), you don't need to manually install `@algolia/monitoring` if you already have `algoliasearch` installed. + +To get started, you first need to install @algolia/monitoring (or any other available API client package). +All of our clients comes with type definition, and are available for both browser and node environments. + +### With a package manager + +```bash +yarn add @algolia/monitoring@1.23.3 +# or +npm install @algolia/monitoring@1.23.3 +# or +pnpm add @algolia/monitoring@1.23.3 +``` + +### Without a package manager + +Add the following JavaScript snippet to the of your website: + +```html + +``` + +### Usage + +You can now import the Algolia API client in your project and play with it. + +```js +import { monitoringClient } from '@algolia/monitoring'; + +const client = monitoringClient('YOUR_APP_ID', 'YOUR_API_KEY'); +``` + +For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/javascript/v5/methods/monitoring/)**. + +## ❓ Troubleshooting + +Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/libraries/javascript/v5/) where you will find answers for the most common issues and gotchas with the client. You can also open [a GitHub issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=&projects=&template=Bug_report.md) + +## 📄 License + +The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). diff --git a/packages/monitoring/builds/browser.ts b/packages/monitoring/builds/browser.ts new file mode 100644 index 000000000..457f0075e --- /dev/null +++ b/packages/monitoring/builds/browser.ts @@ -0,0 +1,50 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import { createXhrRequester } from '@algolia/requester-browser-xhr'; + +import { + createBrowserLocalStorageCache, + createFallbackableCache, + createMemoryCache, + createNullLogger, +} from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { apiClientVersion, createMonitoringClient } from '../src/monitoringClient'; + +export { apiClientVersion } from '../src/monitoringClient'; + +export * from '../model'; + +export function monitoringClient(appId: string, apiKey: string, options?: ClientOptions): MonitoringClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return createMonitoringClient({ + appId, + apiKey, + timeouts: { + connect: 1000, + read: 2000, + write: 30000, + }, + logger: createNullLogger(), + requester: createXhrRequester(), + algoliaAgents: [{ segment: 'Browser' }], + authMode: 'WithinQueryParameters', + responsesCache: createMemoryCache(), + requestsCache: createMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], + }), + ...options, + }); +} + +export type MonitoringClient = ReturnType; diff --git a/packages/monitoring/builds/fetch.ts b/packages/monitoring/builds/fetch.ts new file mode 100644 index 000000000..c5d54681e --- /dev/null +++ b/packages/monitoring/builds/fetch.ts @@ -0,0 +1,43 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type MonitoringClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createMonitoringClient } from '../src/monitoringClient'; + +export { apiClientVersion } from '../src/monitoringClient'; + +export * from '../model'; + +export function monitoringClient(appId: string, apiKey: string, options?: ClientOptions): MonitoringClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createMonitoringClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Fetch' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/monitoring/builds/node.ts b/packages/monitoring/builds/node.ts new file mode 100644 index 000000000..e86f6e71a --- /dev/null +++ b/packages/monitoring/builds/node.ts @@ -0,0 +1,44 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type MonitoringClient = ReturnType; + +import { createHttpRequester } from '@algolia/requester-node-http'; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createMonitoringClient } from '../src/monitoringClient'; + +export { apiClientVersion } from '../src/monitoringClient'; + +export * from '../model'; + +export function monitoringClient(appId: string, apiKey: string, options?: ClientOptions): MonitoringClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createMonitoringClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createHttpRequester(), + algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/monitoring/builds/worker.ts b/packages/monitoring/builds/worker.ts new file mode 100644 index 000000000..36d58fe7c --- /dev/null +++ b/packages/monitoring/builds/worker.ts @@ -0,0 +1,43 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type MonitoringClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createMonitoringClient } from '../src/monitoringClient'; + +export { apiClientVersion } from '../src/monitoringClient'; + +export * from '../model'; + +export function monitoringClient(appId: string, apiKey: string, options?: ClientOptions): MonitoringClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createMonitoringClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Worker' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/monitoring/index.d.ts b/packages/monitoring/index.d.ts new file mode 100644 index 000000000..e81a1cd3e --- /dev/null +++ b/packages/monitoring/index.d.ts @@ -0,0 +1 @@ +export * from './dist/node'; diff --git a/packages/monitoring/index.js b/packages/monitoring/index.js new file mode 100644 index 000000000..21e26aad3 --- /dev/null +++ b/packages/monitoring/index.js @@ -0,0 +1 @@ +module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/monitoring/model/badRequest.ts b/packages/monitoring/model/badRequest.ts new file mode 100644 index 000000000..630ad5fd4 --- /dev/null +++ b/packages/monitoring/model/badRequest.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BadRequest = { + reason?: string; +}; diff --git a/packages/monitoring/model/clientMethodProps.ts b/packages/monitoring/model/clientMethodProps.ts new file mode 100644 index 000000000..2ad36cf34 --- /dev/null +++ b/packages/monitoring/model/clientMethodProps.ts @@ -0,0 +1,132 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Metric } from '../model/metric'; +import type { Period } from '../model/period'; + +/** + * Properties for the `customDelete` method. + */ +export type CustomDeleteProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customGet` method. + */ +export type CustomGetProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customPost` method. + */ +export type CustomPostProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `customPut` method. + */ +export type CustomPutProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `getClusterIncidents` method. + */ +export type GetClusterIncidentsProps = { + /** + * Subset of clusters, separated by commas. + */ + clusters: string; +}; + +/** + * Properties for the `getClusterStatus` method. + */ +export type GetClusterStatusProps = { + /** + * Subset of clusters, separated by commas. + */ + clusters: string; +}; + +/** + * Properties for the `getIndexingTime` method. + */ +export type GetIndexingTimeProps = { + /** + * Subset of clusters, separated by commas. + */ + clusters: string; +}; + +/** + * Properties for the `getLatency` method. + */ +export type GetLatencyProps = { + /** + * Subset of clusters, separated by commas. + */ + clusters: string; +}; + +/** + * Properties for the `getMetrics` method. + */ +export type GetMetricsProps = { + /** + * Metric to report. For more information about the individual metrics, see the description of the API response. To include all metrics, use `*`. + */ + metric: Metric; + /** + * Period over which to aggregate the metrics: - `minute`. Aggregate the last minute. 1 data point per 10 seconds. - `hour`. Aggregate the last hour. 1 data point per minute. - `day`. Aggregate the last day. 1 data point per 10 minutes. - `week`. Aggregate the last week. 1 data point per hour. - `month`. Aggregate the last month. 1 data point per day. + */ + period: Period; +}; + +/** + * Properties for the `getReachability` method. + */ +export type GetReachabilityProps = { + /** + * Subset of clusters, separated by commas. + */ + clusters: string; +}; diff --git a/packages/monitoring/model/errorBase.ts b/packages/monitoring/model/errorBase.ts new file mode 100644 index 000000000..960e509cb --- /dev/null +++ b/packages/monitoring/model/errorBase.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Error. + */ +export type ErrorBase = Record & { + message?: string; +}; diff --git a/packages/monitoring/model/forbidden.ts b/packages/monitoring/model/forbidden.ts new file mode 100644 index 000000000..692fcc1a4 --- /dev/null +++ b/packages/monitoring/model/forbidden.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Forbidden = { + reason?: string; +}; diff --git a/packages/monitoring/model/incident.ts b/packages/monitoring/model/incident.ts new file mode 100644 index 000000000..5ff57f09a --- /dev/null +++ b/packages/monitoring/model/incident.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Status } from './status'; + +/** + * Incident details. + */ +export type Incident = { + /** + * Description of the incident. + */ + title?: string; + + status?: Status; +}; diff --git a/packages/monitoring/model/incidentEntry.ts b/packages/monitoring/model/incidentEntry.ts new file mode 100644 index 000000000..42c5f410d --- /dev/null +++ b/packages/monitoring/model/incidentEntry.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Incident } from './incident'; + +export type IncidentEntry = { + /** + * Timestamp, measured in milliseconds since the Unix epoch. + */ + t?: number; + + v?: Incident; +}; diff --git a/packages/monitoring/model/incidentsResponse.ts b/packages/monitoring/model/incidentsResponse.ts new file mode 100644 index 000000000..0b60bbc18 --- /dev/null +++ b/packages/monitoring/model/incidentsResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { IncidentEntry } from './incidentEntry'; + +export type IncidentsResponse = { + incidents?: { [key: string]: Array }; +}; diff --git a/packages/monitoring/model/index.ts b/packages/monitoring/model/index.ts new file mode 100644 index 000000000..1f38523e6 --- /dev/null +++ b/packages/monitoring/model/index.ts @@ -0,0 +1,27 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export * from './badRequest'; +export * from './clientMethodProps'; +export * from './errorBase'; +export * from './forbidden'; +export * from './incident'; +export * from './incidentEntry'; +export * from './incidentsResponse'; +export * from './indexingMetric'; +export * from './indexingTimeResponse'; +export * from './infrastructureResponse'; +export * from './inventoryResponse'; +export * from './latencyMetric'; +export * from './latencyResponse'; +export * from './metric'; +export * from './metrics'; +export * from './period'; +export * from './probesMetric'; +export * from './region'; +export * from './server'; +export * from './serverStatus'; +export * from './status'; +export * from './statusResponse'; +export * from './timeEntry'; +export * from './type'; +export * from './unauthorized'; diff --git a/packages/monitoring/model/indexingMetric.ts b/packages/monitoring/model/indexingMetric.ts new file mode 100644 index 000000000..87391c7fe --- /dev/null +++ b/packages/monitoring/model/indexingMetric.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TimeEntry } from './timeEntry'; + +export type IndexingMetric = { + indexing?: { [key: string]: Array }; +}; diff --git a/packages/monitoring/model/indexingTimeResponse.ts b/packages/monitoring/model/indexingTimeResponse.ts new file mode 100644 index 000000000..2d2101ada --- /dev/null +++ b/packages/monitoring/model/indexingTimeResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { IndexingMetric } from './indexingMetric'; + +export type IndexingTimeResponse = { + metrics?: IndexingMetric; +}; diff --git a/packages/monitoring/model/infrastructureResponse.ts b/packages/monitoring/model/infrastructureResponse.ts new file mode 100644 index 000000000..6edf9b711 --- /dev/null +++ b/packages/monitoring/model/infrastructureResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Metrics } from './metrics'; + +export type InfrastructureResponse = { + metrics?: Metrics; +}; diff --git a/packages/monitoring/model/inventoryResponse.ts b/packages/monitoring/model/inventoryResponse.ts new file mode 100644 index 000000000..36be618f9 --- /dev/null +++ b/packages/monitoring/model/inventoryResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Server } from './server'; + +export type InventoryResponse = { + inventory?: Array; +}; diff --git a/packages/monitoring/model/latencyMetric.ts b/packages/monitoring/model/latencyMetric.ts new file mode 100644 index 000000000..9d0309e55 --- /dev/null +++ b/packages/monitoring/model/latencyMetric.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TimeEntry } from './timeEntry'; + +export type LatencyMetric = { + latency?: { [key: string]: Array }; +}; diff --git a/packages/monitoring/model/latencyResponse.ts b/packages/monitoring/model/latencyResponse.ts new file mode 100644 index 000000000..336951ae7 --- /dev/null +++ b/packages/monitoring/model/latencyResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { LatencyMetric } from './latencyMetric'; + +export type LatencyResponse = { + metrics?: LatencyMetric; +}; diff --git a/packages/monitoring/model/metric.ts b/packages/monitoring/model/metric.ts new file mode 100644 index 000000000..f0509fef7 --- /dev/null +++ b/packages/monitoring/model/metric.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Metric = 'avg_build_time' | 'ssd_usage' | 'ram_search_usage' | 'ram_indexing_usage' | 'cpu_usage' | '*'; diff --git a/packages/monitoring/model/metrics.ts b/packages/monitoring/model/metrics.ts new file mode 100644 index 000000000..b708a144d --- /dev/null +++ b/packages/monitoring/model/metrics.ts @@ -0,0 +1,30 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { ProbesMetric } from './probesMetric'; + +export type Metrics = { + /** + * CPU idleness in %. + */ + cpu_usage?: { [key: string]: Array }; + + /** + * RAM used for indexing in MB. + */ + ram_indexing_usage?: { [key: string]: Array }; + + /** + * RAM used for search in MB. + */ + ram_search_usage?: { [key: string]: Array }; + + /** + * Solid-state disk (SSD) usage expressed as % of RAM. 0% means no SSD usage. A value of 50% indicates 32 GB SSD usage for a machine with 64 RAM. + */ + ssd_usage?: { [key: string]: Array }; + + /** + * Average build time of the indices in seconds. + */ + avg_build_time?: { [key: string]: Array }; +}; diff --git a/packages/monitoring/model/period.ts b/packages/monitoring/model/period.ts new file mode 100644 index 000000000..13ef62681 --- /dev/null +++ b/packages/monitoring/model/period.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Period = 'minute' | 'hour' | 'day' | 'week' | 'month'; diff --git a/packages/monitoring/model/probesMetric.ts b/packages/monitoring/model/probesMetric.ts new file mode 100644 index 000000000..b182a5a83 --- /dev/null +++ b/packages/monitoring/model/probesMetric.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type ProbesMetric = { + /** + * Timestamp, measured in milliseconds since the Unix epoch. + */ + t?: number; + + /** + * Value of the metric. + */ + v?: number; +}; diff --git a/packages/monitoring/model/region.ts b/packages/monitoring/model/region.ts new file mode 100644 index 000000000..de9b7de08 --- /dev/null +++ b/packages/monitoring/model/region.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Region where the cluster is located. + */ +export type Region = + | 'au' + | 'br' + | 'ca' + | 'de' + | 'eu' + | 'hk' + | 'in' + | 'jp' + | 'sg' + | 'uae' + | 'uk' + | 'usc' + | 'use' + | 'usw' + | 'za'; diff --git a/packages/monitoring/model/server.ts b/packages/monitoring/model/server.ts new file mode 100644 index 000000000..4251b2786 --- /dev/null +++ b/packages/monitoring/model/server.ts @@ -0,0 +1,33 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Region } from './region'; +import type { ServerStatus } from './serverStatus'; +import type { Type } from './type'; + +export type Server = { + /** + * Server name. + */ + name?: string; + + region?: Region; + + /** + * Included to support legacy applications. Use `is_replica` instead. + */ + is_slave?: boolean; + + /** + * Whether this server is a replica of another server. + */ + is_replica?: boolean; + + /** + * Name of the cluster to which this server belongs. + */ + cluster?: string; + + status?: ServerStatus; + + type?: Type; +}; diff --git a/packages/monitoring/model/serverStatus.ts b/packages/monitoring/model/serverStatus.ts new file mode 100644 index 000000000..7dcbc6af7 --- /dev/null +++ b/packages/monitoring/model/serverStatus.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type ServerStatus = 'PRODUCTION'; diff --git a/packages/monitoring/model/status.ts b/packages/monitoring/model/status.ts new file mode 100644 index 000000000..e12c5b53f --- /dev/null +++ b/packages/monitoring/model/status.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Status of the cluster. + */ +export type Status = 'operational' | 'degraded_performance' | 'partial_outage' | 'major_outage'; diff --git a/packages/monitoring/model/statusResponse.ts b/packages/monitoring/model/statusResponse.ts new file mode 100644 index 000000000..5ac401cde --- /dev/null +++ b/packages/monitoring/model/statusResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Status } from './status'; + +export type StatusResponse = { + status?: { [key: string]: Status }; +}; diff --git a/packages/monitoring/model/timeEntry.ts b/packages/monitoring/model/timeEntry.ts new file mode 100644 index 000000000..21fb9b6a4 --- /dev/null +++ b/packages/monitoring/model/timeEntry.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type TimeEntry = { + /** + * Timestamp, measured in milliseconds since the Unix epoch. + */ + t?: number; + + /** + * Time in ms. + */ + v?: number; +}; diff --git a/packages/monitoring/model/type.ts b/packages/monitoring/model/type.ts new file mode 100644 index 000000000..a35d2910d --- /dev/null +++ b/packages/monitoring/model/type.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Type = 'cluster'; diff --git a/packages/monitoring/model/unauthorized.ts b/packages/monitoring/model/unauthorized.ts new file mode 100644 index 000000000..bd09c5dbf --- /dev/null +++ b/packages/monitoring/model/unauthorized.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Unauthorized = { + reason?: string; +}; diff --git a/packages/monitoring/package.json b/packages/monitoring/package.json new file mode 100644 index 000000000..c71b606cb --- /dev/null +++ b/packages/monitoring/package.json @@ -0,0 +1,68 @@ +{ + "version": "1.23.3", + "repository": { + "type": "git", + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/monitoring#readme", + "type": "module", + "license": "MIT", + "author": "Algolia", + "scripts": { + "build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js", + "clean": "rm -rf ./dist || true", + "test:bundle": "publint . && attw --pack ." + }, + "name": "@algolia/monitoring", + "description": "JavaScript client for monitoring", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/builds/node.js", + "module": "./dist/builds/node.js", + "require": "./dist/builds/node.cjs" + }, + "worker": { + "types": "./dist/worker.d.ts", + "default": "./dist/builds/worker.js" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/builds/browser.js", + "import": "./dist/builds/browser.js", + "default": "./dist/builds/browser.umd.js" + } + }, + "./dist/builds/*": "./dist/builds/*.js" + }, + "jsdelivr": "./dist/builds/browser.umd.js", + "unpkg": "./dist/builds/browser.umd.js", + "react-native": "./dist/builds/browser.js", + "files": [ + "dist", + "index.js", + "index.d.ts" + ], + "dependencies": { + "@algolia/client-common": "5.23.3", + "@algolia/requester-browser-xhr": "5.23.3", + "@algolia/requester-fetch": "5.23.3", + "@algolia/requester-node-http": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "publint": "0.3.10", + "rollup": "4.39.0", + "tsup": "8.4.0", + "typescript": "5.8.3" + }, + "engines": { + "node": ">= 14.0.0" + } +} diff --git a/packages/monitoring/rollup.config.js b/packages/monitoring/rollup.config.js new file mode 100644 index 000000000..8b5b5aabb --- /dev/null +++ b/packages/monitoring/rollup.config.js @@ -0,0 +1,17 @@ +export default [ + { + input: 'dist/builds/browser.min.js', + external: ['dom'], + cache: false, + output: { + esModule: false, + file: 'dist/builds/browser.umd.js', + name: '@algolia/monitoring', + format: 'umd', + sourcemap: false, + globals: { + ['monitoringClient']: 'monitoringClient', + }, + }, + }, +]; diff --git a/packages/monitoring/src/monitoringClient.ts b/packages/monitoring/src/monitoringClient.ts new file mode 100644 index 000000000..6f1e889ba --- /dev/null +++ b/packages/monitoring/src/monitoringClient.ts @@ -0,0 +1,458 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { + CreateClientOptions, + Headers, + Host, + QueryParameters, + Request, + RequestOptions, +} from '@algolia/client-common'; +import { createAuth, createTransporter, getAlgoliaAgent } from '@algolia/client-common'; + +import type { IncidentsResponse } from '../model/incidentsResponse'; +import type { IndexingTimeResponse } from '../model/indexingTimeResponse'; +import type { InfrastructureResponse } from '../model/infrastructureResponse'; +import type { InventoryResponse } from '../model/inventoryResponse'; +import type { LatencyResponse } from '../model/latencyResponse'; + +import type { StatusResponse } from '../model/statusResponse'; + +import type { + CustomDeleteProps, + CustomGetProps, + CustomPostProps, + CustomPutProps, + GetClusterIncidentsProps, + GetClusterStatusProps, + GetIndexingTimeProps, + GetLatencyProps, + GetMetricsProps, + GetReachabilityProps, +} from '../model/clientMethodProps'; + +export const apiClientVersion = '1.23.3'; + +function getDefaultHosts(): Host[] { + return [{ url: 'status.algolia.com', accept: 'readWrite', protocol: 'https' }]; +} + +export function createMonitoringClient({ + appId: appIdOption, + apiKey: apiKeyOption, + authMode, + algoliaAgents, + ...options +}: CreateClientOptions) { + const auth = createAuth(appIdOption, apiKeyOption, authMode); + const transporter = createTransporter({ + hosts: getDefaultHosts(), + ...options, + algoliaAgent: getAlgoliaAgent({ + algoliaAgents, + client: 'Monitoring', + version: apiClientVersion, + }), + baseHeaders: { + 'content-type': 'text/plain', + ...auth.headers(), + ...options.baseHeaders, + }, + baseQueryParameters: { + ...auth.queryParameters(), + ...options.baseQueryParameters, + }, + }); + + return { + transporter, + + /** + * The `appId` currently in use. + */ + appId: appIdOption, + + /** + * The `apiKey` currently in use. + */ + apiKey: apiKeyOption, + + /** + * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties. + */ + clearCache(): Promise { + return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => undefined); + }, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return transporter.algoliaAgent.value; + }, + + /** + * Adds a `segment` to the `x-algolia-agent` sent with every requests. + * + * @param segment - The algolia agent (user-agent) segment to add. + * @param version - The version of the agent. + */ + addAlgoliaAgent(segment: string, version?: string): void { + transporter.algoliaAgent.add({ segment, version }); + }, + + /** + * Helper method to switch the API key used to authenticate the requests. + * + * @param params - Method params. + * @param params.apiKey - The new API Key to use. + */ + setClientApiKey({ apiKey }: { apiKey: string }): void { + if (!authMode || authMode === 'WithinHeaders') { + transporter.baseHeaders['x-algolia-api-key'] = apiKey; + } else { + transporter.baseQueryParameters['x-algolia-api-key'] = apiKey; + } + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customDelete - The customDelete object. + * @param customDelete.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customDelete.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customDelete( + { path, parameters }: CustomDeleteProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customDelete`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customGet - The customGet object. + * @param customGet.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customGet.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customGet({ path, parameters }: CustomGetProps, requestOptions?: RequestOptions): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customGet`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPost - The customPost object. + * @param customPost.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPost.parameters - Query parameters to apply to the current query. + * @param customPost.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPost( + { path, parameters, body }: CustomPostProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPost`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPut - The customPut object. + * @param customPut.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPut.parameters - Query parameters to apply to the current query. + * @param customPut.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPut( + { path, parameters, body }: CustomPutProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPut`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves known incidents for the selected clusters. + * @param getClusterIncidents - The getClusterIncidents object. + * @param getClusterIncidents.clusters - Subset of clusters, separated by commas. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getClusterIncidents( + { clusters }: GetClusterIncidentsProps, + requestOptions?: RequestOptions, + ): Promise { + if (!clusters) { + throw new Error('Parameter `clusters` is required when calling `getClusterIncidents`.'); + } + + const requestPath = '/1/incidents/{clusters}'.replace('{clusters}', encodeURIComponent(clusters)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the status of selected clusters. + * @param getClusterStatus - The getClusterStatus object. + * @param getClusterStatus.clusters - Subset of clusters, separated by commas. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getClusterStatus({ clusters }: GetClusterStatusProps, requestOptions?: RequestOptions): Promise { + if (!clusters) { + throw new Error('Parameter `clusters` is required when calling `getClusterStatus`.'); + } + + const requestPath = '/1/status/{clusters}'.replace('{clusters}', encodeURIComponent(clusters)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves known incidents for all clusters. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getIncidents(requestOptions?: RequestOptions): Promise { + const requestPath = '/1/incidents'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves average times for indexing operations for selected clusters. + * @param getIndexingTime - The getIndexingTime object. + * @param getIndexingTime.clusters - Subset of clusters, separated by commas. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getIndexingTime( + { clusters }: GetIndexingTimeProps, + requestOptions?: RequestOptions, + ): Promise { + if (!clusters) { + throw new Error('Parameter `clusters` is required when calling `getIndexingTime`.'); + } + + const requestPath = '/1/indexing/{clusters}'.replace('{clusters}', encodeURIComponent(clusters)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the average latency for search requests for selected clusters. + * @param getLatency - The getLatency object. + * @param getLatency.clusters - Subset of clusters, separated by commas. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getLatency({ clusters }: GetLatencyProps, requestOptions?: RequestOptions): Promise { + if (!clusters) { + throw new Error('Parameter `clusters` is required when calling `getLatency`.'); + } + + const requestPath = '/1/latency/{clusters}'.replace('{clusters}', encodeURIComponent(clusters)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves metrics related to your Algolia infrastructure, aggregated over a selected time window. Access to this API is available as part of the [Premium or Elevate plans](https://www.algolia.com/pricing). You must authenticate requests with the `x-algolia-application-id` and `x-algolia-api-key` headers (using the Monitoring API key). + * @param getMetrics - The getMetrics object. + * @param getMetrics.metric - Metric to report. For more information about the individual metrics, see the description of the API response. To include all metrics, use `*`. + * @param getMetrics.period - Period over which to aggregate the metrics: - `minute`. Aggregate the last minute. 1 data point per 10 seconds. - `hour`. Aggregate the last hour. 1 data point per minute. - `day`. Aggregate the last day. 1 data point per 10 minutes. - `week`. Aggregate the last week. 1 data point per hour. - `month`. Aggregate the last month. 1 data point per day. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getMetrics({ metric, period }: GetMetricsProps, requestOptions?: RequestOptions): Promise { + if (!metric) { + throw new Error('Parameter `metric` is required when calling `getMetrics`.'); + } + + if (!period) { + throw new Error('Parameter `period` is required when calling `getMetrics`.'); + } + + const requestPath = '/1/infrastructure/{metric}/period/{period}' + .replace('{metric}', encodeURIComponent(metric)) + .replace('{period}', encodeURIComponent(period)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Test whether clusters are reachable or not. + * @param getReachability - The getReachability object. + * @param getReachability.clusters - Subset of clusters, separated by commas. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getReachability( + { clusters }: GetReachabilityProps, + requestOptions?: RequestOptions, + ): Promise<{ [key: string]: { [key: string]: boolean } }> { + if (!clusters) { + throw new Error('Parameter `clusters` is required when calling `getReachability`.'); + } + + const requestPath = '/1/reachability/{clusters}/probes'.replace('{clusters}', encodeURIComponent(clusters)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the servers that belong to clusters. The response depends on whether you authenticate your API request: - With authentication, the response lists the servers assigned to your Algolia application\'s cluster. - Without authentication, the response lists the servers for all Algolia clusters. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getServers(requestOptions?: RequestOptions): Promise { + const requestPath = '/1/inventory/servers'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves the status of all Algolia clusters and instances. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getStatus(requestOptions?: RequestOptions): Promise { + const requestPath = '/1/status'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + }; +} diff --git a/packages/monitoring/tsconfig.json b/packages/monitoring/tsconfig.json new file mode 100644 index 000000000..444e8bb64 --- /dev/null +++ b/packages/monitoring/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src", "model", "builds"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/monitoring/tsup.config.ts b/packages/monitoring/tsup.config.ts new file mode 100644 index 000000000..88909c2db --- /dev/null +++ b/packages/monitoring/tsup.config.ts @@ -0,0 +1,67 @@ +import type { Options } from 'tsup'; +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions, getDependencies } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +const nodeOptions: Options = { + ...getBaseNodeOptions(pkg, __dirname), + dts: { entry: { node: 'builds/node.ts' } }, + entry: ['builds/node.ts', 'src/*.ts'], +}; + +const nodeConfigs: Options[] = [ + { + ...nodeOptions, + format: 'cjs', + name: `node ${pkg.name} cjs`, + }, + { + ...nodeOptions, + format: 'esm', + name: `node ${pkg.name} esm`, + }, + { + ...nodeOptions, + format: 'esm', + name: `fetch ${pkg.name} esm`, + dts: { entry: { fetch: 'builds/fetch.ts' } }, + external: getDependencies(pkg, 'fetch'), + entry: ['builds/fetch.ts', 'src/*.ts'], + }, + { + ...nodeOptions, + format: 'esm', + name: `worker ${pkg.name} esm`, + dts: { entry: { worker: 'builds/worker.ts' } }, + external: getDependencies(pkg, 'worker'), + entry: ['builds/worker.ts', 'src/*.ts'], + }, +]; + +const browserOptions: Options = { + ...getBaseBrowserOptions(pkg, __dirname), + globalName: 'monitoringClient', +}; + +const browserConfigs: Options[] = [ + { + ...browserOptions, + minify: false, + name: `browser ${pkg.name} esm`, + dts: { entry: { browser: 'builds/browser.ts' } }, + entry: ['builds/browser.ts', 'src/*.ts'], + }, + { + ...browserOptions, + dts: false, + minify: true, + name: `browser ${pkg.name} min esm`, + entry: { 'builds/browser.min': 'builds/browser.ts' }, + external: [], + noExternal: getDependencies(pkg, 'xhr'), + }, +]; + +export default defineConfig([...nodeConfigs, ...browserConfigs]); diff --git a/packages/recommend/LICENSE b/packages/recommend/LICENSE new file mode 100644 index 000000000..fddf416f9 --- /dev/null +++ b/packages/recommend/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-Present Algolia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/recommend/README.md b/packages/recommend/README.md index 33c79a68d..3df56eb06 100644 --- a/packages/recommend/README.md +++ b/packages/recommend/README.md @@ -1,76 +1,77 @@

-

Algolia Recommend

+ + Algolia for JavaScript + -

The perfect starting point to integrate Algolia Recommend within your JavaScript project

+

The perfect starting point to integrate Algolia within your JavaScript project

NPM version - License + NPM downloads + jsDelivr Downloads + License

- Documentation • - UI library • + Documentation • + InstantSearchCommunity ForumStack OverflowReport a bug • - Support + FAQ • + Support

## ✨ Features -- Thin & **minimal low-level HTTP client** to interact with Algolia's Recommend API +- Thin & **minimal low-level HTTP client** to interact with Algolia's API - Works both on the **browser** and **node.js** -- **UMD compatible**, you can use it with any module loader +- **UMD and ESM compatible**, you can use it with any module loader - Built with TypeScript ## 💡 Getting Started -First, install Algolia Recommend API Client via the [npm](https://www.npmjs.com/get-npm) package manager: +> [!TIP] +> This API client is already a dependency of [the algoliasearch client](https://www.npmjs.com/package/algoliasearch), you don't need to manually install `@algolia/recommend` if you already have `algoliasearch` installed. + +To get started, you first need to install @algolia/recommend (or any other available API client package). +All of our clients comes with type definition, and are available for both browser and node environments. + +### With a package manager ```bash -npm install @algolia/recommend +yarn add @algolia/recommend@5.23.3 +# or +npm install @algolia/recommend@5.23.3 +# or +pnpm add @algolia/recommend@5.23.3 +``` + +### Without a package manager + +Add the following JavaScript snippet to the of your website: + +```html + ``` -Then, let's retrieve recommendations: +### Usage + +You can now import the Algolia API client in your project and play with it. ```js -const algoliarecommend = require('@algolia/recommend'); - -const client = algoliarecommend('YourApplicationID', 'YourAdminAPIKey'); - -client - .getFrequentlyBoughtTogether([ - { - indexName: 'your_index_name', - objectID: 'your_object_id', - }, - ]) - .then(({ results }) => { - console.log(results); - }) - .catch(err => { - console.log(err); - }); - -client - .getRelatedProducts([ - { - indexName: 'your_index_name', - objectID: 'your_object_id', - }, - ]) - .then(({ results }) => { - console.log(results); - }) - .catch(err => { - console.log(err); - }); +import { recommendClient } from '@algolia/recommend'; + +const client = recommendClient('YOUR_APP_ID', 'YOUR_API_KEY'); ``` -For full documentation, visit the **[online documentation](https://www.algolia.com/doc/api-client/methods/recommend/)**. +For full documentation, visit the **[Algolia JavaScript API Client](https://www.algolia.com/doc/libraries/javascript/v5/methods/recommend/)**. + +## ❓ Troubleshooting + +Encountering an issue? Before reaching out to support, we recommend heading to our [FAQ](https://www.algolia.com/doc/libraries/javascript/v5/) where you will find answers for the most common issues and gotchas with the client. You can also open [a GitHub issue](https://github.com/algolia/api-clients-automation/issues/new?assignees=&labels=&projects=&template=Bug_report.md) ## 📄 License -Algolia Recommend API Client is an open-sourced software licensed under the [MIT license](LICENSE.md). +The Algolia JavaScript API Client is an open-sourced software licensed under the [MIT license](LICENSE). diff --git a/packages/recommend/api-extractor.json b/packages/recommend/api-extractor.json deleted file mode 100644 index a522871c3..000000000 --- a/packages/recommend/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages/recommend/src/builds/node.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/recommend.d.ts" - } -} diff --git a/packages/recommend/builds/browser.ts b/packages/recommend/builds/browser.ts new file mode 100644 index 000000000..89a01125c --- /dev/null +++ b/packages/recommend/builds/browser.ts @@ -0,0 +1,50 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import { createXhrRequester } from '@algolia/requester-browser-xhr'; + +import { + createBrowserLocalStorageCache, + createFallbackableCache, + createMemoryCache, + createNullLogger, +} from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { apiClientVersion, createRecommendClient } from '../src/recommendClient'; + +export { apiClientVersion } from '../src/recommendClient'; + +export * from '../model'; + +export function recommendClient(appId: string, apiKey: string, options?: ClientOptions): RecommendClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return createRecommendClient({ + appId, + apiKey, + timeouts: { + connect: 1000, + read: 2000, + write: 30000, + }, + logger: createNullLogger(), + requester: createXhrRequester(), + algoliaAgents: [{ segment: 'Browser' }], + authMode: 'WithinQueryParameters', + responsesCache: createMemoryCache(), + requestsCache: createMemoryCache({ serializable: false }), + hostsCache: createFallbackableCache({ + caches: [createBrowserLocalStorageCache({ key: `${apiClientVersion}-${appId}` }), createMemoryCache()], + }), + ...options, + }); +} + +export type RecommendClient = ReturnType; diff --git a/packages/recommend/builds/fetch.ts b/packages/recommend/builds/fetch.ts new file mode 100644 index 000000000..dffc71568 --- /dev/null +++ b/packages/recommend/builds/fetch.ts @@ -0,0 +1,43 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type RecommendClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createRecommendClient } from '../src/recommendClient'; + +export { apiClientVersion } from '../src/recommendClient'; + +export * from '../model'; + +export function recommendClient(appId: string, apiKey: string, options?: ClientOptions): RecommendClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createRecommendClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Fetch' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/recommend/builds/node.ts b/packages/recommend/builds/node.ts new file mode 100644 index 000000000..a7d2a8f35 --- /dev/null +++ b/packages/recommend/builds/node.ts @@ -0,0 +1,44 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type RecommendClient = ReturnType; + +import { createHttpRequester } from '@algolia/requester-node-http'; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createRecommendClient } from '../src/recommendClient'; + +export { apiClientVersion } from '../src/recommendClient'; + +export * from '../model'; + +export function recommendClient(appId: string, apiKey: string, options?: ClientOptions): RecommendClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createRecommendClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createHttpRequester(), + algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/recommend/builds/worker.ts b/packages/recommend/builds/worker.ts new file mode 100644 index 000000000..7d7dceb51 --- /dev/null +++ b/packages/recommend/builds/worker.ts @@ -0,0 +1,43 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type RecommendClient = ReturnType; + +import { createMemoryCache, createNullCache, createNullLogger } from '@algolia/client-common'; +import { createFetchRequester } from '@algolia/requester-fetch'; + +import type { ClientOptions } from '@algolia/client-common'; + +import { createRecommendClient } from '../src/recommendClient'; + +export { apiClientVersion } from '../src/recommendClient'; + +export * from '../model'; + +export function recommendClient(appId: string, apiKey: string, options?: ClientOptions): RecommendClient { + if (!appId || typeof appId !== 'string') { + throw new Error('`appId` is missing.'); + } + + if (!apiKey || typeof apiKey !== 'string') { + throw new Error('`apiKey` is missing.'); + } + + return { + ...createRecommendClient({ + appId, + apiKey, + timeouts: { + connect: 2000, + read: 5000, + write: 30000, + }, + logger: createNullLogger(), + requester: createFetchRequester(), + algoliaAgents: [{ segment: 'Worker' }], + responsesCache: createNullCache(), + requestsCache: createNullCache(), + hostsCache: createMemoryCache(), + ...options, + }), + }; +} diff --git a/packages/recommend/index.d.ts b/packages/recommend/index.d.ts index 70d1e5942..e81a1cd3e 100644 --- a/packages/recommend/index.d.ts +++ b/packages/recommend/index.d.ts @@ -1,3 +1 @@ -/* eslint-disable import/no-unresolved*/ -export * from './dist/recommend'; -export { default } from './dist/recommend'; +export * from './dist/node'; diff --git a/packages/recommend/index.js b/packages/recommend/index.js index 8122c2480..21e26aad3 100644 --- a/packages/recommend/index.js +++ b/packages/recommend/index.js @@ -1,15 +1 @@ -/* eslint-disable functional/immutable-data, import/no-commonjs */ -const recommend = require('./dist/recommend.cjs.js'); - -/** - * The Common JS build is the default entry point for the Node environment. Keep in - * in mind, that for the browser environment, we hint the bundler to use the UMD - * build instead as specified on the key `browser` of our `package.json` file. - */ -module.exports = recommend; - -/** - * In addition, we also set explicitly the default export below making - * this Common JS module in compliance with es6 modules specification. - */ -module.exports.default = recommend; +module.exports = require('./dist/builds/node.cjs'); diff --git a/packages/recommend/model/advancedSyntaxFeatures.ts b/packages/recommend/model/advancedSyntaxFeatures.ts new file mode 100644 index 000000000..61e577d48 --- /dev/null +++ b/packages/recommend/model/advancedSyntaxFeatures.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AdvancedSyntaxFeatures = 'exactPhrase' | 'excludeWords'; diff --git a/packages/recommend/model/alternativesAsExact.ts b/packages/recommend/model/alternativesAsExact.ts new file mode 100644 index 000000000..b4d50c7a5 --- /dev/null +++ b/packages/recommend/model/alternativesAsExact.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type AlternativesAsExact = 'ignorePlurals' | 'singleWordSynonym' | 'multiWordsSynonym' | 'ignoreConjugations'; diff --git a/packages/recommend/model/aroundPrecision.ts b/packages/recommend/model/aroundPrecision.ts new file mode 100644 index 000000000..79ff0cd59 --- /dev/null +++ b/packages/recommend/model/aroundPrecision.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Range } from './range'; + +/** + * Precision of a coordinate-based search in meters to group results with similar distances. The Geo ranking criterion considers all matches within the same range of distances to be equal. + */ +export type AroundPrecision = number | Array; diff --git a/packages/recommend/model/aroundRadius.ts b/packages/recommend/model/aroundRadius.ts new file mode 100644 index 000000000..8198f1e75 --- /dev/null +++ b/packages/recommend/model/aroundRadius.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AroundRadiusAll } from './aroundRadiusAll'; + +/** + * Maximum radius for a search around a central location. This parameter works in combination with the `aroundLatLng` and `aroundLatLngViaIP` parameters. By default, the search radius is determined automatically from the density of hits around the central location. The search radius is small if there are many hits close to the central coordinates. + */ +export type AroundRadius = number | AroundRadiusAll; diff --git a/packages/recommend/model/aroundRadiusAll.ts b/packages/recommend/model/aroundRadiusAll.ts new file mode 100644 index 000000000..e5f107060 --- /dev/null +++ b/packages/recommend/model/aroundRadiusAll.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Return all records with a valid `_geoloc` attribute. Don\'t filter by distance. + */ +export type AroundRadiusAll = 'all'; diff --git a/packages/recommend/model/autoFacetFilter.ts b/packages/recommend/model/autoFacetFilter.ts new file mode 100644 index 000000000..3d7195362 --- /dev/null +++ b/packages/recommend/model/autoFacetFilter.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Facet attribute. Only recommendations with the same value (or only recommendations with a different value) as the original viewed item are included. + */ +export type AutoFacetFilter = { + /** + * Facet attribute. + */ + facet?: string; + + /** + * Whether the filter is negative. If true, recommendations must not have the same value for the `facet` attribute. If false, recommendations must have the same value for the `facet` attribute. + */ + negative?: boolean; +}; diff --git a/packages/recommend/model/banner.ts b/packages/recommend/model/banner.ts new file mode 100644 index 000000000..793feec15 --- /dev/null +++ b/packages/recommend/model/banner.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BannerImage } from './bannerImage'; +import type { BannerLink } from './bannerLink'; + +/** + * Banner with image and link to redirect users. + */ +export type Banner = { + image?: BannerImage; + + link?: BannerLink; +}; diff --git a/packages/recommend/model/bannerImage.ts b/packages/recommend/model/bannerImage.ts new file mode 100644 index 000000000..a0988168e --- /dev/null +++ b/packages/recommend/model/bannerImage.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BannerImageUrl } from './bannerImageUrl'; + +/** + * Image to show inside a banner. + */ +export type BannerImage = { + urls?: Array; + + title?: string; +}; diff --git a/packages/recommend/model/bannerImageUrl.ts b/packages/recommend/model/bannerImageUrl.ts new file mode 100644 index 000000000..6be2b3efd --- /dev/null +++ b/packages/recommend/model/bannerImageUrl.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * URL for an image to show inside a banner. + */ +export type BannerImageUrl = { + url?: string; +}; diff --git a/packages/recommend/model/bannerLink.ts b/packages/recommend/model/bannerLink.ts new file mode 100644 index 000000000..52800a208 --- /dev/null +++ b/packages/recommend/model/bannerLink.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Link for a banner defined in the Merchandising Studio. + */ +export type BannerLink = { + url?: string; +}; diff --git a/packages/recommend/model/baseIndexSettings.ts b/packages/recommend/model/baseIndexSettings.ts new file mode 100644 index 000000000..3357a401f --- /dev/null +++ b/packages/recommend/model/baseIndexSettings.ts @@ -0,0 +1,105 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SupportedLanguage } from './supportedLanguage'; + +export type BaseIndexSettings = { + /** + * Attributes used for [faceting](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/). Facets are attributes that let you categorize search results. They can be used for filtering search results. By default, no attribute is used for faceting. Attribute names are case-sensitive. **Modifiers** - `filterOnly(\"ATTRIBUTE\")`. Allows the attribute to be used as a filter but doesn\'t evaluate the facet values. - `searchable(\"ATTRIBUTE\")`. Allows searching for facet values. - `afterDistinct(\"ATTRIBUTE\")`. Evaluates the facet count _after_ deduplication with `distinct`. This ensures accurate facet counts. You can apply this modifier to searchable facets: `afterDistinct(searchable(ATTRIBUTE))`. + */ + attributesForFaceting?: Array; + + /** + * Creates [replica indices](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/replicas/). Replicas are copies of a primary index with the same records but different settings, synonyms, or rules. If you want to offer a different ranking or sorting of your search results, you\'ll use replica indices. All index operations on a primary index are automatically forwarded to its replicas. To add a replica index, you must provide the complete set of replicas to this parameter. If you omit a replica from this list, the replica turns into a regular, standalone index that will no longer be synced with the primary index. **Modifier** - `virtual(\"REPLICA\")`. Create a virtual replica, Virtual replicas don\'t increase the number of records and are optimized for [Relevant sorting](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/relevant-sort/). + */ + replicas?: Array; + + /** + * Maximum number of search results that can be obtained through pagination. Higher pagination limits might slow down your search. For pagination limits above 1,000, the sorting of results beyond the 1,000th hit can\'t be guaranteed. + */ + paginationLimitedTo?: number; + + /** + * Attributes that can\'t be retrieved at query time. This can be useful if you want to use an attribute for ranking or to [restrict access](https://www.algolia.com/doc/guides/security/api-keys/how-to/user-restricted-access-to-data/), but don\'t want to include it in the search results. Attribute names are case-sensitive. + */ + unretrievableAttributes?: Array; + + /** + * Creates a list of [words which require exact matches](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#turn-off-typo-tolerance-for-certain-words). This also turns off [word splitting and concatenation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/splitting-and-concatenation/) for the specified words. + */ + disableTypoToleranceOnWords?: Array; + + /** + * Attributes, for which you want to support [Japanese transliteration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/#japanese-transliteration-and-type-ahead). Transliteration supports searching in any of the Japanese writing systems. To support transliteration, you must set the indexing language to Japanese. Attribute names are case-sensitive. + */ + attributesToTransliterate?: Array; + + /** + * Attributes for which to split [camel case](https://wikipedia.org/wiki/Camel_case) words. Attribute names are case-sensitive. + */ + camelCaseAttributes?: Array; + + /** + * Searchable attributes to which Algolia should apply [word segmentation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/how-to/customize-segmentation/) (decompounding). Attribute names are case-sensitive. Compound words are formed by combining two or more individual words, and are particularly prevalent in Germanic languages—for example, \"firefighter\". With decompounding, the individual components are indexed separately. You can specify different lists for different languages. Decompounding is supported for these languages: Dutch (`nl`), German (`de`), Finnish (`fi`), Danish (`da`), Swedish (`sv`), and Norwegian (`no`). Decompounding doesn\'t work for words with [non-spacing mark Unicode characters](https://www.charactercodes.net/category/non-spacing_mark). For example, `Gartenstühle` won\'t be decompounded if the `ü` consists of `u` (U+0075) and `◌̈` (U+0308). + */ + decompoundedAttributes?: Record; + + /** + * Languages for language-specific processing steps, such as word detection and dictionary settings. **You should always specify an indexing language.** If you don\'t specify an indexing language, the search engine uses all [supported languages](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/supported-languages/), or the languages you specified with the `ignorePlurals` or `removeStopWords` parameters. This can lead to unexpected search results. For more information, see [Language-specific configuration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/). + */ + indexLanguages?: Array; + + /** + * Searchable attributes for which you want to turn off [prefix matching](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/#adjusting-prefix-search). Attribute names are case-sensitive. + */ + disablePrefixOnAttributes?: Array; + + /** + * Whether arrays with exclusively non-negative integers should be compressed for better performance. If true, the compressed arrays may be reordered. + */ + allowCompressionOfIntegerArray?: boolean; + + /** + * Numeric attributes that can be used as [numerical filters](https://www.algolia.com/doc/guides/managing-results/rules/detecting-intent/how-to/applying-a-custom-filter-for-a-specific-query/#numerical-filters). Attribute names are case-sensitive. By default, all numeric attributes are available as numerical filters. For faster indexing, reduce the number of numeric attributes. To turn off filtering for all numeric attributes, specify an attribute that doesn\'t exist in your index, such as `NO_NUMERIC_FILTERING`. **Modifier** - `equalOnly(\"ATTRIBUTE\")`. Support only filtering based on equality comparisons `=` and `!=`. + */ + numericAttributesForFiltering?: Array; + + /** + * Control which non-alphanumeric characters are indexed. By default, Algolia ignores [non-alphanumeric characters](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/how-to/how-to-search-in-hyphenated-attributes/#handling-non-alphanumeric-characters) like hyphen (`-`), plus (`+`), and parentheses (`(`,`)`). To include such characters, define them with `separatorsToIndex`. Separators are all non-letter characters except spaces and currency characters, such as $€£¥. With `separatorsToIndex`, Algolia treats separator characters as separate words. For example, in a search for \"Disney+\", Algolia considers \"Disney\" and \"+\" as two separate words. + */ + separatorsToIndex?: string; + + /** + * Attributes used for searching. Attribute names are case-sensitive. By default, all attributes are searchable and the [Attribute](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#attribute) ranking criterion is turned off. With a non-empty list, Algolia only returns results with matches in the selected attributes. In addition, the Attribute ranking criterion is turned on: matches in attributes that are higher in the list of `searchableAttributes` rank first. To make matches in two attributes rank equally, include them in a comma-separated string, such as `\"title,alternate_title\"`. Attributes with the same priority are always unordered. For more information, see [Searchable attributes](https://www.algolia.com/doc/guides/sending-and-managing-data/prepare-your-data/how-to/setting-searchable-attributes/). **Modifier** - `unordered(\"ATTRIBUTE\")`. Ignore the position of a match within the attribute. Without a modifier, matches at the beginning of an attribute rank higher than matches at the end. + */ + searchableAttributes?: Array; + + /** + * An object with custom data. You can store up to 32kB as custom data. + */ + userData?: any | null; + + /** + * Characters and their normalized replacements. This overrides Algolia\'s default [normalization](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/normalization/). + */ + customNormalization?: { [key: string]: { [key: string]: string } }; + + /** + * Attribute that should be used to establish groups of results. Attribute names are case-sensitive. All records with the same value for this attribute are considered a group. You can combine `attributeForDistinct` with the `distinct` search parameter to control how many items per group are included in the search results. If you want to use the same attribute also for faceting, use the `afterDistinct` modifier of the `attributesForFaceting` setting. This applies faceting _after_ deduplication, which will result in accurate facet counts. + */ + attributeForDistinct?: string; + + /** + * Maximum number of facet values to return when [searching for facet values](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#search-for-facet-values). + */ + maxFacetHits?: number; + + /** + * Characters for which diacritics should be preserved. By default, Algolia removes diacritics from letters. For example, `é` becomes `e`. If this causes issues in your search, you can specify characters that should keep their diacritics. + */ + keepDiacriticsOnCharacters?: string; + + /** + * Attributes to use as [custom ranking](https://www.algolia.com/doc/guides/managing-results/must-do/custom-ranking/). Attribute names are case-sensitive. The custom ranking attributes decide which items are shown first if the other ranking criteria are equal. Records with missing values for your selected custom ranking attributes are always sorted last. Boolean attributes are sorted based on their alphabetical order. **Modifiers** - `asc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in ascending order. - `desc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in descending order. If you use two or more custom ranking attributes, [reduce the precision](https://www.algolia.com/doc/guides/managing-results/must-do/custom-ranking/how-to/controlling-custom-ranking-metrics-precision/) of your first attributes, or the other attributes will never be applied. + */ + customRanking?: Array; +}; diff --git a/packages/recommend/model/baseRecommendIndexSettings.ts b/packages/recommend/model/baseRecommendIndexSettings.ts new file mode 100644 index 000000000..c66832538 --- /dev/null +++ b/packages/recommend/model/baseRecommendIndexSettings.ts @@ -0,0 +1,177 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AdvancedSyntaxFeatures } from './advancedSyntaxFeatures'; +import type { AlternativesAsExact } from './alternativesAsExact'; +import type { Distinct } from './distinct'; +import type { ExactOnSingleWordQuery } from './exactOnSingleWordQuery'; +import type { IgnorePlurals } from './ignorePlurals'; +import type { OptionalWords } from './optionalWords'; +import type { QueryType } from './queryType'; +import type { ReRankingApplyFilter } from './reRankingApplyFilter'; +import type { RemoveStopWords } from './removeStopWords'; +import type { RemoveWordsIfNoResults } from './removeWordsIfNoResults'; +import type { RenderingContent } from './renderingContent'; +import type { SupportedLanguage } from './supportedLanguage'; +import type { TypoTolerance } from './typoTolerance'; + +export type BaseRecommendIndexSettings = { + /** + * Attributes to include in the API response. To reduce the size of your response, you can retrieve only some of the attributes. Attribute names are case-sensitive. - `*` retrieves all attributes, except attributes included in the `customRanking` and `unretrievableAttributes` settings. - To retrieve all attributes except a specific one, prefix the attribute with a dash and combine it with the `*`: `[\"*\", \"-ATTRIBUTE\"]`. - The `objectID` attribute is always included. + */ + attributesToRetrieve?: Array; + + /** + * Determines the order in which Algolia returns your results. By default, each entry corresponds to a [ranking criteria](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/). The tie-breaking algorithm sequentially applies each criterion in the order they\'re specified. If you configure a replica index for [sorting by an attribute](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/how-to/sort-by-attribute/), you put the sorting attribute at the top of the list. **Modifiers** - `asc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in ascending order. - `desc(\"ATTRIBUTE\")`. Sort the index by the values of an attribute, in descending order. Before you modify the default setting, you should test your changes in the dashboard, and by [A/B testing](https://www.algolia.com/doc/guides/ab-testing/what-is-ab-testing/). + */ + ranking?: Array; + + /** + * Relevancy threshold below which less relevant results aren\'t included in the results. You can only set `relevancyStrictness` on [virtual replica indices](https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/in-depth/replicas/#what-are-virtual-replicas). Use this setting to strike a balance between the relevance and number of returned results. + */ + relevancyStrictness?: number; + + /** + * Attributes to highlight. By default, all searchable attributes are highlighted. Use `*` to highlight all attributes or use an empty array `[]` to turn off highlighting. Attribute names are case-sensitive. With highlighting, strings that match the search query are surrounded by HTML tags defined by `highlightPreTag` and `highlightPostTag`. You can use this to visually highlight matching parts of a search query in your UI. For more information, see [Highlighting and snippeting](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/highlighting-snippeting/js/). + */ + attributesToHighlight?: Array; + + /** + * Attributes for which to enable snippets. Attribute names are case-sensitive. Snippets provide additional context to matched words. If you enable snippets, they include 10 words, including the matched word. The matched word will also be wrapped by HTML tags for highlighting. You can adjust the number of words with the following notation: `ATTRIBUTE:NUMBER`, where `NUMBER` is the number of words to be extracted. + */ + attributesToSnippet?: Array; + + /** + * HTML tag to insert before the highlighted parts in all highlighted results and snippets. + */ + highlightPreTag?: string; + + /** + * HTML tag to insert after the highlighted parts in all highlighted results and snippets. + */ + highlightPostTag?: string; + + /** + * String used as an ellipsis indicator when a snippet is truncated. + */ + snippetEllipsisText?: string; + + /** + * Whether to restrict highlighting and snippeting to items that at least partially matched the search query. By default, all items are highlighted and snippeted. + */ + restrictHighlightAndSnippetArrays?: boolean; + + /** + * Minimum number of characters a word in the search query must contain to accept matches with [one typo](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#configuring-word-length-for-typos). + */ + minWordSizefor1Typo?: number; + + /** + * Minimum number of characters a word in the search query must contain to accept matches with [two typos](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/in-depth/configuring-typo-tolerance/#configuring-word-length-for-typos). + */ + minWordSizefor2Typos?: number; + + typoTolerance?: TypoTolerance; + + /** + * Whether to allow typos on numbers in the search query. Turn off this setting to reduce the number of irrelevant matches when searching in large sets of similar numbers. + */ + allowTyposOnNumericTokens?: boolean; + + /** + * Attributes for which you want to turn off [typo tolerance](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/). Attribute names are case-sensitive. Returning only exact matches can help when: - [Searching in hyphenated attributes](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/how-to/how-to-search-in-hyphenated-attributes/). - Reducing the number of matches when you have too many. This can happen with attributes that are long blocks of text, such as product descriptions. Consider alternatives such as `disableTypoToleranceOnWords` or adding synonyms if your attributes have intentional unusual spellings that might look like typos. + */ + disableTypoToleranceOnAttributes?: Array; + + ignorePlurals?: IgnorePlurals; + + removeStopWords?: RemoveStopWords; + + /** + * Languages for language-specific query processing steps such as plurals, stop-word removal, and word-detection dictionaries. This setting sets a default list of languages used by the `removeStopWords` and `ignorePlurals` settings. This setting also sets a dictionary for word detection in the logogram-based [CJK](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/normalization/#normalization-for-logogram-based-languages-cjk) languages. To support this, you must place the CJK language **first**. **You should always specify a query language.** If you don\'t specify an indexing language, the search engine uses all [supported languages](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/supported-languages/), or the languages you specified with the `ignorePlurals` or `removeStopWords` parameters. This can lead to unexpected search results. For more information, see [Language-specific configuration](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/). + */ + queryLanguages?: Array; + + /** + * Whether to split compound words in the query into their building blocks. For more information, see [Word segmentation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/language-specific-configurations/#splitting-compound-words). Word segmentation is supported for these languages: German, Dutch, Finnish, Swedish, and Norwegian. Decompounding doesn\'t work for words with [non-spacing mark Unicode characters](https://www.charactercodes.net/category/non-spacing_mark). For example, `Gartenstühle` won\'t be decompounded if the `ü` consists of `u` (U+0075) and `◌̈` (U+0308). + */ + decompoundQuery?: boolean; + + /** + * Whether to enable rules. + */ + enableRules?: boolean; + + /** + * Whether to enable Personalization. + */ + enablePersonalization?: boolean; + + queryType?: QueryType; + + removeWordsIfNoResults?: RemoveWordsIfNoResults; + + /** + * Whether to support phrase matching and excluding words from search queries. Use the `advancedSyntaxFeatures` parameter to control which feature is supported. + */ + advancedSyntax?: boolean; + + optionalWords?: OptionalWords | null; + + /** + * Searchable attributes for which you want to [turn off the Exact ranking criterion](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/adjust-exact-settings/#turn-off-exact-for-some-attributes). Attribute names are case-sensitive. This can be useful for attributes with long values, where the likelihood of an exact match is high, such as product descriptions. Turning off the Exact ranking criterion for these attributes favors exact matching on other attributes. This reduces the impact of individual attributes with a lot of content on ranking. + */ + disableExactOnAttributes?: Array; + + exactOnSingleWordQuery?: ExactOnSingleWordQuery; + + /** + * Determine which plurals and synonyms should be considered an exact matches. By default, Algolia treats singular and plural forms of a word, and single-word synonyms, as [exact](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#exact) matches when searching. For example: - \"swimsuit\" and \"swimsuits\" are treated the same - \"swimsuit\" and \"swimwear\" are treated the same (if they are [synonyms](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/adding-synonyms/#regular-synonyms)). - `ignorePlurals`. Plurals and similar declensions added by the `ignorePlurals` setting are considered exact matches. - `singleWordSynonym`. Single-word synonyms, such as \"NY\" = \"NYC\", are considered exact matches. - `multiWordsSynonym`. Multi-word synonyms, such as \"NY\" = \"New York\", are considered exact matches. + */ + alternativesAsExact?: Array; + + /** + * Advanced search syntax features you want to support. - `exactPhrase`. Phrases in quotes must match exactly. For example, `sparkly blue \"iPhone case\"` only returns records with the exact string \"iPhone case\". - `excludeWords`. Query words prefixed with a `-` must not occur in a record. For example, `search -engine` matches records that contain \"search\" but not \"engine\". This setting only has an effect if `advancedSyntax` is true. + */ + advancedSyntaxFeatures?: Array; + + distinct?: Distinct; + + /** + * Whether to replace a highlighted word with the matched synonym. By default, the original words are highlighted even if a synonym matches. For example, with `home` as a synonym for `house` and a search for `home`, records matching either \"home\" or \"house\" are included in the search results, and either \"home\" or \"house\" are highlighted. With `replaceSynonymsInHighlight` set to `true`, a search for `home` still matches the same records, but all occurrences of \"house\" are replaced by \"home\" in the highlighted response. + */ + replaceSynonymsInHighlight?: boolean; + + /** + * Minimum proximity score for two matching words. This adjusts the [Proximity ranking criterion](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/#proximity) by equally scoring matches that are farther apart. For example, if `minProximity` is 2, neighboring matches and matches with one word between them would have the same score. + */ + minProximity?: number; + + /** + * Properties to include in the API response of search and browse requests. By default, all response properties are included. To reduce the response size, you can select which properties should be included. An empty list may lead to an empty API response (except properties you can\'t exclude). You can\'t exclude these properties: `message`, `warning`, `cursor`, `abTestVariantID`, or any property added by setting `getRankingInfo` to true. Your search depends on the `hits` field. If you omit this field, searches won\'t return any results. Your UI might also depend on other properties, for example, for pagination. Before restricting the response size, check the impact on your search experience. + */ + responseFields?: Array; + + /** + * Maximum number of facet values to return for each facet. + */ + maxValuesPerFacet?: number; + + /** + * Order in which to retrieve facet values. - `count`. Facet values are retrieved by decreasing count. The count is the number of matching records containing this facet value. - `alpha`. Retrieve facet values alphabetically. This setting doesn\'t influence how facet values are displayed in your UI (see `renderingContent`). For more information, see [facet value display](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/facet-display/js/). + */ + sortFacetValuesBy?: string; + + /** + * Whether the best matching attribute should be determined by minimum proximity. This setting only affects ranking if the Attribute ranking criterion comes before Proximity in the `ranking` setting. If true, the best matching attribute is selected based on the minimum proximity of multiple matches. Otherwise, the best matching attribute is determined by the order in the `searchableAttributes` setting. + */ + attributeCriteriaComputedByMinProximity?: boolean; + + renderingContent?: RenderingContent; + + /** + * Whether this search will use [Dynamic Re-Ranking](https://www.algolia.com/doc/guides/algolia-ai/re-ranking/). This setting only has an effect if you activated Dynamic Re-Ranking for this index in the Algolia dashboard. + */ + enableReRanking?: boolean; + + reRankingApplyFilter?: ReRankingApplyFilter | null; +}; diff --git a/packages/recommend/model/baseRecommendRequest.ts b/packages/recommend/model/baseRecommendRequest.ts new file mode 100644 index 000000000..ae8b1782e --- /dev/null +++ b/packages/recommend/model/baseRecommendRequest.ts @@ -0,0 +1,22 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendSearchParams } from './recommendSearchParams'; + +export type BaseRecommendRequest = { + /** + * Index name (case-sensitive). + */ + indexName: string; + + /** + * Minimum score a recommendation must have to be included in the response. + */ + threshold: number; + + /** + * Maximum number of recommendations to retrieve. By default, all recommendations are returned and no fallback request is made. Depending on the available recommendations and the other request parameters, the actual number of recommendations may be lower than this value. + */ + maxRecommendations?: number; + + queryParameters?: RecommendSearchParams; +}; diff --git a/packages/recommend/model/baseRecommendSearchParams.ts b/packages/recommend/model/baseRecommendSearchParams.ts new file mode 100644 index 000000000..bd10f6bac --- /dev/null +++ b/packages/recommend/model/baseRecommendSearchParams.ts @@ -0,0 +1,131 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AroundPrecision } from './aroundPrecision'; +import type { AroundRadius } from './aroundRadius'; +import type { FacetFilters } from './facetFilters'; +import type { InsideBoundingBox } from './insideBoundingBox'; +import type { NumericFilters } from './numericFilters'; +import type { OptionalFilters } from './optionalFilters'; +import type { SupportedLanguage } from './supportedLanguage'; +import type { TagFilters } from './tagFilters'; + +export type BaseRecommendSearchParams = { + /** + * Keywords to be used instead of the search query to conduct a more broader search. Using the `similarQuery` parameter changes other settings: - `queryType` is set to `prefixNone`. - `removeStopWords` is set to true. - `words` is set as the first ranking criterion. - All remaining words are treated as `optionalWords`. Since the `similarQuery` is supposed to do a broad search, they usually return many results. Combine it with `filters` to narrow down the list of results. + */ + similarQuery?: string; + + /** + * Filter expression to only include items that match the filter criteria in the response. You can use these filter expressions: - **Numeric filters.** ` `, where `` is one of `<`, `<=`, `=`, `!=`, `>`, `>=`. - **Ranges.** `: TO ` where `` and `` are the lower and upper limits of the range (inclusive). - **Facet filters.** `:` where `` is a facet attribute (case-sensitive) and `` a facet value. - **Tag filters.** `_tags:` or just `` (case-sensitive). - **Boolean filters.** `: true | false`. You can combine filters with `AND`, `OR`, and `NOT` operators with the following restrictions: - You can only combine filters of the same type with `OR`. **Not supported:** `facet:value OR num > 3`. - You can\'t use `NOT` with combinations of filters. **Not supported:** `NOT(facet:value OR facet:value)` - You can\'t combine conjunctions (`AND`) with `OR`. **Not supported:** `facet:value OR (facet:value AND facet:value)` Use quotes around your filters, if the facet attribute name or facet value has spaces, keywords (`OR`, `AND`, `NOT`), or quotes. If a facet attribute is an array, the filter matches if it matches at least one element of the array. For more information, see [Filters](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/). + */ + filters?: string; + + facetFilters?: FacetFilters; + + optionalFilters?: OptionalFilters; + + numericFilters?: NumericFilters; + + tagFilters?: TagFilters; + + /** + * Whether to sum all filter scores. If true, all filter scores are summed. Otherwise, the maximum filter score is kept. For more information, see [filter scores](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/in-depth/filter-scoring/#accumulating-scores-with-sumorfiltersscores). + */ + sumOrFiltersScores?: boolean; + + /** + * Restricts a search to a subset of your searchable attributes. Attribute names are case-sensitive. + */ + restrictSearchableAttributes?: Array; + + /** + * Facets for which to retrieve facet values that match the search criteria and the number of matching facet values. To retrieve all facets, use the wildcard character `*`. For more information, see [facets](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/#contextual-facet-values-and-counts). + */ + facets?: Array; + + /** + * Whether faceting should be applied after deduplication with `distinct`. This leads to accurate facet counts when using faceting in combination with `distinct`. It\'s usually better to use `afterDistinct` modifiers in the `attributesForFaceting` setting, as `facetingAfterDistinct` only computes correct facet counts if all records have the same facet values for the `attributeForDistinct`. + */ + facetingAfterDistinct?: boolean; + + /** + * Coordinates for the center of a circle, expressed as a comma-separated string of latitude and longitude. Only records included within a circle around this central location are included in the results. The radius of the circle is determined by the `aroundRadius` and `minimumAroundRadius` settings. This parameter is ignored if you also specify `insidePolygon` or `insideBoundingBox`. + */ + aroundLatLng?: string; + + /** + * Whether to obtain the coordinates from the request\'s IP address. + */ + aroundLatLngViaIP?: boolean; + + aroundRadius?: AroundRadius; + + aroundPrecision?: AroundPrecision; + + /** + * Minimum radius (in meters) for a search around a location when `aroundRadius` isn\'t set. + */ + minimumAroundRadius?: number; + + insideBoundingBox?: InsideBoundingBox | null; + + /** + * Coordinates of a polygon in which to search. Polygons are defined by 3 to 10,000 points. Each point is represented by its latitude and longitude. Provide multiple polygons as nested arrays. For more information, see [filtering inside polygons](https://www.algolia.com/doc/guides/managing-results/refine-results/geolocation/#filtering-inside-rectangular-or-polygonal-areas). This parameter is ignored if you also specify `insideBoundingBox`. + */ + insidePolygon?: Array>; + + /** + * ISO language codes that adjust settings that are useful for processing natural language queries (as opposed to keyword searches): - Sets `removeStopWords` and `ignorePlurals` to the list of provided languages. - Sets `removeWordsIfNoResults` to `allOptional`. - Adds a `natural_language` attribute to `ruleContexts` and `analyticsTags`. + */ + naturalLanguages?: Array; + + /** + * Assigns a rule context to the search query. [Rule contexts](https://www.algolia.com/doc/guides/managing-results/rules/rules-overview/how-to/customize-search-results-by-platform/#whats-a-context) are strings that you can use to trigger matching rules. + */ + ruleContexts?: Array; + + /** + * Impact that Personalization should have on this search. The higher this value is, the more Personalization determines the ranking compared to other factors. For more information, see [Understanding Personalization impact](https://www.algolia.com/doc/guides/personalization/personalizing-results/in-depth/configuring-personalization/#understanding-personalization-impact). + */ + personalizationImpact?: number; + + /** + * Unique pseudonymous or anonymous user identifier. This helps with analytics and click and conversion events. For more information, see [user token](https://www.algolia.com/doc/guides/sending-events/concepts/usertoken/). + */ + userToken?: string; + + /** + * Whether the search response should include detailed ranking information. + */ + getRankingInfo?: boolean; + + /** + * Whether to take into account an index\'s synonyms for this search. + */ + synonyms?: boolean; + + /** + * Whether to include a `queryID` attribute in the response. The query ID is a unique identifier for a search query and is required for tracking [click and conversion events](https://www.algolia.com/guides/sending-events/getting-started/). + */ + clickAnalytics?: boolean; + + /** + * Whether this search will be included in Analytics. + */ + analytics?: boolean; + + /** + * Tags to apply to the query for [segmenting analytics data](https://www.algolia.com/doc/guides/search-analytics/guides/segments/). + */ + analyticsTags?: Array; + + /** + * Whether to include this search when calculating processing-time percentiles. + */ + percentileComputation?: boolean; + + /** + * Whether to enable A/B testing for this search. + */ + enableABTest?: boolean; +}; diff --git a/packages/recommend/model/baseSearchResponse.ts b/packages/recommend/model/baseSearchResponse.ts new file mode 100644 index 000000000..066ecc865 --- /dev/null +++ b/packages/recommend/model/baseSearchResponse.ts @@ -0,0 +1,129 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Exhaustive } from './exhaustive'; +import type { FacetStats } from './facetStats'; +import type { Redirect } from './redirect'; +import type { RenderingContent } from './renderingContent'; + +export type BaseSearchResponse = Record & { + /** + * A/B test ID. This is only included in the response for indices that are part of an A/B test. + */ + abTestID?: number; + + /** + * Variant ID. This is only included in the response for indices that are part of an A/B test. + */ + abTestVariantID?: number; + + /** + * Computed geographical location. + */ + aroundLatLng?: string; + + /** + * Distance from a central coordinate provided by `aroundLatLng`. + */ + automaticRadius?: string; + + exhaustive?: Exhaustive; + + /** + * Rules applied to the query. + */ + appliedRules?: Array>; + + /** + * See the `facetsCount` field of the `exhaustive` object in the response. + */ + exhaustiveFacetsCount?: boolean; + + /** + * See the `nbHits` field of the `exhaustive` object in the response. + */ + exhaustiveNbHits?: boolean; + + /** + * See the `typo` field of the `exhaustive` object in the response. + */ + exhaustiveTypo?: boolean; + + /** + * Facet counts. + */ + facets?: { [key: string]: { [key: string]: number } }; + + /** + * Statistics for numerical facets. + */ + facets_stats?: { [key: string]: FacetStats }; + + /** + * Index name used for the query. + */ + index?: string; + + /** + * Index name used for the query. During A/B testing, the targeted index isn\'t always the index used by the query. + */ + indexUsed?: string; + + /** + * Warnings about the query. + */ + message?: string; + + /** + * Number of hits selected and sorted by the relevant sort algorithm. + */ + nbSortedHits?: number; + + /** + * Post-[normalization](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/#what-does-normalization-mean) query string that will be searched. + */ + parsedQuery?: string; + + /** + * Time the server took to process the request, in milliseconds. + */ + processingTimeMS: number; + + /** + * Experimental. List of processing steps and their times, in milliseconds. You can use this list to investigate performance issues. + */ + processingTimingsMS?: Record; + + /** + * Markup text indicating which parts of the original query have been removed to retrieve a non-empty result set. + */ + queryAfterRemoval?: string; + + redirect?: Redirect; + + renderingContent?: RenderingContent; + + /** + * Time the server took to process the request, in milliseconds. + */ + serverTimeMS?: number; + + /** + * Host name of the server that processed the request. + */ + serverUsed?: string; + + /** + * An object with custom data. You can store up to 32kB as custom data. + */ + userData?: any | null; + + /** + * Unique identifier for the query. This is used for [click analytics](https://www.algolia.com/doc/guides/analytics/click-analytics/). + */ + queryID?: string; + + /** + * Whether automatic events collection is enabled for the application. + */ + _automaticInsights?: boolean; +}; diff --git a/packages/recommend/model/booleanString.ts b/packages/recommend/model/booleanString.ts new file mode 100644 index 000000000..4cf1fb196 --- /dev/null +++ b/packages/recommend/model/booleanString.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type BooleanString = 'true' | 'false'; diff --git a/packages/recommend/model/boughtTogetherQuery.ts b/packages/recommend/model/boughtTogetherQuery.ts new file mode 100644 index 000000000..19c909cb9 --- /dev/null +++ b/packages/recommend/model/boughtTogetherQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseRecommendRequest } from './baseRecommendRequest'; +import type { FrequentlyBoughtTogether } from './frequentlyBoughtTogether'; + +export type BoughtTogetherQuery = BaseRecommendRequest & FrequentlyBoughtTogether; diff --git a/packages/recommend/model/clientMethodProps.ts b/packages/recommend/model/clientMethodProps.ts new file mode 100644 index 000000000..b704da108 --- /dev/null +++ b/packages/recommend/model/clientMethodProps.ts @@ -0,0 +1,163 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendModels } from '../model/recommendModels'; +import type { RecommendRule } from '../model/recommendRule'; + +import type { SearchRecommendRulesParams } from '../model/searchRecommendRulesParams'; + +import type { RecommendationsRequest } from './recommendationsRequest'; + +/** + * Properties for the `batchRecommendRules` method. + */ +export type BatchRecommendRulesProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * [Recommend model](https://www.algolia.com/doc/guides/algolia-recommend/overview/#recommend-models). + */ + model: RecommendModels; + recommendRule?: Array; +}; + +/** + * Properties for the `customDelete` method. + */ +export type CustomDeleteProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customGet` method. + */ +export type CustomGetProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; +}; + +/** + * Properties for the `customPost` method. + */ +export type CustomPostProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `customPut` method. + */ +export type CustomPutProps = { + /** + * Path of the endpoint, anything after \"/1\" must be specified. + */ + path: string; + /** + * Query parameters to apply to the current query. + */ + parameters?: { [key: string]: any }; + /** + * Parameters to send with the custom request. + */ + body?: Record; +}; + +/** + * Properties for the `deleteRecommendRule` method. + */ +export type DeleteRecommendRuleProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * [Recommend model](https://www.algolia.com/doc/guides/algolia-recommend/overview/#recommend-models). + */ + model: RecommendModels; + /** + * Unique record identifier. + */ + objectID: string; +}; + +/** + * Properties for the `getRecommendRule` method. + */ +export type GetRecommendRuleProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * [Recommend model](https://www.algolia.com/doc/guides/algolia-recommend/overview/#recommend-models). + */ + model: RecommendModels; + /** + * Unique record identifier. + */ + objectID: string; +}; + +/** + * Properties for the `getRecommendStatus` method. + */ +export type GetRecommendStatusProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * [Recommend model](https://www.algolia.com/doc/guides/algolia-recommend/overview/#recommend-models). + */ + model: RecommendModels; + /** + * Unique task identifier. + */ + taskID: number; +}; + +/** + * Recommend method signature compatible with the `algoliasearch` v4 package. When using this signature, extra computation will be required to make it match the new signature. + * + * @deprecated This signature will be removed from the next major version, we recommend using the `GetRecommendationsParams` type for performances and future proof reasons. + */ +export type LegacyGetRecommendationsParams = RecommendationsRequest[]; + +/** + * Properties for the `searchRecommendRules` method. + */ +export type SearchRecommendRulesProps = { + /** + * Name of the index on which to perform the operation. + */ + indexName: string; + /** + * [Recommend model](https://www.algolia.com/doc/guides/algolia-recommend/overview/#recommend-models). + */ + model: RecommendModels; + searchRecommendRulesParams?: SearchRecommendRulesParams; +}; diff --git a/packages/recommend/model/condition.ts b/packages/recommend/model/condition.ts new file mode 100644 index 000000000..bd010222f --- /dev/null +++ b/packages/recommend/model/condition.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Condition that triggers the rule. If not specified, the rule is triggered for all recommendations. + */ +export type Condition = { + /** + * Filter expression to only include items that match the filter criteria in the response. You can use these filter expressions: - **Numeric filters.** ` `, where `` is one of `<`, `<=`, `=`, `!=`, `>`, `>=`. - **Ranges.** `: TO ` where `` and `` are the lower and upper limits of the range (inclusive). - **Facet filters.** `:` where `` is a facet attribute (case-sensitive) and `` a facet value. - **Tag filters.** `_tags:` or just `` (case-sensitive). - **Boolean filters.** `: true | false`. You can combine filters with `AND`, `OR`, and `NOT` operators with the following restrictions: - You can only combine filters of the same type with `OR`. **Not supported:** `facet:value OR num > 3`. - You can\'t use `NOT` with combinations of filters. **Not supported:** `NOT(facet:value OR facet:value)` - You can\'t combine conjunctions (`AND`) with `OR`. **Not supported:** `facet:value OR (facet:value AND facet:value)` Use quotes around your filters, if the facet attribute name or facet value has spaces, keywords (`OR`, `AND`, `NOT`), or quotes. If a facet attribute is an array, the filter matches if it matches at least one element of the array. For more information, see [Filters](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/). + */ + filters?: string; + + /** + * An additional restriction that only triggers the rule, when the search has the same value as `ruleContexts` parameter. For example, if `context: mobile`, the rule is only triggered when the search request has a matching `ruleContexts: mobile`. A rule context must only contain alphanumeric characters. + */ + context?: string; +}; diff --git a/packages/recommend/model/consequence.ts b/packages/recommend/model/consequence.ts new file mode 100644 index 000000000..789e6f599 --- /dev/null +++ b/packages/recommend/model/consequence.ts @@ -0,0 +1,22 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { HideConsequenceObject } from './hideConsequenceObject'; +import type { ParamsConsequence } from './paramsConsequence'; +import type { PromoteConsequenceObject } from './promoteConsequenceObject'; + +/** + * Effect of the rule. + */ +export type Consequence = { + /** + * Exclude items from recommendations. + */ + hide?: Array; + + /** + * Place items at specific positions in the list of recommendations. + */ + promote?: Array; + + params?: ParamsConsequence; +}; diff --git a/packages/recommend/model/deletedAtResponse.ts b/packages/recommend/model/deletedAtResponse.ts new file mode 100644 index 000000000..37181b061 --- /dev/null +++ b/packages/recommend/model/deletedAtResponse.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Response, taskID, and deletion timestamp. + */ +export type DeletedAtResponse = { + /** + * Unique identifier of a task. A successful API response means that a task was added to a queue. It might not run immediately. You can check the task\'s progress with the [`task` operation](#tag/Indices/operation/getTask) and this `taskID`. + */ + taskID: number; + + /** + * Date and time when the object was deleted, in RFC 3339 format. + */ + deletedAt: string; +}; diff --git a/packages/recommend/model/distinct.ts b/packages/recommend/model/distinct.ts new file mode 100644 index 000000000..dc87dfb00 --- /dev/null +++ b/packages/recommend/model/distinct.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Determines how many records of a group are included in the search results. Records with the same value for the `attributeForDistinct` attribute are considered a group. The `distinct` setting controls how many members of the group are returned. This is useful for [deduplication and grouping](https://www.algolia.com/doc/guides/managing-results/refine-results/grouping/#introducing-algolias-distinct-feature). The `distinct` setting is ignored if `attributeForDistinct` is not set. + */ +export type Distinct = boolean | number; diff --git a/packages/recommend/model/errorBase.ts b/packages/recommend/model/errorBase.ts new file mode 100644 index 000000000..960e509cb --- /dev/null +++ b/packages/recommend/model/errorBase.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Error. + */ +export type ErrorBase = Record & { + message?: string; +}; diff --git a/packages/recommend/model/exactOnSingleWordQuery.ts b/packages/recommend/model/exactOnSingleWordQuery.ts new file mode 100644 index 000000000..d01b358f6 --- /dev/null +++ b/packages/recommend/model/exactOnSingleWordQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Determines how the [Exact ranking criterion](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/adjust-exact-settings/#turn-off-exact-for-some-attributes) is computed when the search query has only one word. - `attribute`. The Exact ranking criterion is 1 if the query word and attribute value are the same. For example, a search for \"road\" will match the value \"road\", but not \"road trip\". - `none`. The Exact ranking criterion is ignored on single-word searches. - `word`. The Exact ranking criterion is 1 if the query word is found in the attribute value. The query word must have at least 3 characters and must not be a stop word. Only exact matches will be highlighted, partial and prefix matches won\'t. + */ +export type ExactOnSingleWordQuery = 'attribute' | 'none' | 'word'; diff --git a/packages/recommend/model/exhaustive.ts b/packages/recommend/model/exhaustive.ts new file mode 100644 index 000000000..6e578adf1 --- /dev/null +++ b/packages/recommend/model/exhaustive.ts @@ -0,0 +1,31 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Whether certain properties of the search response are calculated exhaustive (exact) or approximated. + */ +export type Exhaustive = { + /** + * Whether the facet count is exhaustive (`true`) or approximate (`false`). See the [related discussion](https://support.algolia.com/hc/en-us/articles/4406975248145-Why-are-my-facet-and-hit-counts-not-accurate-). + */ + facetsCount?: boolean; + + /** + * The value is `false` if not all facet values are retrieved. + */ + facetValues?: boolean; + + /** + * Whether the `nbHits` is exhaustive (`true`) or approximate (`false`). When the query takes more than 50ms to be processed, the engine makes an approximation. This can happen when using complex filters on millions of records, when typo-tolerance was not exhaustive, or when enough hits have been retrieved (for example, after the engine finds 10,000 exact matches). `nbHits` is reported as non-exhaustive whenever an approximation is made, even if the approximation didn’t, in the end, impact the exhaustivity of the query. + */ + nbHits?: boolean; + + /** + * Rules matching exhaustivity. The value is `false` if rules were enable for this query, and could not be fully processed due a timeout. This is generally caused by the number of alternatives (such as typos) which is too large. + */ + rulesMatch?: boolean; + + /** + * Whether the typo search was exhaustive (`true`) or approximate (`false`). An approximation is done when the typo search query part takes more than 10% of the query budget (ie. 5ms by default) to be processed (this can happen when a lot of typo alternatives exist for the query). This field will not be included when typo-tolerance is entirely disabled. + */ + typo?: boolean; +}; diff --git a/packages/recommend/model/facetFilters.ts b/packages/recommend/model/facetFilters.ts new file mode 100644 index 000000000..0dc5e336e --- /dev/null +++ b/packages/recommend/model/facetFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter the search by facet values, so that only records with the same facet values are retrieved. **Prefer using the `filters` parameter, which supports all filter types and combinations with boolean operators.** - `[filter1, filter2]` is interpreted as `filter1 AND filter2`. - `[[filter1, filter2], filter3]` is interpreted as `filter1 OR filter2 AND filter3`. - `facet:-value` is interpreted as `NOT facet:value`. While it\'s best to avoid attributes that start with a `-`, you can still filter them by escaping with a backslash: `facet:\\-value`. + */ +export type FacetFilters = Array | string; diff --git a/packages/recommend/model/facetOrdering.ts b/packages/recommend/model/facetOrdering.ts new file mode 100644 index 000000000..ef3e2f406 --- /dev/null +++ b/packages/recommend/model/facetOrdering.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { IndexSettingsFacets } from './indexSettingsFacets'; +import type { Value } from './value'; + +/** + * Order of facet names and facet values in your UI. + */ +export type FacetOrdering = { + facets?: IndexSettingsFacets; + + /** + * Order of facet values. One object for each facet. + */ + values?: { [key: string]: Value }; +}; diff --git a/packages/recommend/model/facetStats.ts b/packages/recommend/model/facetStats.ts new file mode 100644 index 000000000..f8bb276a8 --- /dev/null +++ b/packages/recommend/model/facetStats.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type FacetStats = { + /** + * Minimum value in the results. + */ + min?: number; + + /** + * Maximum value in the results. + */ + max?: number; + + /** + * Average facet value in the results. + */ + avg?: number; + + /** + * Sum of all values in the results. + */ + sum?: number; +}; diff --git a/packages/recommend/model/fallbackParams.ts b/packages/recommend/model/fallbackParams.ts new file mode 100644 index 000000000..c7fdc6515 --- /dev/null +++ b/packages/recommend/model/fallbackParams.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendSearchParams } from './recommendSearchParams'; + +export type FallbackParams = RecommendSearchParams & Record; diff --git a/packages/recommend/model/fbtModel.ts b/packages/recommend/model/fbtModel.ts new file mode 100644 index 000000000..29ee3206e --- /dev/null +++ b/packages/recommend/model/fbtModel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Frequently bought together model. This model recommends items that have been purchased within 1 day with the item with the ID `objectID`. + */ +export type FbtModel = 'bought-together'; diff --git a/packages/recommend/model/frequentlyBoughtTogether.ts b/packages/recommend/model/frequentlyBoughtTogether.ts new file mode 100644 index 000000000..324ffe151 --- /dev/null +++ b/packages/recommend/model/frequentlyBoughtTogether.ts @@ -0,0 +1,12 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FbtModel } from './fbtModel'; + +export type FrequentlyBoughtTogether = { + model: FbtModel; + + /** + * Unique record identifier. + */ + objectID: string; +}; diff --git a/packages/recommend/model/getRecommendTaskResponse.ts b/packages/recommend/model/getRecommendTaskResponse.ts new file mode 100644 index 000000000..c45eb80b3 --- /dev/null +++ b/packages/recommend/model/getRecommendTaskResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TaskStatus } from './taskStatus'; + +export type GetRecommendTaskResponse = { + status: TaskStatus; +}; diff --git a/packages/recommend/model/getRecommendationsParams.ts b/packages/recommend/model/getRecommendationsParams.ts new file mode 100644 index 000000000..55b34d5bc --- /dev/null +++ b/packages/recommend/model/getRecommendationsParams.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendationsRequest } from './recommendationsRequest'; + +/** + * Recommend request body. + */ +export type GetRecommendationsParams = { + /** + * Recommendation request with parameters depending on the requested model. + */ + requests: Array; +}; diff --git a/packages/recommend/model/getRecommendationsResponse.ts b/packages/recommend/model/getRecommendationsResponse.ts new file mode 100644 index 000000000..a25c511f4 --- /dev/null +++ b/packages/recommend/model/getRecommendationsResponse.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendationsResults } from './recommendationsResults'; + +export type GetRecommendationsResponse = { + results: Array; +}; diff --git a/packages/recommend/model/hideConsequenceObject.ts b/packages/recommend/model/hideConsequenceObject.ts new file mode 100644 index 000000000..22ea35a7e --- /dev/null +++ b/packages/recommend/model/hideConsequenceObject.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Object ID of the recommendation you want to exclude. + */ +export type HideConsequenceObject = { + /** + * Unique record identifier. + */ + objectID?: string; +}; diff --git a/packages/recommend/model/highlightResult.ts b/packages/recommend/model/highlightResult.ts new file mode 100644 index 000000000..102271a17 --- /dev/null +++ b/packages/recommend/model/highlightResult.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { HighlightResultOption } from './highlightResultOption'; + +export type HighlightResult = HighlightResultOption | { [key: string]: HighlightResult } | Array; diff --git a/packages/recommend/model/highlightResultOption.ts b/packages/recommend/model/highlightResultOption.ts new file mode 100644 index 000000000..47ab0b748 --- /dev/null +++ b/packages/recommend/model/highlightResultOption.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchLevel } from './matchLevel'; + +/** + * Surround words that match the query with HTML tags for highlighting. + */ +export type HighlightResultOption = { + /** + * Highlighted attribute value, including HTML tags. + */ + value: string; + + matchLevel: MatchLevel; + + /** + * List of matched words from the search query. + */ + matchedWords: Array; + + /** + * Whether the entire attribute value is highlighted. + */ + fullyHighlighted?: boolean; +}; diff --git a/packages/recommend/model/ignorePlurals.ts b/packages/recommend/model/ignorePlurals.ts new file mode 100644 index 000000000..5e4ac00cb --- /dev/null +++ b/packages/recommend/model/ignorePlurals.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BooleanString } from './booleanString'; +import type { SupportedLanguage } from './supportedLanguage'; + +/** + * Treat singular, plurals, and other forms of declensions as equivalent. You should only use this feature for the languages used in your index. + */ +export type IgnorePlurals = Array | BooleanString | boolean; diff --git a/packages/recommend/model/index.ts b/packages/recommend/model/index.ts new file mode 100644 index 000000000..5cb6abe07 --- /dev/null +++ b/packages/recommend/model/index.ts @@ -0,0 +1,100 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export * from './advancedSyntaxFeatures'; +export * from './alternativesAsExact'; +export * from './aroundPrecision'; +export * from './aroundRadius'; +export * from './aroundRadiusAll'; +export * from './autoFacetFilter'; +export * from './banner'; +export * from './bannerImage'; +export * from './bannerImageUrl'; +export * from './bannerLink'; +export * from './baseIndexSettings'; +export * from './baseRecommendIndexSettings'; +export * from './baseRecommendRequest'; +export * from './baseRecommendSearchParams'; +export * from './baseSearchResponse'; +export * from './booleanString'; +export * from './boughtTogetherQuery'; +export * from './clientMethodProps'; +export * from './condition'; +export * from './consequence'; +export * from './deletedAtResponse'; +export * from './distinct'; +export * from './errorBase'; +export * from './exactOnSingleWordQuery'; +export * from './exhaustive'; +export * from './facetFilters'; +export * from './facetOrdering'; +export * from './facetStats'; +export * from './fallbackParams'; +export * from './fbtModel'; +export * from './frequentlyBoughtTogether'; +export * from './getRecommendationsParams'; +export * from './getRecommendationsResponse'; +export * from './getRecommendTaskResponse'; +export * from './hideConsequenceObject'; +export * from './highlightResult'; +export * from './highlightResultOption'; +export * from './ignorePlurals'; +export * from './indexSettingsFacets'; +export * from './insideBoundingBox'; +export * from './lookingSimilar'; +export * from './lookingSimilarModel'; +export * from './lookingSimilarQuery'; +export * from './matchedGeoLocation'; +export * from './matchLevel'; +export * from './numericFilters'; +export * from './optionalFilters'; +export * from './optionalWords'; +export * from './paramsConsequence'; +export * from './personalization'; +export * from './promoteConsequenceObject'; +export * from './queryType'; +export * from './range'; +export * from './rankingInfo'; +export * from './recommendationsHit'; +export * from './recommendationsHits'; +export * from './recommendationsRequest'; +export * from './recommendationsResults'; +export * from './recommendHit'; +export * from './recommendIndexSettings'; +export * from './recommendModels'; +export * from './recommendRule'; +export * from './recommendSearchParams'; +export * from './recommendUpdatedAtResponse'; +export * from './redirect'; +export * from './redirectRuleIndexData'; +export * from './redirectRuleIndexMetadata'; +export * from './redirectURL'; +export * from './relatedModel'; +export * from './relatedProducts'; +export * from './relatedQuery'; +export * from './removeStopWords'; +export * from './removeWordsIfNoResults'; +export * from './renderingContent'; +export * from './reRankingApplyFilter'; +export * from './ruleMetadata'; +export * from './searchPagination'; +export * from './searchParamsQuery'; +export * from './searchRecommendRulesParams'; +export * from './searchRecommendRulesResponse'; +export * from './snippetResult'; +export * from './snippetResultOption'; +export * from './sortRemainingBy'; +export * from './supportedLanguage'; +export * from './tagFilters'; +export * from './taskStatus'; +export * from './timeRange'; +export * from './trendingFacetHit'; +export * from './trendingFacets'; +export * from './trendingFacetsModel'; +export * from './trendingFacetsQuery'; +export * from './trendingItems'; +export * from './trendingItemsModel'; +export * from './trendingItemsQuery'; +export * from './typoTolerance'; +export * from './typoToleranceEnum'; +export * from './value'; +export * from './widgets'; diff --git a/packages/recommend/model/indexSettingsFacets.ts b/packages/recommend/model/indexSettingsFacets.ts new file mode 100644 index 000000000..d71333771 --- /dev/null +++ b/packages/recommend/model/indexSettingsFacets.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Order of facet names. + */ +export type IndexSettingsFacets = { + /** + * Explicit order of facets or facet values. This setting lets you always show specific facets or facet values at the top of the list. + */ + order?: Array; +}; diff --git a/packages/recommend/model/insideBoundingBox.ts b/packages/recommend/model/insideBoundingBox.ts new file mode 100644 index 000000000..8a498532f --- /dev/null +++ b/packages/recommend/model/insideBoundingBox.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type InsideBoundingBox = string | Array>; diff --git a/packages/recommend/model/lookingSimilar.ts b/packages/recommend/model/lookingSimilar.ts new file mode 100644 index 000000000..9d59dd83d --- /dev/null +++ b/packages/recommend/model/lookingSimilar.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FallbackParams } from './fallbackParams'; +import type { LookingSimilarModel } from './lookingSimilarModel'; + +export type LookingSimilar = { + model: LookingSimilarModel; + + /** + * Unique record identifier. + */ + objectID: string; + + fallbackParameters?: FallbackParams; +}; diff --git a/packages/recommend/model/lookingSimilarModel.ts b/packages/recommend/model/lookingSimilarModel.ts new file mode 100644 index 000000000..8b2d4a769 --- /dev/null +++ b/packages/recommend/model/lookingSimilarModel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Looking similar model. This model recommends items that look similar to the item with the ID `objectID` based on image attributes in your index. + */ +export type LookingSimilarModel = 'looking-similar'; diff --git a/packages/recommend/model/lookingSimilarQuery.ts b/packages/recommend/model/lookingSimilarQuery.ts new file mode 100644 index 000000000..dc94e36a3 --- /dev/null +++ b/packages/recommend/model/lookingSimilarQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseRecommendRequest } from './baseRecommendRequest'; +import type { LookingSimilar } from './lookingSimilar'; + +export type LookingSimilarQuery = BaseRecommendRequest & LookingSimilar; diff --git a/packages/recommend/model/matchLevel.ts b/packages/recommend/model/matchLevel.ts new file mode 100644 index 000000000..2cb9f4d21 --- /dev/null +++ b/packages/recommend/model/matchLevel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Whether the whole query string matches or only a part. + */ +export type MatchLevel = 'none' | 'partial' | 'full'; diff --git a/packages/recommend/model/matchedGeoLocation.ts b/packages/recommend/model/matchedGeoLocation.ts new file mode 100644 index 000000000..018634191 --- /dev/null +++ b/packages/recommend/model/matchedGeoLocation.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type MatchedGeoLocation = { + /** + * Latitude of the matched location. + */ + lat?: number; + + /** + * Longitude of the matched location. + */ + lng?: number; + + /** + * Distance between the matched location and the search location (in meters). + */ + distance?: number; +}; diff --git a/packages/recommend/model/numericFilters.ts b/packages/recommend/model/numericFilters.ts new file mode 100644 index 000000000..6129dc5d3 --- /dev/null +++ b/packages/recommend/model/numericFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter by numeric facets. **Prefer using the `filters` parameter, which supports all filter types and combinations with boolean operators.** You can use numeric comparison operators: `<`, `<=`, `=`, `!=`, `>`, `>=`. Comparisons are precise up to 3 decimals. You can also provide ranges: `facet: TO `. The range includes the lower and upper boundaries. The same combination rules apply as for `facetFilters`. + */ +export type NumericFilters = Array | string; diff --git a/packages/recommend/model/optionalFilters.ts b/packages/recommend/model/optionalFilters.ts new file mode 100644 index 000000000..677b9239c --- /dev/null +++ b/packages/recommend/model/optionalFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filters to promote or demote records in the search results. Optional filters work like facet filters, but they don\'t exclude records from the search results. Records that match the optional filter rank before records that don\'t match. If you\'re using a negative filter `facet:-value`, matching records rank after records that don\'t match. - Optional filters don\'t work on virtual replicas. - Optional filters are applied _after_ sort-by attributes. - Optional filters are applied _before_ custom ranking attributes (in the default [ranking](https://www.algolia.com/doc/guides/managing-results/relevance-overview/in-depth/ranking-criteria/)). - Optional filters don\'t work with numeric attributes. + */ +export type OptionalFilters = Array | string; diff --git a/packages/recommend/model/optionalWords.ts b/packages/recommend/model/optionalWords.ts new file mode 100644 index 000000000..2eed87ef2 --- /dev/null +++ b/packages/recommend/model/optionalWords.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Words that should be considered optional when found in the query. By default, records must match all words in the search query to be included in the search results. Adding optional words can help to increase the number of search results by running an additional search query that doesn\'t include the optional words. For example, if the search query is \"action video\" and \"video\" is an optional word, the search engine runs two queries. One for \"action video\" and one for \"action\". Records that match all words are ranked higher. For a search query with 4 or more words **and** all its words are optional, the number of matched words required for a record to be included in the search results increases for every 1,000 records: - If `optionalWords` has less than 10 words, the required number of matched words increases by 1: results 1 to 1,000 require 1 matched word, results 1,001 to 2000 need 2 matched words. - If `optionalWords` has 10 or more words, the number of required matched words increases by the number of optional words divided by 5 (rounded down). For example, with 18 optional words: results 1 to 1,000 require 1 matched word, results 1,001 to 2000 need 4 matched words. For more information, see [Optional words](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/empty-or-insufficient-results/#creating-a-list-of-optional-words). + */ +export type OptionalWords = string | Array; diff --git a/packages/recommend/model/paramsConsequence.ts b/packages/recommend/model/paramsConsequence.ts new file mode 100644 index 000000000..fa1bf54d7 --- /dev/null +++ b/packages/recommend/model/paramsConsequence.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { AutoFacetFilter } from './autoFacetFilter'; + +/** + * Filter or boost recommendations matching a facet filter. + */ +export type ParamsConsequence = { + /** + * Filter recommendations that match or don\'t match the same `facet:facet_value` combination as the viewed item. + */ + automaticFacetFilters?: Array; + + /** + * Filter expression to only include items that match the filter criteria in the response. You can use these filter expressions: - **Numeric filters.** ` `, where `` is one of `<`, `<=`, `=`, `!=`, `>`, `>=`. - **Ranges.** `: TO ` where `` and `` are the lower and upper limits of the range (inclusive). - **Facet filters.** `:` where `` is a facet attribute (case-sensitive) and `` a facet value. - **Tag filters.** `_tags:` or just `` (case-sensitive). - **Boolean filters.** `: true | false`. You can combine filters with `AND`, `OR`, and `NOT` operators with the following restrictions: - You can only combine filters of the same type with `OR`. **Not supported:** `facet:value OR num > 3`. - You can\'t use `NOT` with combinations of filters. **Not supported:** `NOT(facet:value OR facet:value)` - You can\'t combine conjunctions (`AND`) with `OR`. **Not supported:** `facet:value OR (facet:value AND facet:value)` Use quotes around your filters, if the facet attribute name or facet value has spaces, keywords (`OR`, `AND`, `NOT`), or quotes. If a facet attribute is an array, the filter matches if it matches at least one element of the array. For more information, see [Filters](https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/). + */ + filters?: string; + + /** + * Filters to promote or demote records in the search results. Optional filters work like facet filters, but they don\'t exclude records from the search results. Records that match the optional filter rank before records that don\'t match. Matches with higher weights (``) rank before matches with lower weights. If you\'re using a negative filter `facet:-value`, matching records rank after records that don\'t match. + */ + optionalFilters?: Array; +}; diff --git a/packages/recommend/model/personalization.ts b/packages/recommend/model/personalization.ts new file mode 100644 index 000000000..c8efd58b1 --- /dev/null +++ b/packages/recommend/model/personalization.ts @@ -0,0 +1,18 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type Personalization = { + /** + * The score of the filters. + */ + filtersScore?: number; + + /** + * The score of the ranking. + */ + rankingScore?: number; + + /** + * The score of the event. + */ + score?: number; +}; diff --git a/packages/recommend/model/promoteConsequenceObject.ts b/packages/recommend/model/promoteConsequenceObject.ts new file mode 100644 index 000000000..c2e57ae81 --- /dev/null +++ b/packages/recommend/model/promoteConsequenceObject.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Object ID and position of the recommendation you want to pin. + */ +export type PromoteConsequenceObject = { + /** + * Unique record identifier. + */ + objectID?: string; + + /** + * Index in the list of recommendations where to place this item. + */ + position?: number; +}; diff --git a/packages/recommend/model/queryType.ts b/packages/recommend/model/queryType.ts new file mode 100644 index 000000000..b16a40de3 --- /dev/null +++ b/packages/recommend/model/queryType.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Determines if and how query words are interpreted as prefixes. By default, only the last query word is treated as a prefix (`prefixLast`). To turn off prefix search, use `prefixNone`. Avoid `prefixAll`, which treats all query words as prefixes. This might lead to counterintuitive results and makes your search slower. For more information, see [Prefix searching](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/override-search-engine-defaults/in-depth/prefix-searching/). + */ +export type QueryType = 'prefixLast' | 'prefixAll' | 'prefixNone'; diff --git a/packages/recommend/model/range.ts b/packages/recommend/model/range.ts new file mode 100644 index 000000000..780b75be7 --- /dev/null +++ b/packages/recommend/model/range.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Range object with lower and upper values in meters to define custom ranges. + */ +export type Range = { + /** + * Lower boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. + */ + from?: number; + + /** + * Upper boundary of a range in meters. The Geo ranking criterion considers all records within the range to be equal. + */ + value?: number; +}; diff --git a/packages/recommend/model/rankingInfo.ts b/packages/recommend/model/rankingInfo.ts new file mode 100644 index 000000000..50c5a3058 --- /dev/null +++ b/packages/recommend/model/rankingInfo.ts @@ -0,0 +1,68 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchedGeoLocation } from './matchedGeoLocation'; +import type { Personalization } from './personalization'; + +/** + * Object with detailed information about the record\'s ranking. + */ +export type RankingInfo = { + /** + * Whether a filter matched the query. + */ + filters?: number; + + /** + * Position of the first matched word in the best matching attribute of the record. + */ + firstMatchedWord: number; + + /** + * Distance between the geo location in the search query and the best matching geo location in the record, divided by the geo precision (in meters). + */ + geoDistance: number; + + /** + * Precision used when computing the geo distance, in meters. + */ + geoPrecision?: number; + + matchedGeoLocation?: MatchedGeoLocation; + + personalization?: Personalization; + + /** + * Number of exactly matched words. + */ + nbExactWords: number; + + /** + * Number of typos encountered when matching the record. + */ + nbTypos: number; + + /** + * Whether the record was promoted by a rule. + */ + promoted?: boolean; + + /** + * Number of words between multiple matches in the query plus 1. For single word queries, `proximityDistance` is 0. + */ + proximityDistance?: number; + + /** + * Overall ranking of the record, expressed as a single integer. This attribute is internal. + */ + userScore: number; + + /** + * Number of matched words. + */ + words?: number; + + /** + * Whether the record is re-ranked. + */ + promotedByReRanking?: boolean; +}; diff --git a/packages/recommend/model/reRankingApplyFilter.ts b/packages/recommend/model/reRankingApplyFilter.ts new file mode 100644 index 000000000..6d4bd8b9f --- /dev/null +++ b/packages/recommend/model/reRankingApplyFilter.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Restrict [Dynamic Re-Ranking](https://www.algolia.com/doc/guides/algolia-ai/re-ranking/) to records that match these filters. + */ +export type ReRankingApplyFilter = Array | string; diff --git a/packages/recommend/model/recommendHit.ts b/packages/recommend/model/recommendHit.ts new file mode 100644 index 000000000..ef363ef91 --- /dev/null +++ b/packages/recommend/model/recommendHit.ts @@ -0,0 +1,34 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { HighlightResult } from './highlightResult'; +import type { RankingInfo } from './rankingInfo'; +import type { SnippetResult } from './snippetResult'; + +/** + * Recommend hit. + */ +export type RecommendHit = Record & { + /** + * Unique record identifier. + */ + objectID: string; + + /** + * Surround words that match the query with HTML tags for highlighting. + */ + _highlightResult?: { [key: string]: HighlightResult }; + + /** + * Snippets that show the context around a matching search query. + */ + _snippetResult?: { [key: string]: SnippetResult }; + + _rankingInfo?: RankingInfo; + + _distinctSeqID?: number; + + /** + * Recommendation score. + */ + _score?: number; +}; diff --git a/packages/recommend/model/recommendIndexSettings.ts b/packages/recommend/model/recommendIndexSettings.ts new file mode 100644 index 000000000..197c5e592 --- /dev/null +++ b/packages/recommend/model/recommendIndexSettings.ts @@ -0,0 +1,9 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseIndexSettings } from './baseIndexSettings'; +import type { BaseRecommendIndexSettings } from './baseRecommendIndexSettings'; + +/** + * Index settings. + */ +export type RecommendIndexSettings = BaseIndexSettings & BaseRecommendIndexSettings; diff --git a/packages/recommend/model/recommendModels.ts b/packages/recommend/model/recommendModels.ts new file mode 100644 index 000000000..17f488596 --- /dev/null +++ b/packages/recommend/model/recommendModels.ts @@ -0,0 +1,3 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type RecommendModels = 'related-products' | 'bought-together' | 'trending-facets' | 'trending-items'; diff --git a/packages/recommend/model/recommendRule.ts b/packages/recommend/model/recommendRule.ts new file mode 100644 index 000000000..de29130c6 --- /dev/null +++ b/packages/recommend/model/recommendRule.ts @@ -0,0 +1,37 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Condition } from './condition'; +import type { Consequence } from './consequence'; +import type { RuleMetadata } from './ruleMetadata'; +import type { TimeRange } from './timeRange'; + +/** + * Recommend rule. + */ +export type RecommendRule = { + _metadata?: RuleMetadata; + + /** + * Unique identifier of a rule object. + */ + objectID?: string; + + condition?: Condition; + + consequence?: Consequence; + + /** + * Description of the rule\'s purpose. This can be helpful for display in the Algolia dashboard. + */ + description?: string; + + /** + * Indicates whether to enable the rule. If it isn\'t enabled, it isn\'t applied at query time. + */ + enabled?: boolean; + + /** + * Time periods when the rule is active. + */ + validity?: Array; +}; diff --git a/packages/recommend/model/recommendSearchParams.ts b/packages/recommend/model/recommendSearchParams.ts new file mode 100644 index 000000000..0a35657fe --- /dev/null +++ b/packages/recommend/model/recommendSearchParams.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseRecommendSearchParams } from './baseRecommendSearchParams'; +import type { RecommendIndexSettings } from './recommendIndexSettings'; +import type { SearchParamsQuery } from './searchParamsQuery'; + +/** + * Search parameters for filtering the recommendations. + */ +export type RecommendSearchParams = BaseRecommendSearchParams & SearchParamsQuery & RecommendIndexSettings; diff --git a/packages/recommend/model/recommendUpdatedAtResponse.ts b/packages/recommend/model/recommendUpdatedAtResponse.ts new file mode 100644 index 000000000..5e4db9ee8 --- /dev/null +++ b/packages/recommend/model/recommendUpdatedAtResponse.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Response, taskID, and update timestamp. + */ +export type RecommendUpdatedAtResponse = { + /** + * Unique identifier of a task. A successful API response means that a task was added to a queue. It might not run immediately. You can check the task\'s progress with the [`task` operation](#tag/Indices/operation/getTask) and this `taskID`. + */ + taskID: number; + + /** + * Date and time when the object was updated, in RFC 3339 format. + */ + updatedAt: string; +}; diff --git a/packages/recommend/model/recommendationsHit.ts b/packages/recommend/model/recommendationsHit.ts new file mode 100644 index 000000000..3d1a86793 --- /dev/null +++ b/packages/recommend/model/recommendationsHit.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendHit } from './recommendHit'; + +import type { TrendingFacetHit } from './trendingFacetHit'; + +export type RecommendationsHit = RecommendHit | TrendingFacetHit; diff --git a/packages/recommend/model/recommendationsHits.ts b/packages/recommend/model/recommendationsHits.ts new file mode 100644 index 000000000..832b0acc6 --- /dev/null +++ b/packages/recommend/model/recommendationsHits.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendationsHit } from './recommendationsHit'; + +export type RecommendationsHits = { + hits: Array; +}; diff --git a/packages/recommend/model/recommendationsRequest.ts b/packages/recommend/model/recommendationsRequest.ts new file mode 100644 index 000000000..4600576aa --- /dev/null +++ b/packages/recommend/model/recommendationsRequest.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BoughtTogetherQuery } from './boughtTogetherQuery'; + +import type { LookingSimilarQuery } from './lookingSimilarQuery'; + +import type { RelatedQuery } from './relatedQuery'; +import type { TrendingFacetsQuery } from './trendingFacetsQuery'; +import type { TrendingItemsQuery } from './trendingItemsQuery'; + +export type RecommendationsRequest = + | BoughtTogetherQuery + | RelatedQuery + | TrendingItemsQuery + | TrendingFacetsQuery + | LookingSimilarQuery; diff --git a/packages/recommend/model/recommendationsResults.ts b/packages/recommend/model/recommendationsResults.ts new file mode 100644 index 000000000..c9145a4b8 --- /dev/null +++ b/packages/recommend/model/recommendationsResults.ts @@ -0,0 +1,7 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseSearchResponse } from './baseSearchResponse'; +import type { RecommendationsHits } from './recommendationsHits'; +import type { SearchPagination } from './searchPagination'; + +export type RecommendationsResults = BaseSearchResponse & SearchPagination & RecommendationsHits; diff --git a/packages/recommend/model/redirect.ts b/packages/recommend/model/redirect.ts new file mode 100644 index 000000000..fa3ea30ff --- /dev/null +++ b/packages/recommend/model/redirect.ts @@ -0,0 +1,10 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RedirectRuleIndexMetadata } from './redirectRuleIndexMetadata'; + +/** + * [Redirect results to a URL](https://www.algolia.com/doc/guides/managing-results/rules/merchandising-and-promoting/how-to/redirects/), this this parameter is for internal use only. + */ +export type Redirect = { + index?: Array; +}; diff --git a/packages/recommend/model/redirectRuleIndexData.ts b/packages/recommend/model/redirectRuleIndexData.ts new file mode 100644 index 000000000..fbb7ea140 --- /dev/null +++ b/packages/recommend/model/redirectRuleIndexData.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Redirect rule data. + */ +export type RedirectRuleIndexData = { + ruleObjectID: string; +}; diff --git a/packages/recommend/model/redirectRuleIndexMetadata.ts b/packages/recommend/model/redirectRuleIndexMetadata.ts new file mode 100644 index 000000000..33802fc69 --- /dev/null +++ b/packages/recommend/model/redirectRuleIndexMetadata.ts @@ -0,0 +1,27 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RedirectRuleIndexData } from './redirectRuleIndexData'; + +export type RedirectRuleIndexMetadata = { + /** + * Source index for the redirect rule. + */ + source: string; + + /** + * Destination index for the redirect rule. + */ + dest: string; + + /** + * Reason for the redirect rule. + */ + reason: string; + + /** + * Redirect rule status. + */ + succeed: boolean; + + data: RedirectRuleIndexData; +}; diff --git a/packages/recommend/model/redirectURL.ts b/packages/recommend/model/redirectURL.ts new file mode 100644 index 000000000..8f66f7ee2 --- /dev/null +++ b/packages/recommend/model/redirectURL.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * The redirect rule container. + */ +export type RedirectURL = { + url?: string; +}; diff --git a/packages/recommend/model/relatedModel.ts b/packages/recommend/model/relatedModel.ts new file mode 100644 index 000000000..97761da60 --- /dev/null +++ b/packages/recommend/model/relatedModel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Related products or similar content model. This model recommends items that are similar to the item with the ID `objectID`. Similarity is determined from the user interactions and attributes. + */ +export type RelatedModel = 'related-products'; diff --git a/packages/recommend/model/relatedProducts.ts b/packages/recommend/model/relatedProducts.ts new file mode 100644 index 000000000..f218e9558 --- /dev/null +++ b/packages/recommend/model/relatedProducts.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FallbackParams } from './fallbackParams'; +import type { RelatedModel } from './relatedModel'; + +export type RelatedProducts = { + model: RelatedModel; + + /** + * Unique record identifier. + */ + objectID: string; + + fallbackParameters?: FallbackParams; +}; diff --git a/packages/recommend/model/relatedQuery.ts b/packages/recommend/model/relatedQuery.ts new file mode 100644 index 000000000..4a8672a2d --- /dev/null +++ b/packages/recommend/model/relatedQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseRecommendRequest } from './baseRecommendRequest'; +import type { RelatedProducts } from './relatedProducts'; + +export type RelatedQuery = BaseRecommendRequest & RelatedProducts; diff --git a/packages/recommend/model/removeStopWords.ts b/packages/recommend/model/removeStopWords.ts new file mode 100644 index 000000000..263ad1184 --- /dev/null +++ b/packages/recommend/model/removeStopWords.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SupportedLanguage } from './supportedLanguage'; + +/** + * Removes stop words from the search query. Stop words are common words like articles, conjunctions, prepositions, or pronouns that have little or no meaning on their own. In English, \"the\", \"a\", or \"and\" are stop words. You should only use this feature for the languages used in your index. + */ +export type RemoveStopWords = Array | boolean; diff --git a/packages/recommend/model/removeWordsIfNoResults.ts b/packages/recommend/model/removeWordsIfNoResults.ts new file mode 100644 index 000000000..3b61da6d8 --- /dev/null +++ b/packages/recommend/model/removeWordsIfNoResults.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Strategy for removing words from the query when it doesn\'t return any results. This helps to avoid returning empty search results. - `none`. No words are removed when a query doesn\'t return results. - `lastWords`. Treat the last (then second to last, then third to last) word as optional, until there are results or at most 5 words have been removed. - `firstWords`. Treat the first (then second, then third) word as optional, until there are results or at most 5 words have been removed. - `allOptional`. Treat all words as optional. For more information, see [Remove words to improve results](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/empty-or-insufficient-results/in-depth/why-use-remove-words-if-no-results/). + */ +export type RemoveWordsIfNoResults = 'none' | 'lastWords' | 'firstWords' | 'allOptional'; diff --git a/packages/recommend/model/renderingContent.ts b/packages/recommend/model/renderingContent.ts new file mode 100644 index 000000000..ddb01bde8 --- /dev/null +++ b/packages/recommend/model/renderingContent.ts @@ -0,0 +1,16 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FacetOrdering } from './facetOrdering'; +import type { RedirectURL } from './redirectURL'; +import type { Widgets } from './widgets'; + +/** + * Extra data that can be used in the search UI. You can use this to control aspects of your search UI, such as the order of facet names and values without changing your frontend code. + */ +export type RenderingContent = { + facetOrdering?: FacetOrdering; + + redirect?: RedirectURL; + + widgets?: Widgets; +}; diff --git a/packages/recommend/model/ruleMetadata.ts b/packages/recommend/model/ruleMetadata.ts new file mode 100644 index 000000000..89f28a7eb --- /dev/null +++ b/packages/recommend/model/ruleMetadata.ts @@ -0,0 +1,11 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Rule metadata. + */ +export type RuleMetadata = { + /** + * Date and time when the object was updated, in RFC 3339 format. + */ + lastUpdate?: string; +}; diff --git a/packages/recommend/model/searchPagination.ts b/packages/recommend/model/searchPagination.ts new file mode 100644 index 000000000..284961b8f --- /dev/null +++ b/packages/recommend/model/searchPagination.ts @@ -0,0 +1,23 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SearchPagination = { + /** + * Page of search results to retrieve. + */ + page?: number; + + /** + * Number of results (hits). + */ + nbHits?: number; + + /** + * Number of pages of results. + */ + nbPages?: number; + + /** + * Number of hits per page. + */ + hitsPerPage?: number; +}; diff --git a/packages/recommend/model/searchParamsQuery.ts b/packages/recommend/model/searchParamsQuery.ts new file mode 100644 index 000000000..9f1926f6c --- /dev/null +++ b/packages/recommend/model/searchParamsQuery.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type SearchParamsQuery = { + /** + * Search query. + */ + query?: string; +}; diff --git a/packages/recommend/model/searchRecommendRulesParams.ts b/packages/recommend/model/searchRecommendRulesParams.ts new file mode 100644 index 000000000..cee2044ae --- /dev/null +++ b/packages/recommend/model/searchRecommendRulesParams.ts @@ -0,0 +1,46 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Recommend rules parameters. + */ +export type SearchRecommendRulesParams = { + /** + * Search query. + */ + query?: string; + + /** + * Only search for rules with matching context. + */ + context?: string; + + /** + * Requested page of the API response. Algolia uses `page` and `hitsPerPage` to control how search results are displayed ([paginated](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/pagination/js/)). - `hitsPerPage`: sets the number of search results (_hits_) displayed per page. - `page`: specifies the page number of the search results you want to retrieve. Page numbering starts at 0, so the first page is `page=0`, the second is `page=1`, and so on. For example, to display 10 results per page starting from the third page, set `hitsPerPage` to 10 and `page` to 2. + */ + page?: number; + + /** + * Maximum number of hits per page. Algolia uses `page` and `hitsPerPage` to control how search results are displayed ([paginated](https://www.algolia.com/doc/guides/building-search-ui/ui-and-ux-patterns/pagination/js/)). - `hitsPerPage`: sets the number of search results (_hits_) displayed per page. - `page`: specifies the page number of the search results you want to retrieve. Page numbering starts at 0, so the first page is `page=0`, the second is `page=1`, and so on. For example, to display 10 results per page starting from the third page, set `hitsPerPage` to 10 and `page` to 2. + */ + hitsPerPage?: number; + + /** + * Whether to only show rules where the value of their `enabled` property matches this parameter. If absent, show all rules, regardless of their `enabled` property. + */ + enabled?: boolean; + + /** + * Filter expression. This only searches for rules matching the filter expression. + */ + filters?: string; + + /** + * Include facets and facet values in the response. Use `[\'*\']` to include all facets. + */ + facets?: Array; + + /** + * Maximum number of values to return for each facet. + */ + maxValuesPerFacet?: number; +}; diff --git a/packages/recommend/model/searchRecommendRulesResponse.ts b/packages/recommend/model/searchRecommendRulesResponse.ts new file mode 100644 index 000000000..b6edf243e --- /dev/null +++ b/packages/recommend/model/searchRecommendRulesResponse.ts @@ -0,0 +1,25 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { RecommendRule } from './recommendRule'; + +export type SearchRecommendRulesResponse = { + /** + * Recommend rules that match the search criteria. + */ + hits: Array; + + /** + * Number of results (hits). + */ + nbHits: number; + + /** + * Page of search results to retrieve. + */ + page: number; + + /** + * Number of pages of results. + */ + nbPages: number; +}; diff --git a/packages/recommend/model/snippetResult.ts b/packages/recommend/model/snippetResult.ts new file mode 100644 index 000000000..0d9abff48 --- /dev/null +++ b/packages/recommend/model/snippetResult.ts @@ -0,0 +1,5 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SnippetResultOption } from './snippetResultOption'; + +export type SnippetResult = SnippetResultOption | { [key: string]: SnippetResult } | Array; diff --git a/packages/recommend/model/snippetResultOption.ts b/packages/recommend/model/snippetResultOption.ts new file mode 100644 index 000000000..daab65f2d --- /dev/null +++ b/packages/recommend/model/snippetResultOption.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { MatchLevel } from './matchLevel'; + +/** + * Snippets that show the context around a matching search query. + */ +export type SnippetResultOption = { + /** + * Highlighted attribute value, including HTML tags. + */ + value: string; + + matchLevel: MatchLevel; +}; diff --git a/packages/recommend/model/sortRemainingBy.ts b/packages/recommend/model/sortRemainingBy.ts new file mode 100644 index 000000000..85fc5bd88 --- /dev/null +++ b/packages/recommend/model/sortRemainingBy.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Order of facet values that aren\'t explicitly positioned with the `order` setting. - `count`. Order remaining facet values by decreasing count. The count is the number of matching records containing this facet value. - `alpha`. Sort facet values alphabetically. - `hidden`. Don\'t show facet values that aren\'t explicitly positioned. + */ +export type SortRemainingBy = 'count' | 'alpha' | 'hidden'; diff --git a/packages/recommend/model/supportedLanguage.ts b/packages/recommend/model/supportedLanguage.ts new file mode 100644 index 000000000..85f2111cc --- /dev/null +++ b/packages/recommend/model/supportedLanguage.ts @@ -0,0 +1,74 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * ISO code for a supported language. + */ +export type SupportedLanguage = + | 'af' + | 'ar' + | 'az' + | 'bg' + | 'bn' + | 'ca' + | 'cs' + | 'cy' + | 'da' + | 'de' + | 'el' + | 'en' + | 'eo' + | 'es' + | 'et' + | 'eu' + | 'fa' + | 'fi' + | 'fo' + | 'fr' + | 'ga' + | 'gl' + | 'he' + | 'hi' + | 'hu' + | 'hy' + | 'id' + | 'is' + | 'it' + | 'ja' + | 'ka' + | 'kk' + | 'ko' + | 'ku' + | 'ky' + | 'lt' + | 'lv' + | 'mi' + | 'mn' + | 'mr' + | 'ms' + | 'mt' + | 'nb' + | 'nl' + | 'no' + | 'ns' + | 'pl' + | 'ps' + | 'pt' + | 'pt-br' + | 'qu' + | 'ro' + | 'ru' + | 'sk' + | 'sq' + | 'sv' + | 'sw' + | 'ta' + | 'te' + | 'th' + | 'tl' + | 'tn' + | 'tr' + | 'tt' + | 'uk' + | 'ur' + | 'uz' + | 'zh'; diff --git a/packages/recommend/model/tagFilters.ts b/packages/recommend/model/tagFilters.ts new file mode 100644 index 000000000..b13f801cf --- /dev/null +++ b/packages/recommend/model/tagFilters.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Filter the search by values of the special `_tags` attribute. **Prefer using the `filters` parameter, which supports all filter types and combinations with boolean operators.** Different from regular facets, `_tags` can only be used for filtering (including or excluding records). You won\'t get a facet count. The same combination and escaping rules apply as for `facetFilters`. + */ +export type TagFilters = Array | string; diff --git a/packages/recommend/model/taskStatus.ts b/packages/recommend/model/taskStatus.ts new file mode 100644 index 000000000..5b312a99c --- /dev/null +++ b/packages/recommend/model/taskStatus.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Task status, `published` if the task is completed, `notPublished` otherwise. + */ +export type TaskStatus = 'published' | 'notPublished'; diff --git a/packages/recommend/model/timeRange.ts b/packages/recommend/model/timeRange.ts new file mode 100644 index 000000000..dee6043c9 --- /dev/null +++ b/packages/recommend/model/timeRange.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +export type TimeRange = { + /** + * When the rule should start to be active, in Unix epoch time. + */ + from: number; + + /** + * When the rule should stop to be active, in Unix epoch time. + */ + until: number; +}; diff --git a/packages/recommend/model/trendingFacetHit.ts b/packages/recommend/model/trendingFacetHit.ts new file mode 100644 index 000000000..be8766692 --- /dev/null +++ b/packages/recommend/model/trendingFacetHit.ts @@ -0,0 +1,21 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Trending facet hit. + */ +export type TrendingFacetHit = { + /** + * Recommendation score. + */ + _score?: number; + + /** + * Facet attribute. To be used in combination with `facetValue`. If specified, only recommendations matching the facet filter will be returned. + */ + facetName: string; + + /** + * Facet value. To be used in combination with `facetName`. If specified, only recommendations matching the facet filter will be returned. + */ + facetValue: string; +}; diff --git a/packages/recommend/model/trendingFacets.ts b/packages/recommend/model/trendingFacets.ts new file mode 100644 index 000000000..06c54eeed --- /dev/null +++ b/packages/recommend/model/trendingFacets.ts @@ -0,0 +1,15 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FallbackParams } from './fallbackParams'; +import type { TrendingFacetsModel } from './trendingFacetsModel'; + +export type TrendingFacets = { + /** + * Facet attribute for which to retrieve trending facet values. + */ + facetName: string; + + model: TrendingFacetsModel; + + fallbackParameters?: FallbackParams; +}; diff --git a/packages/recommend/model/trendingFacetsModel.ts b/packages/recommend/model/trendingFacetsModel.ts new file mode 100644 index 000000000..424bd0bc2 --- /dev/null +++ b/packages/recommend/model/trendingFacetsModel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Trending facet values model. This model recommends trending facet values for the specified facet attribute. + */ +export type TrendingFacetsModel = 'trending-facets'; diff --git a/packages/recommend/model/trendingFacetsQuery.ts b/packages/recommend/model/trendingFacetsQuery.ts new file mode 100644 index 000000000..518d3287f --- /dev/null +++ b/packages/recommend/model/trendingFacetsQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseRecommendRequest } from './baseRecommendRequest'; +import type { TrendingFacets } from './trendingFacets'; + +export type TrendingFacetsQuery = BaseRecommendRequest & TrendingFacets; diff --git a/packages/recommend/model/trendingItems.ts b/packages/recommend/model/trendingItems.ts new file mode 100644 index 000000000..bb0c9cf76 --- /dev/null +++ b/packages/recommend/model/trendingItems.ts @@ -0,0 +1,20 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { FallbackParams } from './fallbackParams'; +import type { TrendingItemsModel } from './trendingItemsModel'; + +export type TrendingItems = { + /** + * Facet attribute. To be used in combination with `facetValue`. If specified, only recommendations matching the facet filter will be returned. + */ + facetName?: string; + + /** + * Facet value. To be used in combination with `facetName`. If specified, only recommendations matching the facet filter will be returned. + */ + facetValue?: string; + + model: TrendingItemsModel; + + fallbackParameters?: FallbackParams; +}; diff --git a/packages/recommend/model/trendingItemsModel.ts b/packages/recommend/model/trendingItemsModel.ts new file mode 100644 index 000000000..79bd4740e --- /dev/null +++ b/packages/recommend/model/trendingItemsModel.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * Trending items model. Trending items are determined from the number of conversion events collected on them. + */ +export type TrendingItemsModel = 'trending-items'; diff --git a/packages/recommend/model/trendingItemsQuery.ts b/packages/recommend/model/trendingItemsQuery.ts new file mode 100644 index 000000000..86740e4bb --- /dev/null +++ b/packages/recommend/model/trendingItemsQuery.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { BaseRecommendRequest } from './baseRecommendRequest'; +import type { TrendingItems } from './trendingItems'; + +export type TrendingItemsQuery = BaseRecommendRequest & TrendingItems; diff --git a/packages/recommend/model/typoTolerance.ts b/packages/recommend/model/typoTolerance.ts new file mode 100644 index 000000000..767e63229 --- /dev/null +++ b/packages/recommend/model/typoTolerance.ts @@ -0,0 +1,8 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { TypoToleranceEnum } from './typoToleranceEnum'; + +/** + * Whether [typo tolerance](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/typo-tolerance/) is enabled and how it is applied. If typo tolerance is true, `min`, or `strict`, [word splitting and concatenation](https://www.algolia.com/doc/guides/managing-results/optimize-search-results/handling-natural-languages-nlp/in-depth/splitting-and-concatenation/) are also active. + */ +export type TypoTolerance = boolean | TypoToleranceEnum; diff --git a/packages/recommend/model/typoToleranceEnum.ts b/packages/recommend/model/typoToleranceEnum.ts new file mode 100644 index 000000000..a33877b0d --- /dev/null +++ b/packages/recommend/model/typoToleranceEnum.ts @@ -0,0 +1,6 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +/** + * - `min`. Return matches with the lowest number of typos. For example, if you have matches without typos, only include those. But if there are no matches without typos (with 1 typo), include matches with 1 typo (2 typos). - `strict`. Return matches with the two lowest numbers of typos. With `strict`, the Typo ranking criterion is applied first in the `ranking` setting. + */ +export type TypoToleranceEnum = 'min' | 'strict'; diff --git a/packages/recommend/model/value.ts b/packages/recommend/model/value.ts new file mode 100644 index 000000000..72cd05add --- /dev/null +++ b/packages/recommend/model/value.ts @@ -0,0 +1,17 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { SortRemainingBy } from './sortRemainingBy'; + +export type Value = { + /** + * Explicit order of facets or facet values. This setting lets you always show specific facets or facet values at the top of the list. + */ + order?: Array; + + sortRemainingBy?: SortRemainingBy; + + /** + * Hide facet values. + */ + hide?: Array; +}; diff --git a/packages/recommend/model/widgets.ts b/packages/recommend/model/widgets.ts new file mode 100644 index 000000000..ee0f95779 --- /dev/null +++ b/packages/recommend/model/widgets.ts @@ -0,0 +1,13 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { Banner } from './banner'; + +/** + * Widgets returned from any rules that are applied to the current search. + */ +export type Widgets = { + /** + * Banners defined in the Merchandising Studio for a given search. + */ + banners?: Array; +}; diff --git a/packages/recommend/package.json b/packages/recommend/package.json index 345bb2091..d07ea0efd 100644 --- a/packages/recommend/package.json +++ b/packages/recommend/package.json @@ -1,37 +1,68 @@ { - "name": "@algolia/recommend", - "version": "4.13.1", - "private": false, - "description": "The perfect starting point to integrate Algolia Recommend within your JavaScript project.", + "version": "5.23.3", "repository": { "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/recommend#readme", + "type": "module", "license": "MIT", - "sideEffects": false, - "main": "index.js", - "jsdelivr": "./dist/recommend.umd.js", - "unpkg": "./dist/recommend.umd.js", - "browser": { - "./index.js": "./dist/recommend.umd.js" + "author": "Algolia", + "scripts": { + "build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js", + "clean": "rm -rf ./dist || true", + "test:bundle": "publint . && attw --pack ." + }, + "name": "@algolia/recommend", + "description": "JavaScript client for recommend", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/builds/node.js", + "module": "./dist/builds/node.js", + "require": "./dist/builds/node.cjs" + }, + "worker": { + "types": "./dist/worker.d.ts", + "default": "./dist/builds/worker.js" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/builds/browser.js", + "import": "./dist/builds/browser.js", + "default": "./dist/builds/browser.umd.js" + } + }, + "./dist/builds/*": "./dist/builds/*.js" }, - "types": "index.d.ts", + "jsdelivr": "./dist/builds/browser.umd.js", + "unpkg": "./dist/builds/browser.umd.js", + "react-native": "./dist/builds/browser.js", "files": [ "dist", "index.js", "index.d.ts" ], "dependencies": { - "@algolia/cache-browser-local-storage": "4.13.1", - "@algolia/cache-common": "4.13.1", - "@algolia/cache-in-memory": "4.13.1", - "@algolia/client-common": "4.13.1", - "@algolia/client-search": "4.13.1", - "@algolia/logger-common": "4.13.1", - "@algolia/logger-console": "4.13.1", - "@algolia/requester-browser-xhr": "4.13.1", - "@algolia/requester-common": "4.13.1", - "@algolia/requester-node-http": "4.13.1", - "@algolia/transporter": "4.13.1" + "@algolia/client-common": "5.23.3", + "@algolia/requester-browser-xhr": "5.23.3", + "@algolia/requester-fetch": "5.23.3", + "@algolia/requester-node-http": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "publint": "0.3.10", + "rollup": "4.39.0", + "tsup": "8.4.0", + "typescript": "5.8.3" + }, + "engines": { + "node": ">= 14.0.0" } } diff --git a/packages/recommend/rollup.config.js b/packages/recommend/rollup.config.js new file mode 100644 index 000000000..55cd3150f --- /dev/null +++ b/packages/recommend/rollup.config.js @@ -0,0 +1,17 @@ +export default [ + { + input: 'dist/builds/browser.min.js', + external: ['dom'], + cache: false, + output: { + esModule: false, + file: 'dist/builds/browser.umd.js', + name: '@algolia/recommend', + format: 'umd', + sourcemap: false, + globals: { + ['recommendClient']: 'recommendClient', + }, + }, + }, +]; diff --git a/packages/recommend/src/__tests__/getFrequentlyBoughtTogether.test.ts b/packages/recommend/src/__tests__/getFrequentlyBoughtTogether.test.ts deleted file mode 100644 index 4d44fb67c..000000000 --- a/packages/recommend/src/__tests__/getFrequentlyBoughtTogether.test.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { TestSuite } from '../../../client-common/src/__tests__/TestSuite'; - -const recommend = new TestSuite('recommend').recommend; - -function createMockedClient() { - const client = recommend('appId', 'apiKey'); - jest.spyOn(client.transporter, 'read').mockImplementation(() => Promise.resolve()); - - return client; -} - -describe('getFrequentlyBoughtTogether', () => { - test('builds the request', async () => { - const client = createMockedClient(); - - await client.getFrequentlyBoughtTogether( - [ - { - indexName: 'products', - objectID: 'B018APC4LE', - }, - ], - {} - ); - - expect(client.transporter.read).toHaveBeenCalledTimes(1); - expect(client.transporter.read).toHaveBeenCalledWith( - { - cacheable: true, - data: { - requests: [ - { - fallbackParameters: {}, - indexName: 'products', - model: 'bought-together', - objectID: 'B018APC4LE', - threshold: 0, - }, - ], - }, - method: 'POST', - path: '1/indexes/*/recommendations', - }, - {} - ); - }); - - test('ignores `fallbackParameters`', async () => { - const client = createMockedClient(); - - await client.getFrequentlyBoughtTogether([ - { - // @ts-ignore `fallbackParameters` are not supposed to be passed - // according to the types - fallbackParameters: { - facetFilters: [], - }, - indexName: 'products', - objectID: 'B018APC4LE', - }, - ]); - - expect(client.transporter.read).toHaveBeenCalledTimes(1); - expect(client.transporter.read).toHaveBeenCalledWith( - expect.objectContaining({ - data: { - requests: [ - { - fallbackParameters: {}, - indexName: 'products', - model: 'bought-together', - objectID: 'B018APC4LE', - threshold: 0, - }, - ], - }, - }), - undefined - ); - }); -}); diff --git a/packages/recommend/src/__tests__/getRecommendations.test.ts b/packages/recommend/src/__tests__/getRecommendations.test.ts deleted file mode 100644 index b9c0f4d16..000000000 --- a/packages/recommend/src/__tests__/getRecommendations.test.ts +++ /dev/null @@ -1,200 +0,0 @@ -import { TestSuite } from '../../../client-common/src/__tests__/TestSuite'; - -const recommend = new TestSuite('recommend').recommend; - -function createMockedClient() { - const client = recommend('appId', 'apiKey'); - jest.spyOn(client.transporter, 'read').mockImplementation(() => Promise.resolve()); - - return client; -} - -describe('getRecommendations', () => { - test('builds the request for "bought-together" model', async () => { - const client = createMockedClient(); - - await client.getRecommendations( - [ - { - model: 'bought-together', - indexName: 'products', - objectID: 'B018APC4LE', - }, - ], - {} - ); - - expect(client.transporter.read).toHaveBeenCalledTimes(1); - expect(client.transporter.read).toHaveBeenCalledWith( - { - cacheable: true, - data: { - requests: [ - { - indexName: 'products', - model: 'bought-together', - objectID: 'B018APC4LE', - threshold: 0, - }, - ], - }, - method: 'POST', - path: '1/indexes/*/recommendations', - }, - {} - ); - }); - - test('builds the request for "related-products" model', async () => { - const client = createMockedClient(); - - await client.getRecommendations( - [ - { - model: 'related-products', - indexName: 'products', - objectID: 'B018APC4LE', - }, - ], - {} - ); - - expect(client.transporter.read).toHaveBeenCalledTimes(1); - expect(client.transporter.read).toHaveBeenCalledWith( - { - cacheable: true, - data: { - requests: [ - { - indexName: 'products', - model: 'related-products', - objectID: 'B018APC4LE', - threshold: 0, - }, - ], - }, - method: 'POST', - path: '1/indexes/*/recommendations', - }, - {} - ); - }); - - test('builds multiple requests', async () => { - const client = createMockedClient(); - - await client.getRecommendations( - [ - { - model: 'related-products', - indexName: 'products', - objectID: 'B018APC4LE-1', - }, - { - model: 'related-products', - indexName: 'products', - objectID: 'B018APC4LE-2', - }, - ], - {} - ); - - expect(client.transporter.read).toHaveBeenCalledTimes(1); - expect(client.transporter.read).toHaveBeenCalledWith( - { - cacheable: true, - data: { - requests: [ - { - indexName: 'products', - model: 'related-products', - objectID: 'B018APC4LE-1', - threshold: 0, - }, - { - indexName: 'products', - model: 'related-products', - objectID: 'B018APC4LE-2', - threshold: 0, - }, - ], - }, - method: 'POST', - path: '1/indexes/*/recommendations', - }, - {} - ); - }); - - test('overrides `undefined` threshold with default value', async () => { - const client = createMockedClient(); - - await client.getRecommendations( - [ - { - model: 'bought-together', - indexName: 'products', - objectID: 'B018APC4LE', - threshold: undefined, - }, - ], - {} - ); - - expect(client.transporter.read).toHaveBeenCalledTimes(1); - expect(client.transporter.read).toHaveBeenCalledWith( - { - cacheable: true, - data: { - requests: [ - { - indexName: 'products', - model: 'bought-together', - objectID: 'B018APC4LE', - threshold: 0, - }, - ], - }, - method: 'POST', - path: '1/indexes/*/recommendations', - }, - {} - ); - }); - - test('overrides default threshold value', async () => { - const client = createMockedClient(); - - await client.getRecommendations( - [ - { - model: 'bought-together', - indexName: 'products', - objectID: 'B018APC4LE', - threshold: 42, - }, - ], - {} - ); - - expect(client.transporter.read).toHaveBeenCalledTimes(1); - expect(client.transporter.read).toHaveBeenCalledWith( - { - cacheable: true, - data: { - requests: [ - { - indexName: 'products', - model: 'bought-together', - objectID: 'B018APC4LE', - threshold: 42, - }, - ], - }, - method: 'POST', - path: '1/indexes/*/recommendations', - }, - {} - ); - }); -}); diff --git a/packages/recommend/src/__tests__/getRelatedProducts.test.ts b/packages/recommend/src/__tests__/getRelatedProducts.test.ts deleted file mode 100644 index 7c4deb1d4..000000000 --- a/packages/recommend/src/__tests__/getRelatedProducts.test.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { TestSuite } from '../../../client-common/src/__tests__/TestSuite'; - -const recommend = new TestSuite('recommend').recommend; - -function createMockedClient() { - const client = recommend('appId', 'apiKey'); - jest.spyOn(client.transporter, 'read').mockImplementation(() => Promise.resolve()); - - return client; -} - -describe('getRelatedProducts', () => { - test('builds the request', async () => { - const client = createMockedClient(); - - await client.getRelatedProducts( - [ - { - indexName: 'products', - objectID: 'B018APC4LE', - }, - ], - {} - ); - - expect(client.transporter.read).toHaveBeenCalledTimes(1); - expect(client.transporter.read).toHaveBeenCalledWith( - { - cacheable: true, - data: { - requests: [ - { - indexName: 'products', - model: 'related-products', - objectID: 'B018APC4LE', - threshold: 0, - }, - ], - }, - method: 'POST', - path: '1/indexes/*/recommendations', - }, - {} - ); - }); -}); diff --git a/packages/recommend/src/__tests__/getTrendingFacets.test.ts b/packages/recommend/src/__tests__/getTrendingFacets.test.ts deleted file mode 100644 index 69a13f2cb..000000000 --- a/packages/recommend/src/__tests__/getTrendingFacets.test.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { TestSuite } from '../../../client-common/src/__tests__/TestSuite'; - -const recommend = new TestSuite('recommend').recommend; - -function createMockedClient() { - const client = recommend('appId', 'apiKey'); - jest.spyOn(client.transporter, 'read').mockImplementation(() => Promise.resolve()); - - return client; -} - -describe('getTrendingFacets', () => { - test('builds the request', async () => { - const client = createMockedClient(); - - await client.getTrendingFacets( - [ - { - indexName: 'products', - facetName: 'company', - }, - ], - {} - ); - - expect(client.transporter.read).toHaveBeenCalledTimes(1); - expect(client.transporter.read).toHaveBeenCalledWith( - { - cacheable: true, - data: { - requests: [ - { - indexName: 'products', - model: 'trending-facets', - facetName: 'company', - threshold: 0, - }, - ], - }, - method: 'POST', - path: '1/indexes/*/recommendations', - }, - {} - ); - }); -}); diff --git a/packages/recommend/src/__tests__/getTrendingItems.test.ts b/packages/recommend/src/__tests__/getTrendingItems.test.ts deleted file mode 100644 index 03dfcd294..000000000 --- a/packages/recommend/src/__tests__/getTrendingItems.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { TestSuite } from '../../../client-common/src/__tests__/TestSuite'; - -const recommend = new TestSuite('recommend').recommend; - -function createMockedClient() { - const client = recommend('appId', 'apiKey'); - jest.spyOn(client.transporter, 'read').mockImplementation(() => Promise.resolve()); - - return client; -} - -describe('getTrendingItems', () => { - test('builds the request', async () => { - const client = createMockedClient(); - - await client.getTrendingItems( - [ - { - indexName: 'products', - }, - ], - {} - ); - - expect(client.transporter.read).toHaveBeenCalledTimes(1); - expect(client.transporter.read).toHaveBeenCalledWith( - { - cacheable: true, - data: { - requests: [ - { - indexName: 'products', - model: 'trending-items', - threshold: 0, - }, - ], - }, - method: 'POST', - path: '1/indexes/*/recommendations', - }, - {} - ); - }); -}); diff --git a/packages/recommend/src/__tests__/recommend-client.test.ts b/packages/recommend/src/__tests__/recommend-client.test.ts deleted file mode 100644 index d3798a54d..000000000 --- a/packages/recommend/src/__tests__/recommend-client.test.ts +++ /dev/null @@ -1,179 +0,0 @@ -import { createInMemoryCache } from '@algolia/cache-in-memory'; -import { version } from '@algolia/client-common'; -import { createStatelessHost, createUserAgent } from '@algolia/transporter'; - -import { TestSuite } from '../../../client-common/src/__tests__/TestSuite'; - -const recommend = new TestSuite('recommend').recommend; - -describe('recommend', () => { - test('has a version property', () => { - expect(recommend.version).toBe(version); - expect(recommend.version.startsWith('4.')).toBe(true); - }); - - test('gives access to appId', () => { - expect(recommend('appId', 'apiKey').appId).toEqual('appId'); - }); - - test('clearCache', async () => { - const client = recommend('appId', 'apiKey'); - - client.transporter.requestsCache.set('bla', 'blo'); - client.transporter.responsesCache.set('bla', 'blo'); - - if (testing.isBrowser()) { - await expect( - client.transporter.requestsCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('blo'); - await expect( - client.transporter.responsesCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('blo'); - } else { - // node uses a null cache, so these assertions don't make sense there - await expect( - client.transporter.requestsCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - await expect( - client.transporter.responsesCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - } - - await client.clearCache(); - - await expect( - client.transporter.requestsCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - await expect( - client.transporter.responsesCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - }); - - test('clearCache without promise', async () => { - const client = recommend('appId', 'apiKey'); - - client.transporter.requestsCache.set('bla', 'blo'); - client.transporter.responsesCache.set('bla', 'blo'); - - if (testing.isBrowser()) { - await expect( - client.transporter.requestsCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('blo'); - await expect( - client.transporter.responsesCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('blo'); - } else { - // node uses a null cache, so these assertions don't make sense there - await expect( - client.transporter.requestsCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - await expect( - client.transporter.responsesCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - } - - // no await, since default memory caches _actually_ are instant - client.clearCache(); - - await expect( - client.transporter.requestsCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - await expect( - client.transporter.responsesCache.get('bla', () => Promise.resolve('wrong')) - ).resolves.toBe('wrong'); - }); - - it('sets default headers and queryParameters', () => { - const client = recommend('appId', 'apiKey'); - - if (testing.isBrowser()) { - expect(client.transporter.headers).toEqual({ - 'content-type': 'application/x-www-form-urlencoded', - }); - expect(client.transporter.queryParameters).toEqual({ - 'x-algolia-application-id': 'appId', - 'x-algolia-api-key': 'apiKey', - }); - } else { - expect(client.transporter.headers).toEqual({ - 'content-type': 'application/x-www-form-urlencoded', - 'x-algolia-application-id': 'appId', - 'x-algolia-api-key': 'apiKey', - }); - expect(client.transporter.queryParameters).toEqual({}); - } - }); - - test('sets default user agent', () => { - const client = recommend('appId', 'apiKey'); - - if (testing.isBrowser()) { - expect(client.transporter.userAgent.value).toEqual( - `Algolia for JavaScript (${version}); Recommend (${version}); Browser` - ); - } else { - const nodeVersion = process.versions.node; - - expect(client.transporter.userAgent.value).toEqual( - `Algolia for JavaScript (${version}); Recommend (${version}); Node.js (${nodeVersion})` - ); - } - }); - - test('allows to customize options', () => { - const client = recommend('appId', 'apiKey'); - const cache = createInMemoryCache(); - const userAgent = createUserAgent('0.2.0'); - - const customClient = recommend('appId', 'apiKey', { - hostsCache: cache, - requestsCache: cache, - userAgent, - timeouts: { - connect: 45, - read: 46, - write: 47, - }, - queryParameters: { - queryParameter: 'bar', - }, - headers: { - header: 'foo', - }, - hosts: [{ url: 'foo.com' }], - }); - - // Then, on custom options, only the client is impacted - expect(client.transporter.hostsCache).not.toBe(cache); - expect(customClient.transporter.hostsCache).toBe(cache); - - expect(client.transporter.requestsCache).not.toBe(cache); - expect(customClient.transporter.requestsCache).toBe(cache); - expect(customClient.transporter.timeouts).toEqual({ - connect: 45, - read: 46, - write: 47, - }); - - expect(customClient.transporter.queryParameters).toEqual( - expect.objectContaining({ - queryParameter: 'bar', - }) - ); - expect(customClient.transporter.headers).toEqual( - expect.objectContaining({ - 'content-type': 'application/x-www-form-urlencoded', - header: 'foo', - }) - ); - expect(customClient.transporter.hosts).toEqual([createStatelessHost({ url: 'foo.com' })]); - }); - - test('can be destroyed', () => { - const client = recommend('appId', 'apiKey'); - - if (!testing.isBrowser()) { - expect(client).toHaveProperty('destroy'); - } - }); -}); diff --git a/packages/recommend/src/builds/browser.ts b/packages/recommend/src/builds/browser.ts deleted file mode 100644 index 60db69674..000000000 --- a/packages/recommend/src/builds/browser.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { createBrowserLocalStorageCache } from '@algolia/cache-browser-local-storage'; -import { createFallbackableCache } from '@algolia/cache-common'; -import { createInMemoryCache } from '@algolia/cache-in-memory'; -import { AuthMode, version } from '@algolia/client-common'; -import { LogLevelEnum } from '@algolia/logger-common'; -import { createConsoleLogger } from '@algolia/logger-console'; -import { createBrowserXhrRequester } from '@algolia/requester-browser-xhr'; -import { createUserAgent } from '@algolia/transporter'; - -import { createRecommendClient } from '../createRecommendClient'; -import { - getFrequentlyBoughtTogether, - getRecommendations, - getRelatedProducts, - getTrendingFacets, - getTrendingItems, -} from '../methods'; -import { BaseRecommendClient, RecommendOptions, WithRecommendMethods } from '../types'; - -export default function recommend( - appId: string, - apiKey: string, - options?: RecommendOptions -): RecommendClient { - const commonOptions = { - appId, - apiKey, - timeouts: { - connect: 1, - read: 2, - write: 30, - }, - requester: createBrowserXhrRequester(), - logger: createConsoleLogger(LogLevelEnum.Error), - responsesCache: createInMemoryCache(), - requestsCache: createInMemoryCache({ serializable: false }), - hostsCache: createFallbackableCache({ - caches: [ - createBrowserLocalStorageCache({ key: `${version}-${appId}` }), - createInMemoryCache(), - ], - }), - userAgent: createUserAgent(version) - .add({ segment: 'Recommend', version }) - .add({ segment: 'Browser' }), - authMode: AuthMode.WithinQueryParameters, - }; - - return createRecommendClient({ - ...commonOptions, - ...options, - methods: { - getFrequentlyBoughtTogether, - getRecommendations, - getRelatedProducts, - getTrendingFacets, - getTrendingItems, - }, - }); -} - -// eslint-disable-next-line functional/immutable-data -recommend.version = version; - -export type RecommendClient = WithRecommendMethods; - -export * from '../types'; diff --git a/packages/recommend/src/builds/node.ts b/packages/recommend/src/builds/node.ts deleted file mode 100644 index b7646c384..000000000 --- a/packages/recommend/src/builds/node.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { createNullCache } from '@algolia/cache-common'; -import { createInMemoryCache } from '@algolia/cache-in-memory'; -import { destroy, version } from '@algolia/client-common'; -import { createNullLogger } from '@algolia/logger-common'; -import { Destroyable } from '@algolia/requester-common'; -import { createNodeHttpRequester } from '@algolia/requester-node-http'; -import { createUserAgent } from '@algolia/transporter'; - -import { createRecommendClient } from '../createRecommendClient'; -import { - getFrequentlyBoughtTogether, - getRecommendations, - getRelatedProducts, - getTrendingFacets, - getTrendingItems, -} from '../methods'; -import { BaseRecommendClient, RecommendOptions, WithRecommendMethods } from '../types'; - -export default function recommend( - appId: string, - apiKey: string, - options?: RecommendOptions -): RecommendClient { - const commonOptions = { - appId, - apiKey, - timeouts: { - connect: 2, - read: 5, - write: 30, - }, - requester: createNodeHttpRequester(), - logger: createNullLogger(), - responsesCache: createNullCache(), - requestsCache: createNullCache(), - hostsCache: createInMemoryCache(), - userAgent: createUserAgent(version) - .add({ segment: 'Recommend', version }) - .add({ segment: 'Node.js', version: process.versions.node }), - }; - - return createRecommendClient({ - ...commonOptions, - ...options, - methods: { - destroy, - getFrequentlyBoughtTogether, - getRecommendations, - getRelatedProducts, - getTrendingFacets, - getTrendingItems, - }, - }); -} - -// eslint-disable-next-line functional/immutable-data -recommend.version = version; - -export type RecommendClient = WithRecommendMethods & Destroyable; - -export * from '../types'; diff --git a/packages/recommend/src/createRecommendClient.ts b/packages/recommend/src/createRecommendClient.ts deleted file mode 100644 index 309dfdb9f..000000000 --- a/packages/recommend/src/createRecommendClient.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { - addMethods, - AuthMode, - ClientTransporterOptions, - createAuth, - CreateClient, - shuffle, -} from '@algolia/client-common'; -import { CallEnum, createTransporter, HostOptions } from '@algolia/transporter'; - -import { BaseRecommendClient, RecommendClientOptions } from './types'; - -export const createRecommendClient: CreateClient< - BaseRecommendClient, - RecommendClientOptions & ClientTransporterOptions -> = options => { - const appId = options.appId; - - const auth = createAuth( - options.authMode !== undefined ? options.authMode : AuthMode.WithinHeaders, - appId, - options.apiKey - ); - - const transporter = createTransporter({ - hosts: ([ - { url: `${appId}-dsn.algolia.net`, accept: CallEnum.Read }, - { url: `${appId}.algolia.net`, accept: CallEnum.Write }, - ] as readonly HostOptions[]).concat( - shuffle([ - { url: `${appId}-1.algolianet.com` }, - { url: `${appId}-2.algolianet.com` }, - { url: `${appId}-3.algolianet.com` }, - ]) - ), - ...options, - headers: { - ...auth.headers(), - ...{ 'content-type': 'application/x-www-form-urlencoded' }, - ...options.headers, - }, - - queryParameters: { - ...auth.queryParameters(), - ...options.queryParameters, - }, - }); - - const base = { - transporter, - appId, - addAlgoliaAgent(segment: string, version?: string): void { - transporter.userAgent.add({ segment, version }); - }, - clearCache(): Readonly> { - return Promise.all([ - transporter.requestsCache.clear(), - transporter.responsesCache.clear(), - ]).then(() => undefined); - }, - }; - - return addMethods(base, options.methods); -}; diff --git a/packages/recommend/src/index.ts b/packages/recommend/src/index.ts deleted file mode 100644 index 98d771d13..000000000 --- a/packages/recommend/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createRecommendClient'; -export * from './methods/index'; -export * from './types/index'; diff --git a/packages/recommend/src/methods/getFrequentlyBoughtTogether.ts b/packages/recommend/src/methods/getFrequentlyBoughtTogether.ts deleted file mode 100644 index 6ffa0cac2..000000000 --- a/packages/recommend/src/methods/getFrequentlyBoughtTogether.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { BaseRecommendClient, FrequentlyBoughtTogetherQuery, WithRecommendMethods } from '../types'; -import { getRecommendations } from './getRecommendations'; - -type GetFrequentlyBoughtTogether = ( - base: BaseRecommendClient -) => WithRecommendMethods['getFrequentlyBoughtTogether']; - -export const getFrequentlyBoughtTogether: GetFrequentlyBoughtTogether = base => { - return (queries: readonly FrequentlyBoughtTogetherQuery[], requestOptions) => { - return getRecommendations(base)( - queries.map(query => ({ - ...query, - fallbackParameters: {}, - model: 'bought-together', - })), - requestOptions - ); - }; -}; diff --git a/packages/recommend/src/methods/getRecommendations.ts b/packages/recommend/src/methods/getRecommendations.ts deleted file mode 100644 index 8fda3aa2a..000000000 --- a/packages/recommend/src/methods/getRecommendations.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; - -import { - BaseRecommendClient, - RecommendationsQuery, - TrendingQuery, - WithRecommendMethods, -} from '../types'; - -type GetRecommendations = ( - base: BaseRecommendClient -) => WithRecommendMethods['getRecommendations']; - -export const getRecommendations: GetRecommendations = base => { - return (queries: ReadonlyArray, requestOptions) => { - const requests: ReadonlyArray = queries.map(query => ({ - ...query, - // The `threshold` param is required by the endpoint to make it easier - // to provide a default value later, so we default it in the client - // so that users don't have to provide a value. - threshold: query.threshold || 0, - })); - - return base.transporter.read( - { - method: MethodEnum.Post, - path: '1/indexes/*/recommendations', - data: { - requests, - }, - cacheable: true, - }, - requestOptions - ); - }; -}; diff --git a/packages/recommend/src/methods/getRelatedProducts.ts b/packages/recommend/src/methods/getRelatedProducts.ts deleted file mode 100644 index 456f632d6..000000000 --- a/packages/recommend/src/methods/getRelatedProducts.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { BaseRecommendClient, RelatedProductsQuery, WithRecommendMethods } from '../types'; -import { getRecommendations } from './getRecommendations'; - -type GetRelatedProducts = ( - base: BaseRecommendClient -) => WithRecommendMethods['getRelatedProducts']; - -export const getRelatedProducts: GetRelatedProducts = base => { - return (queries: readonly RelatedProductsQuery[], requestOptions) => { - return getRecommendations(base)( - queries.map(query => ({ - ...query, - model: 'related-products', - })), - requestOptions - ); - }; -}; diff --git a/packages/recommend/src/methods/getTrendingFacets.ts b/packages/recommend/src/methods/getTrendingFacets.ts deleted file mode 100644 index 0bf3b279e..000000000 --- a/packages/recommend/src/methods/getTrendingFacets.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; - -import { BaseRecommendClient, TrendingFacetsQuery, WithRecommendMethods } from '../types'; - -type GetTrendingFacets = ( - base: BaseRecommendClient -) => WithRecommendMethods['getTrendingFacets']; - -export const getTrendingFacets: GetTrendingFacets = base => { - return (queries: readonly TrendingFacetsQuery[], requestOptions) => { - const requests: readonly TrendingFacetsQuery[] = queries.map(query => ({ - ...query, - model: 'trending-facets', - // The `threshold` param is required by the endpoint to make it easier - // to provide a default value later, so we default it in the client - // so that users don't have to provide a value. - threshold: query.threshold || 0, - })); - - return base.transporter.read( - { - method: MethodEnum.Post, - path: '1/indexes/*/recommendations', - data: { - requests, - }, - cacheable: true, - }, - requestOptions - ); - }; -}; diff --git a/packages/recommend/src/methods/getTrendingItems.ts b/packages/recommend/src/methods/getTrendingItems.ts deleted file mode 100644 index fb1610dc2..000000000 --- a/packages/recommend/src/methods/getTrendingItems.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { MethodEnum } from '@algolia/requester-common'; - -import { BaseRecommendClient, TrendingItemsQuery, WithRecommendMethods } from '../types'; - -type GetTrendingItems = ( - base: BaseRecommendClient -) => WithRecommendMethods['getTrendingItems']; - -export const getTrendingItems: GetTrendingItems = base => { - return (queries: readonly TrendingItemsQuery[], requestOptions) => { - const requests: readonly TrendingItemsQuery[] = queries.map(query => ({ - ...query, - model: 'trending-items', - // The `threshold` param is required by the endpoint to make it easier - // to provide a default value later, so we default it in the client - // so that users don't have to provide a value. - threshold: query.threshold || 0, - })); - - return base.transporter.read( - { - method: MethodEnum.Post, - path: '1/indexes/*/recommendations', - data: { - requests, - }, - cacheable: true, - }, - requestOptions - ); - }; -}; diff --git a/packages/recommend/src/methods/index.ts b/packages/recommend/src/methods/index.ts deleted file mode 100644 index e30466cc0..000000000 --- a/packages/recommend/src/methods/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './getFrequentlyBoughtTogether'; -export * from './getRecommendations'; -export * from './getRelatedProducts'; -export * from './getTrendingFacets'; -export * from './getTrendingItems'; diff --git a/packages/recommend/src/recommendClient.ts b/packages/recommend/src/recommendClient.ts new file mode 100644 index 000000000..717f5e66e --- /dev/null +++ b/packages/recommend/src/recommendClient.ts @@ -0,0 +1,528 @@ +// Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. + +import type { + CreateClientOptions, + Headers, + Host, + QueryParameters, + Request, + RequestOptions, +} from '@algolia/client-common'; +import { createAuth, createTransporter, getAlgoliaAgent, shuffle } from '@algolia/client-common'; + +import type { DeletedAtResponse } from '../model/deletedAtResponse'; + +import type { GetRecommendTaskResponse } from '../model/getRecommendTaskResponse'; +import type { GetRecommendationsParams } from '../model/getRecommendationsParams'; +import type { GetRecommendationsResponse } from '../model/getRecommendationsResponse'; + +import type { RecommendRule } from '../model/recommendRule'; +import type { RecommendUpdatedAtResponse } from '../model/recommendUpdatedAtResponse'; + +import type { SearchRecommendRulesResponse } from '../model/searchRecommendRulesResponse'; + +import type { + BatchRecommendRulesProps, + CustomDeleteProps, + CustomGetProps, + CustomPostProps, + CustomPutProps, + DeleteRecommendRuleProps, + GetRecommendRuleProps, + GetRecommendStatusProps, + LegacyGetRecommendationsParams, + SearchRecommendRulesProps, +} from '../model/clientMethodProps'; + +export const apiClientVersion = '5.23.3'; + +function getDefaultHosts(appId: string): Host[] { + return ( + [ + { + url: `${appId}-dsn.algolia.net`, + accept: 'read', + protocol: 'https', + }, + { + url: `${appId}.algolia.net`, + accept: 'write', + protocol: 'https', + }, + ] as Host[] + ).concat( + shuffle([ + { + url: `${appId}-1.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + { + url: `${appId}-2.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + { + url: `${appId}-3.algolianet.com`, + accept: 'readWrite', + protocol: 'https', + }, + ]), + ); +} + +export function createRecommendClient({ + appId: appIdOption, + apiKey: apiKeyOption, + authMode, + algoliaAgents, + ...options +}: CreateClientOptions) { + const auth = createAuth(appIdOption, apiKeyOption, authMode); + const transporter = createTransporter({ + hosts: getDefaultHosts(appIdOption), + ...options, + algoliaAgent: getAlgoliaAgent({ + algoliaAgents, + client: 'Recommend', + version: apiClientVersion, + }), + baseHeaders: { + 'content-type': 'text/plain', + ...auth.headers(), + ...options.baseHeaders, + }, + baseQueryParameters: { + ...auth.queryParameters(), + ...options.baseQueryParameters, + }, + }); + + return { + transporter, + + /** + * The `appId` currently in use. + */ + appId: appIdOption, + + /** + * The `apiKey` currently in use. + */ + apiKey: apiKeyOption, + + /** + * Clears the cache of the transporter for the `requestsCache` and `responsesCache` properties. + */ + clearCache(): Promise { + return Promise.all([transporter.requestsCache.clear(), transporter.responsesCache.clear()]).then(() => undefined); + }, + + /** + * Get the value of the `algoliaAgent`, used by our libraries internally and telemetry system. + */ + get _ua(): string { + return transporter.algoliaAgent.value; + }, + + /** + * Adds a `segment` to the `x-algolia-agent` sent with every requests. + * + * @param segment - The algolia agent (user-agent) segment to add. + * @param version - The version of the agent. + */ + addAlgoliaAgent(segment: string, version?: string): void { + transporter.algoliaAgent.add({ segment, version }); + }, + + /** + * Helper method to switch the API key used to authenticate the requests. + * + * @param params - Method params. + * @param params.apiKey - The new API Key to use. + */ + setClientApiKey({ apiKey }: { apiKey: string }): void { + if (!authMode || authMode === 'WithinHeaders') { + transporter.baseHeaders['x-algolia-api-key'] = apiKey; + } else { + transporter.baseQueryParameters['x-algolia-api-key'] = apiKey; + } + }, + + /** + * Create or update a batch of Recommend Rules Each Recommend Rule is created or updated, depending on whether a Recommend Rule with the same `objectID` already exists. You may also specify `true` for `clearExistingRules`, in which case the batch will atomically replace all the existing Recommend Rules. Recommend Rules are similar to Search Rules, except that the conditions and consequences apply to a [source item](/doc/guides/algolia-recommend/overview/#recommend-models) instead of a query. The main differences are the following: - Conditions `pattern` and `anchoring` are unavailable. - Condition `filters` triggers if the source item matches the specified filters. - Condition `filters` accepts numeric filters. - Consequence `params` only covers filtering parameters. - Consequence `automaticFacetFilters` doesn\'t require a facet value placeholder (it tries to match the data source item\'s attributes instead). + * + * Required API Key ACLs: + * - editSettings + * @param batchRecommendRules - The batchRecommendRules object. + * @param batchRecommendRules.indexName - Name of the index on which to perform the operation. + * @param batchRecommendRules.model - [Recommend model](https://www.algolia.com/doc/guides/algolia-recommend/overview/#recommend-models). + * @param batchRecommendRules.recommendRule - The recommendRule object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + batchRecommendRules( + { indexName, model, recommendRule }: BatchRecommendRulesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `batchRecommendRules`.'); + } + + if (!model) { + throw new Error('Parameter `model` is required when calling `batchRecommendRules`.'); + } + + const requestPath = '/1/indexes/{indexName}/{model}/recommend/rules/batch' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{model}', encodeURIComponent(model)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: recommendRule ? recommendRule : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customDelete - The customDelete object. + * @param customDelete.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customDelete.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customDelete( + { path, parameters }: CustomDeleteProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customDelete`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customGet - The customGet object. + * @param customGet.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customGet.parameters - Query parameters to apply to the current query. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customGet({ path, parameters }: CustomGetProps, requestOptions?: RequestOptions): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customGet`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPost - The customPost object. + * @param customPost.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPost.parameters - Query parameters to apply to the current query. + * @param customPost.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPost( + { path, parameters, body }: CustomPostProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPost`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * This method lets you send requests to the Algolia REST API. + * @param customPut - The customPut object. + * @param customPut.path - Path of the endpoint, anything after \"/1\" must be specified. + * @param customPut.parameters - Query parameters to apply to the current query. + * @param customPut.body - Parameters to send with the custom request. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + customPut( + { path, parameters, body }: CustomPutProps, + requestOptions?: RequestOptions, + ): Promise> { + if (!path) { + throw new Error('Parameter `path` is required when calling `customPut`.'); + } + + const requestPath = '/{path}'.replace('{path}', path); + const headers: Headers = {}; + const queryParameters: QueryParameters = parameters ? parameters : {}; + + const request: Request = { + method: 'PUT', + path: requestPath, + queryParameters, + headers, + data: body ? body : {}, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Deletes a Recommend rule from a recommendation scenario. + * + * Required API Key ACLs: + * - editSettings + * @param deleteRecommendRule - The deleteRecommendRule object. + * @param deleteRecommendRule.indexName - Name of the index on which to perform the operation. + * @param deleteRecommendRule.model - [Recommend model](https://www.algolia.com/doc/guides/algolia-recommend/overview/#recommend-models). + * @param deleteRecommendRule.objectID - Unique record identifier. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + deleteRecommendRule( + { indexName, model, objectID }: DeleteRecommendRuleProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `deleteRecommendRule`.'); + } + + if (!model) { + throw new Error('Parameter `model` is required when calling `deleteRecommendRule`.'); + } + + if (!objectID) { + throw new Error('Parameter `objectID` is required when calling `deleteRecommendRule`.'); + } + + const requestPath = '/1/indexes/{indexName}/{model}/recommend/rules/{objectID}' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{model}', encodeURIComponent(model)) + .replace('{objectID}', encodeURIComponent(objectID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'DELETE', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves a Recommend rule that you previously created in the Algolia dashboard. + * + * Required API Key ACLs: + * - settings + * @param getRecommendRule - The getRecommendRule object. + * @param getRecommendRule.indexName - Name of the index on which to perform the operation. + * @param getRecommendRule.model - [Recommend model](https://www.algolia.com/doc/guides/algolia-recommend/overview/#recommend-models). + * @param getRecommendRule.objectID - Unique record identifier. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getRecommendRule( + { indexName, model, objectID }: GetRecommendRuleProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `getRecommendRule`.'); + } + + if (!model) { + throw new Error('Parameter `model` is required when calling `getRecommendRule`.'); + } + + if (!objectID) { + throw new Error('Parameter `objectID` is required when calling `getRecommendRule`.'); + } + + const requestPath = '/1/indexes/{indexName}/{model}/recommend/rules/{objectID}' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{model}', encodeURIComponent(model)) + .replace('{objectID}', encodeURIComponent(objectID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Checks the status of a given task. Deleting a Recommend rule is asynchronous. When you delete a rule, a task is created on a queue and completed depending on the load on the server. The API response includes a task ID that you can use to check the status. + * + * Required API Key ACLs: + * - editSettings + * @param getRecommendStatus - The getRecommendStatus object. + * @param getRecommendStatus.indexName - Name of the index on which to perform the operation. + * @param getRecommendStatus.model - [Recommend model](https://www.algolia.com/doc/guides/algolia-recommend/overview/#recommend-models). + * @param getRecommendStatus.taskID - Unique task identifier. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getRecommendStatus( + { indexName, model, taskID }: GetRecommendStatusProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `getRecommendStatus`.'); + } + + if (!model) { + throw new Error('Parameter `model` is required when calling `getRecommendStatus`.'); + } + + if (!taskID) { + throw new Error('Parameter `taskID` is required when calling `getRecommendStatus`.'); + } + + const requestPath = '/1/indexes/{indexName}/{model}/task/{taskID}' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{model}', encodeURIComponent(model)) + .replace('{taskID}', encodeURIComponent(taskID)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'GET', + path: requestPath, + queryParameters, + headers, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Retrieves recommendations from selected AI models. + * + * Required API Key ACLs: + * - search + * @param getRecommendationsParams - The getRecommendationsParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + getRecommendations( + getRecommendationsParams: GetRecommendationsParams | LegacyGetRecommendationsParams, + requestOptions?: RequestOptions, + ): Promise { + if (getRecommendationsParams && Array.isArray(getRecommendationsParams)) { + const newSignatureRequest: GetRecommendationsParams = { + requests: getRecommendationsParams, + }; + + getRecommendationsParams = newSignatureRequest; + } + + if (!getRecommendationsParams) { + throw new Error('Parameter `getRecommendationsParams` is required when calling `getRecommendations`.'); + } + + if (!getRecommendationsParams.requests) { + throw new Error('Parameter `getRecommendationsParams.requests` is required when calling `getRecommendations`.'); + } + + const requestPath = '/1/indexes/*/recommendations'; + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: getRecommendationsParams, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + + /** + * Searches for Recommend rules. Use an empty query to list all rules for this recommendation scenario. + * + * Required API Key ACLs: + * - settings + * @param searchRecommendRules - The searchRecommendRules object. + * @param searchRecommendRules.indexName - Name of the index on which to perform the operation. + * @param searchRecommendRules.model - [Recommend model](https://www.algolia.com/doc/guides/algolia-recommend/overview/#recommend-models). + * @param searchRecommendRules.searchRecommendRulesParams - The searchRecommendRulesParams object. + * @param requestOptions - The requestOptions to send along with the query, they will be merged with the transporter requestOptions. + */ + searchRecommendRules( + { indexName, model, searchRecommendRulesParams }: SearchRecommendRulesProps, + requestOptions?: RequestOptions, + ): Promise { + if (!indexName) { + throw new Error('Parameter `indexName` is required when calling `searchRecommendRules`.'); + } + + if (!model) { + throw new Error('Parameter `model` is required when calling `searchRecommendRules`.'); + } + + const requestPath = '/1/indexes/{indexName}/{model}/recommend/rules/search' + .replace('{indexName}', encodeURIComponent(indexName)) + .replace('{model}', encodeURIComponent(model)); + const headers: Headers = {}; + const queryParameters: QueryParameters = {}; + + const request: Request = { + method: 'POST', + path: requestPath, + queryParameters, + headers, + data: searchRecommendRulesParams ? searchRecommendRulesParams : {}, + useReadTransporter: true, + cacheable: true, + }; + + return transporter.request(request, requestOptions); + }, + }; +} diff --git a/packages/recommend/src/types/BaseRecommendClient.ts b/packages/recommend/src/types/BaseRecommendClient.ts deleted file mode 100644 index dda485250..000000000 --- a/packages/recommend/src/types/BaseRecommendClient.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Transporter } from '@algolia/transporter'; - -export type BaseRecommendClient = { - /** - * The application id. - */ - readonly appId: string; - - /** - * The underlying transporter. - */ - readonly transporter: Transporter; - - /** - * Mutates the transporter, adding the given user agent. - */ - readonly addAlgoliaAgent: (segment: string, version?: string) => void; - - /** - * Clears both requests and responses caches. - */ - readonly clearCache: () => Readonly>; -}; diff --git a/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts b/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts deleted file mode 100644 index 829abd2a8..000000000 --- a/packages/recommend/src/types/FrequentlyBoughtTogetherQuery.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { RecommendationsQuery } from './RecommendationsQuery'; - -export type FrequentlyBoughtTogetherQuery = Omit< - RecommendationsQuery, - 'model' | 'fallbackParameters' ->; diff --git a/packages/recommend/src/types/RecommendClientOptions.ts b/packages/recommend/src/types/RecommendClientOptions.ts deleted file mode 100644 index a493f7846..000000000 --- a/packages/recommend/src/types/RecommendClientOptions.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { AuthModeType } from '@algolia/client-common'; - -export type RecommendClientOptions = { - /** - * The application id. - */ - readonly appId: string; - - /** - * The api key. - */ - readonly apiKey: string; - - /** - * The auth mode type. In browser environments credentials may - * be passed within the headers. - */ - readonly authMode?: AuthModeType; -}; diff --git a/packages/recommend/src/types/RecommendModel.ts b/packages/recommend/src/types/RecommendModel.ts deleted file mode 100644 index e4c5d42fc..000000000 --- a/packages/recommend/src/types/RecommendModel.ts +++ /dev/null @@ -1,2 +0,0 @@ -export type TrendingModel = 'trending-items' | 'trending-facets'; -export type RecommendModel = 'related-products' | 'bought-together' | TrendingModel; diff --git a/packages/recommend/src/types/RecommendOptions.ts b/packages/recommend/src/types/RecommendOptions.ts deleted file mode 100644 index b37634837..000000000 --- a/packages/recommend/src/types/RecommendOptions.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { ClientTransporterOptions } from '@algolia/client-common'; - -export type RecommendOptions = Partial; diff --git a/packages/recommend/src/types/RecommendSearchOptions.ts b/packages/recommend/src/types/RecommendSearchOptions.ts deleted file mode 100644 index e14d9ab6c..000000000 --- a/packages/recommend/src/types/RecommendSearchOptions.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { SearchOptions } from '@algolia/client-search'; - -export type RecommendSearchOptions = Omit< - SearchOptions, - 'page' | 'hitsPerPage' | 'offset' | 'length' ->; diff --git a/packages/recommend/src/types/RecommendationsQuery.ts b/packages/recommend/src/types/RecommendationsQuery.ts deleted file mode 100644 index 4d269f869..000000000 --- a/packages/recommend/src/types/RecommendationsQuery.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { RecommendModel } from './RecommendModel'; -import { RecommendSearchOptions } from './RecommendSearchOptions'; - -export type RecommendationsQuery = { - /** - * The name of the target index. - */ - readonly indexName: string; - - /** - * The name of the Recommendation model to use. - */ - readonly model: RecommendModel; - - /** - * The `objectID` of the item to get recommendations for. - */ - readonly objectID: string; - - /** - * Threshold for the recommendations confidence score (between 0 and 100). Only recommendations with a greater score are returned. - */ - readonly threshold?: number; - - /** - * How many recommendations to retrieve. - */ - readonly maxRecommendations?: number; - - /** - * List of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/) to send. - */ - readonly queryParameters?: RecommendSearchOptions; - - /** - * List of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/) to send. - * - * Additional filters to use as fallback when there aren’t enough recommendations. - */ - readonly fallbackParameters?: RecommendSearchOptions; -}; diff --git a/packages/recommend/src/types/RelatedProductsQuery.ts b/packages/recommend/src/types/RelatedProductsQuery.ts deleted file mode 100644 index d4fa107a5..000000000 --- a/packages/recommend/src/types/RelatedProductsQuery.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { RecommendationsQuery } from './RecommendationsQuery'; - -export type RelatedProductsQuery = Omit; diff --git a/packages/recommend/src/types/TrendingFacetsQuery.ts b/packages/recommend/src/types/TrendingFacetsQuery.ts deleted file mode 100644 index 1c25ec4b8..000000000 --- a/packages/recommend/src/types/TrendingFacetsQuery.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { TrendingQuery } from './TrendingQuery'; - -export type TrendingFacetsQuery = Omit; diff --git a/packages/recommend/src/types/TrendingItemsQuery.ts b/packages/recommend/src/types/TrendingItemsQuery.ts deleted file mode 100644 index fe012604e..000000000 --- a/packages/recommend/src/types/TrendingItemsQuery.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { TrendingQuery } from './TrendingQuery'; - -export type TrendingItemsQuery = Omit; diff --git a/packages/recommend/src/types/TrendingQuery.ts b/packages/recommend/src/types/TrendingQuery.ts deleted file mode 100644 index bce65655e..000000000 --- a/packages/recommend/src/types/TrendingQuery.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { TrendingModel } from './RecommendModel'; -import { RecommendSearchOptions } from './RecommendSearchOptions'; - -export type TrendingQuery = { - /** - * The name of the target index. - */ - readonly indexName: string; - - /** - * The name of the Recommendation model to use. - */ - readonly model: TrendingModel; - - /** - * Threshold for the recommendations confidence score (between 0 and 100). Only recommendations with a greater score are returned. - */ - readonly threshold?: number; - - /** - * How many recommendations to retrieve. - */ - readonly maxRecommendations?: number; - - /** - * List of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/) to send. - */ - readonly queryParameters?: RecommendSearchOptions; - - /** - * List of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/) to send. - * - * Additional filters to use as fallback when there aren’t enough recommendations. - */ - readonly fallbackParameters?: RecommendSearchOptions; - - /** - * Used for trending model - */ - readonly facetName?: string; - - /** - * Used for trending model - */ - readonly facetValue?: string; -}; diff --git a/packages/recommend/src/types/WithRecommendMethods.ts b/packages/recommend/src/types/WithRecommendMethods.ts deleted file mode 100644 index 25320a195..000000000 --- a/packages/recommend/src/types/WithRecommendMethods.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { MultipleQueriesResponse, SearchOptions } from '@algolia/client-search'; -import { RequestOptions } from '@algolia/transporter'; - -import { FrequentlyBoughtTogetherQuery } from './FrequentlyBoughtTogetherQuery'; -import { RecommendationsQuery } from './RecommendationsQuery'; -import { RelatedProductsQuery } from './RelatedProductsQuery'; -import { TrendingFacetsQuery } from './TrendingFacetsQuery'; -import { TrendingItemsQuery } from './TrendingItemsQuery'; - -export type WithRecommendMethods = TType & { - /** - * Returns recommendations. - */ - readonly getRecommendations: ( - queries: readonly RecommendationsQuery[], - requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; - - /** - * Returns [Related Products](https://algolia.com/doc/guides/algolia-ai/recommend/#related-products). - */ - readonly getRelatedProducts: ( - queries: readonly RelatedProductsQuery[], - requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; - - /** - * Returns [Frequently Bought Together](https://algolia.com/doc/guides/algolia-ai/recommend/#frequently-bought-together) products. - */ - readonly getFrequentlyBoughtTogether: ( - queries: readonly FrequentlyBoughtTogetherQuery[], - requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; - - /** - * Returns trending items - */ - readonly getTrendingItems: ( - queries: readonly TrendingItemsQuery[], - requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; - - /** - * Returns trending items per facet - */ - readonly getTrendingFacets: ( - queries: readonly TrendingFacetsQuery[], - requestOptions?: RequestOptions & SearchOptions - ) => Readonly>>; -}; diff --git a/packages/recommend/src/types/index.ts b/packages/recommend/src/types/index.ts deleted file mode 100644 index 19b2cd086..000000000 --- a/packages/recommend/src/types/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './BaseRecommendClient'; -export * from './FrequentlyBoughtTogetherQuery'; -export * from './RecommendClientOptions'; -export * from './RecommendModel'; -export * from './RecommendOptions'; -export * from './RecommendSearchOptions'; -export * from './RecommendationsQuery'; -export * from './RelatedProductsQuery'; -export * from './TrendingFacetsQuery'; -export * from './TrendingQuery'; -export * from './TrendingItemsQuery'; -export * from './WithRecommendMethods'; diff --git a/packages/recommend/tsconfig.json b/packages/recommend/tsconfig.json index 39df687c5..444e8bb64 100644 --- a/packages/recommend/tsconfig.json +++ b/packages/recommend/tsconfig.json @@ -1,10 +1,8 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "declaration": true, - "noEmit": false, - "allowJs": false, - "emitDeclarationOnly": true, - "outFile": "dist/types.d.ts" - } + "outDir": "dist" + }, + "include": ["src", "model", "builds"], + "exclude": ["dist", "node_modules"] } diff --git a/packages/recommend/tsup.config.ts b/packages/recommend/tsup.config.ts new file mode 100644 index 000000000..f78da893c --- /dev/null +++ b/packages/recommend/tsup.config.ts @@ -0,0 +1,67 @@ +import type { Options } from 'tsup'; +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions, getDependencies } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +const nodeOptions: Options = { + ...getBaseNodeOptions(pkg, __dirname), + dts: { entry: { node: 'builds/node.ts' } }, + entry: ['builds/node.ts', 'src/*.ts'], +}; + +const nodeConfigs: Options[] = [ + { + ...nodeOptions, + format: 'cjs', + name: `node ${pkg.name} cjs`, + }, + { + ...nodeOptions, + format: 'esm', + name: `node ${pkg.name} esm`, + }, + { + ...nodeOptions, + format: 'esm', + name: `fetch ${pkg.name} esm`, + dts: { entry: { fetch: 'builds/fetch.ts' } }, + external: getDependencies(pkg, 'fetch'), + entry: ['builds/fetch.ts', 'src/*.ts'], + }, + { + ...nodeOptions, + format: 'esm', + name: `worker ${pkg.name} esm`, + dts: { entry: { worker: 'builds/worker.ts' } }, + external: getDependencies(pkg, 'worker'), + entry: ['builds/worker.ts', 'src/*.ts'], + }, +]; + +const browserOptions: Options = { + ...getBaseBrowserOptions(pkg, __dirname), + globalName: 'recommendClient', +}; + +const browserConfigs: Options[] = [ + { + ...browserOptions, + minify: false, + name: `browser ${pkg.name} esm`, + dts: { entry: { browser: 'builds/browser.ts' } }, + entry: ['builds/browser.ts', 'src/*.ts'], + }, + { + ...browserOptions, + dts: false, + minify: true, + name: `browser ${pkg.name} min esm`, + entry: { 'builds/browser.min': 'builds/browser.ts' }, + external: [], + noExternal: getDependencies(pkg, 'xhr'), + }, +]; + +export default defineConfig([...nodeConfigs, ...browserConfigs]); diff --git a/packages/requester-browser-xhr/api-extractor.json b/packages/requester-browser-xhr/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/requester-browser-xhr/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/requester-browser-xhr/index.d.ts b/packages/requester-browser-xhr/index.d.ts new file mode 100644 index 000000000..518b9831f --- /dev/null +++ b/packages/requester-browser-xhr/index.d.ts @@ -0,0 +1 @@ +export * from './dist/requester.xhr'; diff --git a/packages/requester-browser-xhr/index.js b/packages/requester-browser-xhr/index.js index bc56b3262..c92f673cb 100644 --- a/packages/requester-browser-xhr/index.js +++ b/packages/requester-browser-xhr/index.js @@ -1,2 +1 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/requester-browser-xhr.cjs.js'); +module.exports = require('./dist/requester.xhr.js'); diff --git a/packages/requester-browser-xhr/package.json b/packages/requester-browser-xhr/package.json index f906571a3..3842e4298 100644 --- a/packages/requester-browser-xhr/package.json +++ b/packages/requester-browser-xhr/package.json @@ -1,22 +1,50 @@ { "name": "@algolia/requester-browser-xhr", - "version": "4.13.1", - "private": false, + "version": "5.23.3", "description": "Promise-based request library for browser using xhr.", "repository": { "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript#readme", "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/requester-browser-xhr.esm.js", - "types": "dist/requester-browser-xhr.d.ts", + "author": "Algolia", + "type": "module", + "exports": { + ".": { + "types": "./dist/requester.xhr.d.ts", + "import": "./dist/requester.xhr.js", + "module": "./dist/requester.xhr.js", + "default": "./dist/requester.xhr.js" + }, + "./src/*": "./src/*.ts" + }, + "react-native": "./dist/requester.xhr.js", "files": [ - "index.js", - "dist" + "dist", + "index.d.ts", + "index.js" ], + "scripts": { + "build": "yarn clean && yarn tsup", + "clean": "rm -rf ./dist || true", + "test": "tsc --noEmit && vitest --run", + "test:bundle": "publint . && attw --pack . --ignore-rules cjs-resolves-to-esm" + }, "dependencies": { - "@algolia/requester-common": "4.13.1" + "@algolia/client-common": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "jsdom": "26.0.0", + "publint": "0.3.10", + "tsup": "8.4.0", + "typescript": "5.8.3", + "vitest": "3.1.1", + "xhr-mock": "2.5.1" + }, + "engines": { + "node": ">= 14.0.0" } } diff --git a/packages/requester-browser-xhr/src/__tests__/browser-xhr-requester.test.ts b/packages/requester-browser-xhr/src/__tests__/browser-xhr-requester.test.ts new file mode 100644 index 000000000..188619874 --- /dev/null +++ b/packages/requester-browser-xhr/src/__tests__/browser-xhr-requester.test.ts @@ -0,0 +1,229 @@ +import type http from 'http'; +import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, test } from 'vitest'; +import type { MockRequest, MockResponse } from 'xhr-mock'; +import mock from 'xhr-mock'; + +import type { EndRequest } from '@algolia/client-common'; + +import { createXhrRequester } from '../..'; +import { + BASE_URL, + createTestServer, + getStringifiedBody, + headers, + requestStub, + timeoutRequest, +} from '../../../../tests/utils'; + +const requester = createXhrRequester(); + +describe('status code handling', () => { + beforeEach(() => { + mock.setup(); + }); + afterEach(() => { + mock.teardown(); + }); + + test('sends requests', async () => { + mock.post(BASE_URL, (req: MockRequest, res: MockResponse): MockResponse => { + expect(req.method()).toEqual('POST'); + expect(req.header('content-type')).toEqual('text/plain'); + expect(req.body()).toEqual(JSON.stringify({ foo: 'bar' })); + + return res.status(200); + }); + + await requester.send(requestStub); + }); + + test('resolves status 200', async () => { + const body = getStringifiedBody(); + + mock.post(BASE_URL, { + status: 200, + body: requestStub.data, + }); + + const response = await requester.send(requestStub); + + expect(response.status).toBe(200); + expect(response.content).toBe(body); + expect(response.isTimedOut).toBe(false); + }); + + test('resolves status 300', async () => { + const reason = 'Multiple Choices'; + + mock.post(BASE_URL, { + status: 300, + reason, + }); + + const response = await requester.send(requestStub); + + expect(response.status).toBe(300); + expect(response.content).toBe(''); // No body returned here on xhr + expect(response.isTimedOut).toBe(false); + }); + + test('resolves status 400', async () => { + const body = getStringifiedBody({ + message: 'Invalid Application-Id or API-Key', + }); + + mock.post(BASE_URL, { + status: 400, + body, + }); + + const response = await requester.send(requestStub); + + expect(response.status).toBe(400); + expect(response.content).toBe(body); + expect(response.isTimedOut).toBe(false); + }); + + test('handles the protocol', async () => { + const body = getStringifiedBody(); + + mock.post('http://localhost/', { + status: 200, + body, + }); + + const response = await requester.send({ + ...requestStub, + url: 'http://localhost', + }); + + expect(response.status).toBe(200); + expect(response.content).toBe(body); + expect(response.isTimedOut).toBe(false); + }); +}); + +describe('timeout handling', () => { + let server: http.Server; + // setup http server to test timeout + beforeAll(() => { + server = createTestServer(); + + server.listen('1111'); + }); + + afterAll( + () => + new Promise((done) => { + done(); + }), + ); + + test('connection timeouts with the given 1 seconds connection timeout', async () => { + const before = Date.now(); + const response = await requester.send({ + ...timeoutRequest, + connectTimeout: 1000, + url: 'http://localhost:1111/connection_timeout', + }); + + const now = Date.now(); + + expect(response.content).toBe('Connection timeout'); + expect(now - before).toBeGreaterThanOrEqual(999); + expect(now - before).toBeLessThanOrEqual(1200); + }); + + test('connection timeouts with the given 2 seconds connection timeout', async () => { + const before = Date.now(); + const response = await requester.send({ + ...timeoutRequest, + connectTimeout: 2000, + url: 'http://localhost:1111/connection_timeout', + }); + + const now = Date.now(); + + expect(response.content).toBe('Connection timeout'); + expect(now - before).toBeGreaterThanOrEqual(1990); + expect(now - before).toBeLessThanOrEqual(2200); + }); + + test("socket timeouts if response don't appears before the timeout with 2 seconds timeout", async () => { + const before = Date.now(); + + const response = await requester.send({ + ...timeoutRequest, + responseTimeout: 2000, + url: 'http://localhost:1111', + }); + + const now = Date.now(); + + expect(response.content).toBe('Socket timeout'); + expect(now - before).toBeGreaterThanOrEqual(1990); + expect(now - before).toBeLessThanOrEqual(2200); + }); + + test("socket timeouts if response don't appears before the timeout with 3 seconds timeout", async () => { + const before = Date.now(); + + const response = await requester.send({ + ...timeoutRequest, + responseTimeout: 3000, + url: 'http://localhost:1111', + }); + + const now = Date.now(); + + expect(response.content).toBe('Socket timeout'); + expect(now - before).toBeGreaterThanOrEqual(2999); + expect(now - before).toBeLessThanOrEqual(3200); + }); + + test('do not timeouts if response appears before the timeout', async () => { + const before = Date.now(); + const response = await requester.send({ + ...requestStub, + responseTimeout: 6000, + url: 'http://localhost:1111', + }); + + const now = Date.now(); + + expect(response.isTimedOut).toBe(false); + expect(response.status).toBe(200); + expect(response.content).toBe('{"foo": "bar"}'); + expect(now - before).toBeGreaterThanOrEqual(4999); + expect(now - before).toBeLessThanOrEqual(5200); + }, 10000); // This is a long-running test, default server timeout is set to 5000ms +}); + +describe('error handling', () => { + test('resolves dns not found', async () => { + const request: EndRequest = { + url: 'https://this-dont-exist.algolia.com', + method: 'POST', + headers, + data: getStringifiedBody(), + responseTimeout: 2000, + connectTimeout: 1000, + }; + + const response = await requester.send(request); + + expect(response.status).toBe(0); + expect(response.content).toBe('Network request failed'); + expect(response.isTimedOut).toBe(false); + }); + + test('resolves general network errors', async () => { + mock.post(BASE_URL, () => Promise.reject(new Error('This is a general error'))); + + const response = await requester.send(requestStub); + + expect(response.status).toBe(0); + expect(response.content).toBe('Network request failed'); + expect(response.isTimedOut).toBe(false); + }); +}); diff --git a/packages/requester-browser-xhr/src/__tests__/unit/browser-xhr-requester.test.ts b/packages/requester-browser-xhr/src/__tests__/unit/browser-xhr-requester.test.ts deleted file mode 100644 index afc3c0a16..000000000 --- a/packages/requester-browser-xhr/src/__tests__/unit/browser-xhr-requester.test.ts +++ /dev/null @@ -1,226 +0,0 @@ -import { MethodEnum, Request } from '@algolia/requester-common'; -import mock, { MockRequest, MockResponse } from 'xhr-mock'; - -import { createBrowserXhrRequester } from '../..'; - -const requester = createBrowserXhrRequester(); - -const timeoutRequest: Request = { - url: 'missing-url-here', - data: '', - headers: {}, - method: 'GET', - responseTimeout: 2, - connectTimeout: 1, -}; - -const requestStub = { - url: 'https://algolia-dns.net/foo?x-algolia-header=bar', - method: MethodEnum.Post, - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - data: JSON.stringify({ foo: 'bar' }), - responseTimeout: 1, - connectTimeout: 2, -}; - -describe('status code handling', () => { - beforeEach(() => mock.setup()); - afterEach(() => mock.teardown()); - - it('sends requests', async () => { - expect.assertions(3); - - mock.post( - 'https://algolia-dns.net/foo?x-algolia-header=bar', - (req: MockRequest, res: MockResponse): MockResponse => { - expect(req.method()).toEqual('POST'); - - expect(req.header('Content-Type')).toEqual('application/x-www-form-urlencoded'); - - expect(req.body()).toEqual(JSON.stringify({ foo: 'bar' })); - - return res.status(200); - } - ); - - await requester.send(requestStub); - }); - - it('resolves status 200', async () => { - const body = JSON.stringify({ foo: 'bar' }); - - mock.post('https://algolia-dns.net/foo?x-algolia-header=bar', { - status: 200, - body, - }); - - const response = await requester.send(requestStub); - - expect(response.status).toBe(200); - expect(response.content).toBe(body); - expect(response.isTimedOut).toBe(false); - }); - - it('resolves status 300', async () => { - const reason = 'Multiple Choices'; - - mock.post('https://algolia-dns.net/foo?x-algolia-header=bar', { - status: 300, - reason, - }); - - const response = await requester.send(requestStub); - - expect(response.status).toBe(300); - expect(response.content).toBe(''); // No body returned here on xhr - expect(response.isTimedOut).toBe(false); - }); - - it('resolves status 400', async () => { - const body = { message: 'Invalid Application-Id or API-Key' }; - - mock.post('https://algolia-dns.net/foo?x-algolia-header=bar', { - status: 400, - body: JSON.stringify(body), - }); - - const response = await requester.send(requestStub); - - expect(response.status).toBe(400); - expect(response.content).toBe(JSON.stringify(body)); - expect(response.isTimedOut).toBe(false); - }); - - it('handles the protocol', async () => { - const body = JSON.stringify({ foo: 'bar' }); - - mock.post('http://localhost/', { - status: 200, - body, - }); - - const response = await requester.send({ - ...requestStub, - url: 'http://localhost', - }); - - expect(response.status).toBe(200); - expect(response.content).toBe('{"foo":"bar"}'); - expect(response.isTimedOut).toBe(false); - }); -}); - -describe('timeout handling', () => { - it('connection timeouts with the given 1 seconds connection timeout', async () => { - const before = Date.now(); - const response = await requester.send({ - ...timeoutRequest, - ...{ connectTimeout: 1, url: 'http://www.google.com:81' }, - }); - - const now = Date.now(); - - expect(response.content).toBe('Connection timeout'); - expect(now - before).toBeGreaterThan(999); - expect(now - before).toBeLessThan(1200); - }); - - it('conection timeouts with the given 2 seconds connection timeout', async () => { - const before = Date.now(); - const response = await requester.send({ - ...timeoutRequest, - ...{ connectTimeout: 2, url: 'http://www.google.com:81' }, - }); - - const now = Date.now(); - - expect(response.content).toBe('Connection timeout'); - expect(now - before).toBeGreaterThan(1990); - expect(now - before).toBeLessThan(2200); - }); - - it('socket timeouts if response dont appears before the timeout with 2 seconds timeout', async () => { - const before = Date.now(); - - const response = await requester.send({ - ...timeoutRequest, - ...{ responseTimeout: 2, url: 'http://localhost:1111/' }, - }); - - const now = Date.now(); - - expect(now - before).toBeGreaterThan(1990); - expect(now - before).toBeLessThan(2200); - expect(response.content).toBe('Socket timeout'); - }); - - it('socket timeouts if response dont appears before the timeout with 3 seconds timeout', async () => { - const before = Date.now(); - const response = await requester.send({ - ...timeoutRequest, - ...{ - responseTimeout: 3, - url: 'http://localhost:1111', - }, - }); - - const now = Date.now(); - - expect(response.content).toBe('Socket timeout'); - expect(now - before).toBeGreaterThan(2999); - expect(now - before).toBeLessThan(3200); - }); - - it('do not timeouts if response appears before the timeout', async () => { - const request = Object.assign({}, requestStub); - const before = Date.now(); - const response = await requester.send({ - ...request, - url: 'http://localhost:1111', - responseTimeout: 6, // the fake server sleeps for 5 seconds... - }); - - const now = Date.now(); - - expect(response.isTimedOut).toBe(false); - expect(response.status).toBe(200); - expect(response.content).toBe('{"foo": "bar"}'); - expect(now - before).toBeGreaterThan(4999); - expect(now - before).toBeLessThan(5200); - }); -}); - -describe('error handling', () => { - it('resolves dns not found', async () => { - const request = { - url: 'https://this-dont-exist.algolia.com', - method: MethodEnum.Post, - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - data: JSON.stringify({ foo: 'bar' }), - responseTimeout: 2, - connectTimeout: 1, - }; - - const response = await requester.send(request); - - expect(response.status).toBe(0); - expect(response.content).toBe('Network request failed'); - expect(response.isTimedOut).toBe(false); - }); - - it('resolves general network errors', async () => { - mock.post('https://algolia-dns.net/foo?x-algolia-header=bar', () => - Promise.reject(new Error('This is a general error')) - ); - - const response = await requester.send(requestStub); - - expect(response.status).toBe(0); - expect(response.content).toBe('Network request failed'); - expect(response.isTimedOut).toBe(false); - }); -}); diff --git a/packages/requester-browser-xhr/src/createBrowserXhrRequester.ts b/packages/requester-browser-xhr/src/createBrowserXhrRequester.ts deleted file mode 100644 index 94911dc0b..000000000 --- a/packages/requester-browser-xhr/src/createBrowserXhrRequester.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Request, Requester, Response } from '@algolia/requester-common'; - -export function createBrowserXhrRequester(): Requester { - return { - send(request: Request): Readonly> { - return new Promise((resolve): void => { - const baseRequester = new XMLHttpRequest(); - baseRequester.open(request.method, request.url, true); - - Object.keys(request.headers).forEach(key => - baseRequester.setRequestHeader(key, request.headers[key]) - ); - - const createTimeout = (timeout: number, content: string): NodeJS.Timeout => { - return setTimeout(() => { - baseRequester.abort(); - - resolve({ - status: 0, - content, - isTimedOut: true, - }); - }, timeout * 1000); - }; - - const connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout'); - - // eslint-disable-next-line functional/no-let - let responseTimeout: NodeJS.Timeout | undefined; - - // eslint-disable-next-line functional/immutable-data - baseRequester.onreadystatechange = () => { - if (baseRequester.readyState > baseRequester.OPENED && responseTimeout === undefined) { - clearTimeout(connectTimeout); - - responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout'); - } - }; - - // eslint-disable-next-line functional/immutable-data - baseRequester.onerror = () => { - // istanbul ignore next - if (baseRequester.status === 0) { - clearTimeout(connectTimeout); - clearTimeout(responseTimeout as NodeJS.Timeout); - - resolve({ - content: baseRequester.responseText || 'Network request failed', - status: baseRequester.status, - isTimedOut: false, - }); - } - }; - - // eslint-disable-next-line functional/immutable-data - baseRequester.onload = () => { - clearTimeout(connectTimeout); - clearTimeout(responseTimeout as NodeJS.Timeout); - - resolve({ - content: baseRequester.responseText, - status: baseRequester.status, - isTimedOut: false, - }); - }; - - baseRequester.send(request.data); - }); - }, - }; -} diff --git a/packages/requester-browser-xhr/src/createXhrRequester.ts b/packages/requester-browser-xhr/src/createXhrRequester.ts new file mode 100644 index 000000000..5f434a9c1 --- /dev/null +++ b/packages/requester-browser-xhr/src/createXhrRequester.ts @@ -0,0 +1,67 @@ +import type { EndRequest, Requester, Response } from '@algolia/client-common'; + +type Timeout = ReturnType; + +export function createXhrRequester(): Requester { + function send(request: EndRequest): Promise { + return new Promise((resolve) => { + const baseRequester = new XMLHttpRequest(); + baseRequester.open(request.method, request.url, true); + + Object.keys(request.headers).forEach((key) => baseRequester.setRequestHeader(key, request.headers[key])); + + const createTimeout = (timeout: number, content: string): Timeout => { + return setTimeout(() => { + baseRequester.abort(); + + resolve({ + status: 0, + content, + isTimedOut: true, + }); + }, timeout); + }; + + const connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout'); + + let responseTimeout: Timeout | undefined; + + baseRequester.onreadystatechange = (): void => { + if (baseRequester.readyState > baseRequester.OPENED && responseTimeout === undefined) { + clearTimeout(connectTimeout); + + responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout'); + } + }; + + baseRequester.onerror = (): void => { + // istanbul ignore next + if (baseRequester.status === 0) { + clearTimeout(connectTimeout); + clearTimeout(responseTimeout!); + + resolve({ + content: baseRequester.responseText || 'Network request failed', + status: baseRequester.status, + isTimedOut: false, + }); + } + }; + + baseRequester.onload = (): void => { + clearTimeout(connectTimeout); + clearTimeout(responseTimeout!); + + resolve({ + content: baseRequester.responseText, + status: baseRequester.status, + isTimedOut: false, + }); + }; + + baseRequester.send(request.data); + }); + } + + return { send }; +} diff --git a/packages/requester-browser-xhr/src/index.ts b/packages/requester-browser-xhr/src/index.ts index 8655e57e6..326e279e7 100644 --- a/packages/requester-browser-xhr/src/index.ts +++ b/packages/requester-browser-xhr/src/index.ts @@ -1,5 +1 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createBrowserXhrRequester'; +export * from './createXhrRequester'; diff --git a/packages/requester-browser-xhr/tsconfig.json b/packages/requester-browser-xhr/tsconfig.json new file mode 100644 index 000000000..f6efa8845 --- /dev/null +++ b/packages/requester-browser-xhr/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "types": ["node", "vitest/globals"], + "outDir": "dist", + "skipLibCheck": true + }, + "include": ["src"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/requester-browser-xhr/tsup.config.ts b/packages/requester-browser-xhr/tsup.config.ts new file mode 100644 index 000000000..f1c04700b --- /dev/null +++ b/packages/requester-browser-xhr/tsup.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +export default defineConfig({ + ...getBaseBrowserOptions(pkg, __dirname), + minify: true, + globalName: 'requesterxhr', + entry: { 'requester.xhr': 'src/index.ts' }, + dts: { entry: { 'requester.xhr': 'src/index.ts' } }, +}); diff --git a/packages/requester-browser-xhr/vitest.config.ts b/packages/requester-browser-xhr/vitest.config.ts new file mode 100644 index 000000000..f5a90d06c --- /dev/null +++ b/packages/requester-browser-xhr/vitest.config.ts @@ -0,0 +1,5 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { environment: 'jsdom' }, +}); diff --git a/packages/requester-common/api-extractor.json b/packages/requester-common/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/requester-common/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/requester-common/index.js b/packages/requester-common/index.js deleted file mode 100644 index 0ced494c4..000000000 --- a/packages/requester-common/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/requester-common.cjs.js'); diff --git a/packages/requester-common/package.json b/packages/requester-common/package.json deleted file mode 100644 index ee620c0aa..000000000 --- a/packages/requester-common/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "@algolia/requester-common", - "version": "4.13.1", - "private": false, - "description": "Common interfaces for promise-based request libraries", - "repository": { - "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-js.git" - }, - "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/requester-common.esm.js", - "types": "dist/requester-common.d.ts", - "files": [ - "index.js", - "dist" - ] -} diff --git a/packages/requester-common/src/index.ts b/packages/requester-common/src/index.ts deleted file mode 100644 index e067cd20c..000000000 --- a/packages/requester-common/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './types/index'; diff --git a/packages/requester-common/src/types/Destroyable.ts b/packages/requester-common/src/types/Destroyable.ts deleted file mode 100644 index 010b30f45..000000000 --- a/packages/requester-common/src/types/Destroyable.ts +++ /dev/null @@ -1,10 +0,0 @@ -export type Destroyable = { - /** - * Destroy any sockets that are currently in use by the agent. - * - * It is usually not necessary to do this. However, if using an agent with keepAlive enabled, then - * it is best to explicitly shut down the agent when it will no longer be used. Otherwise, sockets - * may hang open for quite a long time before the server terminates them. - */ - readonly destroy: () => Readonly>; -}; diff --git a/packages/requester-common/src/types/MethodType.ts b/packages/requester-common/src/types/MethodType.ts deleted file mode 100644 index 325cf39c5..000000000 --- a/packages/requester-common/src/types/MethodType.ts +++ /dev/null @@ -1,8 +0,0 @@ -export const MethodEnum: Readonly> = { - Delete: 'DELETE', - Get: 'GET', - Post: 'POST', - Put: 'PUT', -}; - -export type MethodType = 'DELETE' | 'GET' | 'POST' | 'PUT'; diff --git a/packages/requester-common/src/types/Request.ts b/packages/requester-common/src/types/Request.ts deleted file mode 100644 index 45f75178d..000000000 --- a/packages/requester-common/src/types/Request.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { MethodType } from '.'; - -export type Request = { - /** - * The headers of the request. - */ - readonly headers: Readonly>; - - /** - * The method of the request. `GET`, etc. - */ - readonly method: MethodType; - - /** - * The complete url of the request, with the protocol. - */ - readonly url: string; - - /** - * The timeout to stablish a connection with the server. - */ - readonly connectTimeout: number; - - /** - * The timeout to receive the response. - */ - readonly responseTimeout: number; - - /** - * The data to be transfered to the server. - */ - readonly data: string | undefined; -}; diff --git a/packages/requester-common/src/types/Requester.ts b/packages/requester-common/src/types/Requester.ts deleted file mode 100644 index 81c2c988b..000000000 --- a/packages/requester-common/src/types/Requester.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Request, Response } from '.'; - -export type Requester = { - /** - * Sends the given `request` to the server. - */ - readonly send: (request: Request) => Readonly>; -}; diff --git a/packages/requester-common/src/types/Response.ts b/packages/requester-common/src/types/Response.ts deleted file mode 100644 index 963a9741c..000000000 --- a/packages/requester-common/src/types/Response.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type Response = { - /** - * The raw response from the server. - */ - content: string; - - /** - * If the request timeouted. - */ - isTimedOut: boolean; - - /** - * The http status code. - */ - status: number; -}; diff --git a/packages/requester-common/src/types/index.ts b/packages/requester-common/src/types/index.ts deleted file mode 100644 index 6da17b597..000000000 --- a/packages/requester-common/src/types/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './Destroyable'; -export * from './MethodType'; -export * from './Request'; -export * from './Requester'; -export * from './Response'; diff --git a/packages/requester-fetch/index.d.ts b/packages/requester-fetch/index.d.ts new file mode 100644 index 000000000..d4b08a1a7 --- /dev/null +++ b/packages/requester-fetch/index.d.ts @@ -0,0 +1 @@ +export * from './dist/requester.fetch.node'; diff --git a/packages/requester-fetch/index.js b/packages/requester-fetch/index.js new file mode 100644 index 000000000..97fd6d402 --- /dev/null +++ b/packages/requester-fetch/index.js @@ -0,0 +1 @@ +module.exports = require('./dist/requester.fetch.node.cjs'); diff --git a/packages/requester-fetch/package.json b/packages/requester-fetch/package.json new file mode 100644 index 000000000..c56ce9bff --- /dev/null +++ b/packages/requester-fetch/package.json @@ -0,0 +1,66 @@ +{ + "name": "@algolia/requester-fetch", + "version": "5.23.3", + "description": "Promise-based request library using Fetch.", + "repository": { + "type": "git", + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript#readme", + "license": "MIT", + "author": "Algolia", + "type": "module", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/requester.fetch.node.d.ts", + "module": "./dist/requester.fetch.node.d.ts", + "require": "./dist/requester.fetch.node.d.cts" + }, + "import": "./dist/requester.fetch.node.js", + "module": "./dist/requester.fetch.node.js", + "require": "./dist/requester.fetch.node.cjs" + }, + "worker": { + "types": "./dist/requester.fetch.node.d.ts", + "default": "./dist/requester.fetch.node.js" + }, + "default": { + "types": "./dist/requester.fetch.browser.d.ts", + "module": "./dist/requester.fetch.browser.js", + "import": "./dist/requester.fetch.browser.js", + "default": "./dist/requester.fetch.browser.js" + } + }, + "./src/*": "./src/*.ts" + }, + "react-native": "./dist/requester.fetch.browser.js", + "files": [ + "dist", + "index.d.ts", + "index.js" + ], + "scripts": { + "build": "yarn clean && yarn tsup", + "clean": "rm -rf ./dist || true", + "test": "tsc --noEmit && vitest --run", + "test:bundle": "publint . && attw --pack ." + }, + "dependencies": { + "@algolia/client-common": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "cross-fetch": "4.1.0", + "nock": "14.0.3", + "publint": "0.3.10", + "tsup": "8.4.0", + "typescript": "5.8.3", + "vitest": "3.1.1" + }, + "engines": { + "node": ">= 14.0.0" + } +} diff --git a/packages/requester-fetch/src/__tests__/fetch-requester.test.ts b/packages/requester-fetch/src/__tests__/fetch-requester.test.ts new file mode 100644 index 000000000..91be2e6aa --- /dev/null +++ b/packages/requester-fetch/src/__tests__/fetch-requester.test.ts @@ -0,0 +1,278 @@ +import crossFetch from 'cross-fetch'; +import type http from 'http'; +import nock from 'nock'; +import { Readable } from 'stream'; +import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, test } from 'vitest'; + +import type { EndRequest } from '@algolia/client-common'; + +import { createFetchRequester } from '../..'; +import { + createTestServer, + getStringifiedBody, + headers, + requestStub, + testQueryBaseUrl, + testQueryHeader, + timeoutRequest, +} from '../../../../tests/utils'; + +const originalFetch = window.fetch; + +beforeEach(() => { + window.fetch = crossFetch; +}); + +afterEach(() => { + window.fetch = originalFetch; +}); + +const requester = createFetchRequester(); + +describe('status code handling', () => { + test('sends requests', async () => { + const body = getStringifiedBody(); + + nock(testQueryBaseUrl, { reqheaders: headers }).post('/foo').query(testQueryHeader).reply(200, body); + + const response = await requester.send(requestStub); + + expect(response.content).toEqual(body); + }); + + test('resolves status 200', async () => { + const body = getStringifiedBody(); + + nock(testQueryBaseUrl, { reqheaders: headers }).post('/foo').query(testQueryHeader).reply(200, body); + + const response = await requester.send(requestStub); + + expect(response.status).toBe(200); + expect(response.content).toBe(body); + expect(response.isTimedOut).toBe(false); + }); + + test('resolves status 300', async () => { + const reason = 'Multiple Choices'; + + nock(testQueryBaseUrl, { reqheaders: headers }).post('/foo').query(testQueryHeader).reply(300, reason); + + const response = await requester.send(requestStub); + + expect(response.status).toBe(300); + expect(response.content).toBe(reason); + expect(response.isTimedOut).toBe(false); + }); + + test('resolves status 400', async () => { + const body = getStringifiedBody({ + message: 'Invalid Application-Id or API-Key', + }); + + nock(testQueryBaseUrl, { reqheaders: headers }).post('/foo').query(testQueryHeader).reply(400, body); + + const response = await requester.send(requestStub); + + expect(response.status).toBe(400); + expect(response.content).toBe(body); + expect(response.isTimedOut).toBe(false); + }); + + test('handles chunked responses inside unicode character boundaries', async () => { + const data = Buffer.from('äöü'); + + // create a test response stream that is chunked inside a unicode character + function* generate() { + yield data.subarray(0, 3); + yield data.subarray(3); + } + + const testStream = Readable.from(generate()); + + nock(testQueryBaseUrl, { reqheaders: headers }).post('/foo').query(testQueryHeader).reply(200, testStream); + + const response = await requester.send(requestStub); + + expect(response.content).toEqual(data.toString()); + }); +}); + +describe('timeout handling', () => { + let server: http.Server; + // setup http server to test timeout + beforeAll(() => { + server = createTestServer(); + + server.listen('1113'); + }); + + afterAll( + () => + new Promise((done) => { + done(); + }), + ); + + test('timeouts with the given 1 seconds connection timeout', async () => { + const before = Date.now(); + const response = await requester.send({ + ...timeoutRequest, + connectTimeout: 1000, + url: 'http://localhost:1113/connection_timeout', + }); + + const now = Date.now(); + + expect(response.content).toBe('Connection timeout'); + expect(now - before).toBeGreaterThanOrEqual(999); + expect(now - before).toBeLessThanOrEqual(1200); + }); + + test('connection timeouts with the given 2 seconds connection timeout', async () => { + const before = Date.now(); + const response = await requester.send({ + ...timeoutRequest, + connectTimeout: 2000, + url: 'http://localhost:1113/connection_timeout', + }); + + const now = Date.now(); + + expect(response.content).toBe('Connection timeout'); + expect(now - before).toBeGreaterThanOrEqual(1999); + expect(now - before).toBeLessThanOrEqual(2200); + }); + + test("socket timeouts if response don't appears before the timeout with 2 seconds timeout", async () => { + const before = Date.now(); + + const response = await requester.send({ + ...timeoutRequest, + responseTimeout: 2000, + url: 'http://localhost:1113', + }); + + const now = Date.now(); + + expect(response.content).toBe('Socket timeout'); + expect(now - before).toBeGreaterThanOrEqual(1999); + expect(now - before).toBeLessThanOrEqual(2200); + }); + + test("socket timeouts if response don't appears before the timeout with 3 seconds timeout", async () => { + const before = Date.now(); + const response = await requester.send({ + ...timeoutRequest, + responseTimeout: 3000, + url: 'http://localhost:1113', + }); + + const now = Date.now(); + + expect(response.content).toBe('Socket timeout'); + expect(now - before).toBeGreaterThanOrEqual(2999); + expect(now - before).toBeLessThanOrEqual(3200); + }); + + test('do not timeouts if response appears before the timeout', async () => { + const before = Date.now(); + const response = await requester.send({ + ...requestStub, + url: 'http://localhost:1113', + responseTimeout: 6000, + }); + + const now = Date.now(); + + expect(response.isTimedOut).toBe(false); + expect(response.status).toBe(200); + expect(response.content).toBe('{"foo": "bar"}'); + expect(now - before).toBeGreaterThanOrEqual(4999); + expect(now - before).toBeLessThanOrEqual(5200); + }, 10000); // This is a long-running test, default server timeout is set to 5000ms +}); + +describe('error handling', (): void => { + test('resolves dns not found', async () => { + const request: EndRequest = { + url: 'https://this-dont-exist.algolia.com', + method: 'POST', + headers, + data: getStringifiedBody(), + responseTimeout: 2000, + connectTimeout: 1000, + }; + + const response = await requester.send(request); + + expect(response.status).toBe(0); + expect(response.content).toContain(''); + expect(response.isTimedOut).toBe(false); + }); + + test('resolves general network errors', async () => { + nock(testQueryBaseUrl, { reqheaders: headers }) + .post('/foo') + .query(testQueryHeader) + .replyWithError('This is a general error'); + + const response = await requester.send(requestStub); + + expect(response.status).toBe(0); + expect(response.content).toBe( + 'request to https://algolia-dns.net/foo?x-algolia-header=bar failed, reason: This is a general error', + ); + expect(response.isTimedOut).toBe(false); + }); +}); + +describe('requesterOptions', () => { + test('allows to pass requesterOptions', async () => { + const body = getStringifiedBody(); + const requesterTmp = createFetchRequester({ + requesterOptions: { + headers: testQueryHeader, + }, + }); + + nock(testQueryBaseUrl, { + reqheaders: { + ...headers, + ...testQueryHeader, + }, + }) + .post('/foo') + .query(testQueryHeader) + .reply(200, body); + + const response = await requesterTmp.send(requestStub); + + expect(response.status).toBe(200); + expect(response.content).toBe(body); + }); + + test('allows overriding default requesterOptions', async () => { + const body = getStringifiedBody(); + const requesterTmp = createFetchRequester({ + requesterOptions: { + headers: testQueryHeader, + mode: 'no-cors', + }, + }); + + nock(testQueryBaseUrl, { + reqheaders: { + ...headers, + ...testQueryHeader, + }, + }) + .post('/foo') + .query(testQueryHeader) + .reply(200, body); + + const response = await requesterTmp.send(requestStub); + + expect(response.status).toBe(200); + expect(response.content).toBe(body); + }); +}); diff --git a/packages/requester-fetch/src/createFetchRequester.ts b/packages/requester-fetch/src/createFetchRequester.ts new file mode 100644 index 000000000..df66e7bbb --- /dev/null +++ b/packages/requester-fetch/src/createFetchRequester.ts @@ -0,0 +1,74 @@ +import type { Response as AlgoliaResponse, EndRequest, Requester } from '@algolia/client-common'; + +function isAbortError(error: unknown): boolean { + return error instanceof Error && error.name === 'AbortError'; +} + +function getErrorMessage(error: unknown, abortContent: string): string { + if (isAbortError(error)) { + return abortContent; + } + return error instanceof Error ? error.message : 'Network request failed'; +} + +export type FetchRequesterOptions = { + readonly requesterOptions?: RequestInit; +}; + +export function createFetchRequester({ requesterOptions = {} }: FetchRequesterOptions = {}): Requester { + async function send(request: EndRequest): Promise { + const abortController = new AbortController(); + const signal = abortController.signal; + + const createTimeout = (timeout: number): NodeJS.Timeout => { + return setTimeout(() => { + abortController.abort(); + }, timeout); + }; + + const connectTimeout = createTimeout(request.connectTimeout); + + let fetchRes: Response; + try { + fetchRes = await fetch(request.url, { + method: request.method, + body: request.data || null, + redirect: 'manual', + signal, + ...requesterOptions, + headers: { + ...requesterOptions.headers, + ...request.headers, + }, + }); + } catch (error) { + return { + status: 0, + content: getErrorMessage(error, 'Connection timeout'), + isTimedOut: isAbortError(error), + }; + } + + clearTimeout(connectTimeout); + + createTimeout(request.responseTimeout); + + try { + const content = await fetchRes.text(); + + return { + content, + isTimedOut: false, + status: fetchRes.status, + }; + } catch (error) { + return { + status: 0, + content: getErrorMessage(error, 'Socket timeout'), + isTimedOut: isAbortError(error), + }; + } + } + + return { send }; +} diff --git a/packages/requester-fetch/src/index.ts b/packages/requester-fetch/src/index.ts new file mode 100644 index 000000000..7d1445702 --- /dev/null +++ b/packages/requester-fetch/src/index.ts @@ -0,0 +1 @@ +export * from './createFetchRequester'; diff --git a/packages/requester-fetch/tsconfig.json b/packages/requester-fetch/tsconfig.json new file mode 100644 index 000000000..f6efa8845 --- /dev/null +++ b/packages/requester-fetch/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "types": ["node", "vitest/globals"], + "outDir": "dist", + "skipLibCheck": true + }, + "include": ["src"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/requester-fetch/tsup.config.ts b/packages/requester-fetch/tsup.config.ts new file mode 100644 index 000000000..acd8b28b9 --- /dev/null +++ b/packages/requester-fetch/tsup.config.ts @@ -0,0 +1,30 @@ +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +export default defineConfig([ + { + ...getBaseNodeOptions(pkg, __dirname), + format: 'cjs', + name: 'node cjs', + entry: { 'requester.fetch.node': 'src/index.ts' }, + dts: { entry: { 'requester.fetch.node': 'src/index.ts' } }, + }, + { + ...getBaseNodeOptions(pkg, __dirname), + format: 'esm', + name: 'node esm', + entry: { 'requester.fetch.node': 'src/index.ts' }, + dts: { entry: { 'requester.fetch.node': 'src/index.ts' } }, + }, + { + ...getBaseBrowserOptions(pkg, __dirname), + minify: true, + name: 'browser esm', + entry: { 'requester.fetch.browser': 'src/index.ts' }, + dts: { entry: { 'requester.fetch.browser': 'src/index.ts' } }, + globalName: 'requesterfetch', + }, +]); diff --git a/packages/requester-fetch/vitest.config.ts b/packages/requester-fetch/vitest.config.ts new file mode 100644 index 000000000..f5a90d06c --- /dev/null +++ b/packages/requester-fetch/vitest.config.ts @@ -0,0 +1,5 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { environment: 'jsdom' }, +}); diff --git a/packages/requester-node-http/api-extractor.json b/packages/requester-node-http/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/requester-node-http/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/requester-node-http/index.d.ts b/packages/requester-node-http/index.d.ts new file mode 100644 index 000000000..90aa3b2c6 --- /dev/null +++ b/packages/requester-node-http/index.d.ts @@ -0,0 +1 @@ +export * from './dist/requester.http'; diff --git a/packages/requester-node-http/index.js b/packages/requester-node-http/index.js index fb864517c..2f27540e5 100644 --- a/packages/requester-node-http/index.js +++ b/packages/requester-node-http/index.js @@ -1,2 +1 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/requester-node-http.cjs.js'); +module.exports = require('./dist/requester.http.cjs'); diff --git a/packages/requester-node-http/package.json b/packages/requester-node-http/package.json index 6117c9ba8..a6e343597 100644 --- a/packages/requester-node-http/package.json +++ b/packages/requester-node-http/package.json @@ -1,22 +1,52 @@ { "name": "@algolia/requester-node-http", - "version": "4.13.1", - "private": false, + "version": "5.23.3", "description": "Promise-based request library for node using the native http module.", "repository": { "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-javascript.git" + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript#readme", "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/requester-node-http.esm.js", - "types": "dist/requester-node-http.d.ts", + "author": "Algolia", + "type": "module", "files": [ - "index.js", - "dist" + "dist", + "index.d.ts", + "index.js" ], + "exports": { + ".": { + "types": { + "import": "./dist/requester.http.d.ts", + "module": "./dist/requester.http.d.ts", + "require": "./dist/requester.http.d.cts" + }, + "import": "./dist/requester.http.js", + "module": "./dist/requester.http.js", + "require": "./dist/requester.http.cjs" + }, + "./src/*": "./src/*.ts" + }, + "scripts": { + "build": "yarn clean && yarn tsup", + "clean": "rm -rf ./dist || true", + "test": "tsc --noEmit && vitest --run", + "test:bundle": "publint . && attw --pack ." + }, "dependencies": { - "@algolia/requester-common": "4.13.1" + "@algolia/client-common": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "nock": "14.0.3", + "publint": "0.3.10", + "tsup": "8.4.0", + "typescript": "5.8.3", + "vitest": "3.1.1" + }, + "engines": { + "node": ">= 14.0.0" } } diff --git a/packages/requester-node-http/src/__tests__/node-http-requester.test.ts b/packages/requester-node-http/src/__tests__/node-http-requester.test.ts new file mode 100644 index 000000000..9ff3e9ca0 --- /dev/null +++ b/packages/requester-node-http/src/__tests__/node-http-requester.test.ts @@ -0,0 +1,281 @@ +import http from 'http'; +import https from 'https'; +import nock from 'nock'; +import { Readable } from 'stream'; +import { afterAll, beforeAll, describe, expect, test, vi } from 'vitest'; + +import type { EndRequest } from '@algolia/client-common'; + +import { createHttpRequester } from '../..'; +import { + createTestServer, + getStringifiedBody, + headers, + requestStub, + testQueryBaseUrl, + testQueryHeader, + timeoutRequest, +} from '../../../../tests/utils'; + +const requester = createHttpRequester(); + +const httpsBaseRequest = https.request; +const httpBaseRequest = http.request; + +describe('api', () => { + const mockedRequestResponse = { + destroy: vi.fn(), + on: vi.fn(), + once: vi.fn(), + write: vi.fn(), + end: vi.fn(), + }; + + beforeAll(() => { + // @ts-expect-error we don't care about the response for those tests + https.request = vi.fn(() => mockedRequestResponse); + }); + + afterAll(() => { + https.request = httpsBaseRequest; + http.request = httpBaseRequest; + vi.resetAllMocks(); + vi.clearAllMocks(); + }); + + test('allow init without parameters', () => { + expect(() => createHttpRequester()).not.toThrow(); + }); + + test('allow providing custom agent', async () => { + const agent = new http.Agent(); + // @ts-expect-error we don't care about the response for those tests + http.request = vi.fn(() => mockedRequestResponse); + const tmpRequester = createHttpRequester({ + agent, + }); + + await tmpRequester.send({ + ...requestStub, + url: 'http://algolia-dns.net/foo?x-algolia-header=bar', + }); + + expect(http.request).toHaveBeenCalled(); + }); + + test('allow overriding default options', async () => { + const tmpRequester = createHttpRequester({ + requesterOptions: { + headers: { + 'my-extra-header': 'algolia', + }, + }, + }); + + await tmpRequester.send(requestStub); + + expect(https.request).toHaveBeenCalledWith( + expect.objectContaining({ + headers: expect.objectContaining({ + 'my-extra-header': 'algolia', + }), + }), + expect.any(Function), + ); + }); +}); + +describe('status code handling', () => { + test('sends requests', async () => { + const body = getStringifiedBody(); + + nock(testQueryBaseUrl, { reqheaders: headers }).post('/foo').query(testQueryHeader).reply(200, body); + + const response = await requester.send(requestStub); + + expect(response.content).toEqual(body); + }); + + test('resolves status 200', async () => { + const body = getStringifiedBody(); + + nock(testQueryBaseUrl, { reqheaders: headers }).post('/foo').query(testQueryHeader).reply(200, body); + + const response = await requester.send(requestStub); + + expect(response.status).toBe(200); + expect(response.content).toBe(body); + expect(response.isTimedOut).toBe(false); + }); + + test('resolves status 300', async () => { + const reason = 'Multiple Choices'; + + nock(testQueryBaseUrl, { reqheaders: headers }).post('/foo').query(testQueryHeader).reply(300, reason); + + const response = await requester.send(requestStub); + + expect(response.status).toBe(300); + expect(response.content).toBe(reason); + expect(response.isTimedOut).toBe(false); + }); + + test('resolves status 400', async () => { + const body = getStringifiedBody({ + message: 'Invalid Application-Id or API-Key', + }); + + nock(testQueryBaseUrl, { reqheaders: headers }).post('/foo').query(testQueryHeader).reply(400, body); + + const response = await requester.send(requestStub); + + expect(response.status).toBe(400); + expect(response.content).toBe(body); + expect(response.isTimedOut).toBe(false); + }); + + test('handles chunked responses inside unicode character boundaries', async () => { + const data = Buffer.from('äöü'); + + // create a test response stream that is chunked inside a unicode character + function* generate() { + yield data.subarray(0, 3); + yield data.subarray(3); + } + + const testStream = Readable.from(generate()); + + nock(testQueryBaseUrl, { reqheaders: headers }).post('/foo').query(testQueryHeader).reply(200, testStream); + + const response = await requester.send(requestStub); + + expect(response.content).toEqual(data.toString()); + }); +}); + +describe('timeout handling', () => { + let server: http.Server; + // setup http server to test timeout + beforeAll(() => { + server = createTestServer(); + + server.listen('1112'); + }); + + afterAll( + () => + new Promise((done) => { + done(); + }), + ); + + test('timeouts with the given 1 seconds connection timeout', async () => { + const before = Date.now(); + const response = await requester.send({ + ...timeoutRequest, + connectTimeout: 1000, + url: 'http://localhost:1112/connection_timeout', + }); + + const now = Date.now(); + + expect(response.content).toBe('Connection timeout'); + expect(now - before).toBeGreaterThanOrEqual(999); + expect(now - before).toBeLessThanOrEqual(1200); + }); + + test('connection timeouts with the given 2 seconds connection timeout', async () => { + const before = Date.now(); + const response = await requester.send({ + ...timeoutRequest, + connectTimeout: 2000, + url: 'http://localhost:1112/connection_timeout', + }); + + const now = Date.now(); + + expect(response.content).toBe('Connection timeout'); + expect(now - before).toBeGreaterThanOrEqual(1999); + expect(now - before).toBeLessThanOrEqual(2200); + }); + + test("socket timeouts if response don't appears before the timeout with 2 seconds timeout", async () => { + const before = Date.now(); + + const response = await requester.send({ + ...timeoutRequest, + responseTimeout: 2000, + url: 'http://localhost:1112', + }); + + const now = Date.now(); + + expect(response.content).toBe('Socket timeout'); + expect(now - before).toBeGreaterThanOrEqual(1999); + expect(now - before).toBeLessThanOrEqual(2200); + }); + + test("socket timeouts if response don't appears before the timeout with 3 seconds timeout", async () => { + const before = Date.now(); + const response = await requester.send({ + ...timeoutRequest, + responseTimeout: 3000, + url: 'http://localhost:1112', + }); + + const now = Date.now(); + + expect(response.content).toBe('Socket timeout'); + expect(now - before).toBeGreaterThanOrEqual(2999); + expect(now - before).toBeLessThanOrEqual(3200); + }); + + test('do not timeouts if response appears before the timeout', async () => { + const before = Date.now(); + const response = await requester.send({ + ...requestStub, + url: 'http://localhost:1112', + responseTimeout: 6000, + }); + + const now = Date.now(); + + expect(response.isTimedOut).toBe(false); + expect(response.status).toBe(200); + expect(response.content).toBe('{"foo": "bar"}'); + expect(now - before).toBeGreaterThanOrEqual(4999); + expect(now - before).toBeLessThanOrEqual(5200); + }, 10000); // This is a long-running test, default server timeout is set to 5000ms +}); + +describe('error handling', (): void => { + test('resolves dns not found', async () => { + const request: EndRequest = { + url: 'https://this-dont-exist.algolia.com', + method: 'POST', + headers, + data: getStringifiedBody(), + responseTimeout: 2000, + connectTimeout: 1000, + }; + + const response = await requester.send(request); + + expect(response.status).toBe(0); + expect(response.content).toContain(''); + expect(response.isTimedOut).toBe(false); + }); + + test('resolves general network errors', async () => { + nock(testQueryBaseUrl, { reqheaders: headers }) + .post('/foo') + .query(testQueryHeader) + .replyWithError('This is a general error'); + + const response = await requester.send(requestStub); + + expect(response.status).toBe(0); + expect(response.content).toBe('This is a general error'); + expect(response.isTimedOut).toBe(false); + }); +}); diff --git a/packages/requester-node-http/src/__tests__/unit/node-http-requester.test.ts b/packages/requester-node-http/src/__tests__/unit/node-http-requester.test.ts deleted file mode 100644 index 6314689b6..000000000 --- a/packages/requester-node-http/src/__tests__/unit/node-http-requester.test.ts +++ /dev/null @@ -1,281 +0,0 @@ -import { MethodEnum, Request } from '@algolia/requester-common'; -import nock from 'nock'; -// @ts-ignore -import { Readable } from 'readable-stream'; - -import { createNodeHttpRequester } from '../..'; - -const requester = createNodeHttpRequester(); - -const headers = { - 'content-type': 'application/x-www-form-urlencoded', -}; - -const timeoutRequest: Request = { - url: 'missing-url-here', - data: '', - headers: {}, - method: 'GET', - responseTimeout: 5, - connectTimeout: 2, -}; - -const requestStub: Request = { - url: 'https://algolia-dns.net/foo?x-algolia-header=foo', - method: MethodEnum.Post, - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - data: JSON.stringify({ foo: 'bar' }), - responseTimeout: 2, - connectTimeout: 1, -}; - -describe('status code handling', () => { - it('sends requests', async () => { - const body = JSON.stringify({ foo: 'bar' }); - - nock('https://algolia-dns.net', { reqheaders: headers }) - .post('/foo') - .query({ 'x-algolia-header': 'foo' }) - .reply(200, body); - - const response = await requester.send(requestStub); - - expect(response.content).toEqual(JSON.stringify({ foo: 'bar' })); - }); - - it('resolves status 200', async () => { - const body = JSON.stringify({ foo: 'bar' }); - - nock('https://algolia-dns.net', { reqheaders: headers }) - .post('/foo') - .query({ 'x-algolia-header': 'foo' }) - .reply(200, body); - - const response = await requester.send(requestStub); - - expect(response.status).toBe(200); - expect(response.content).toBe(body); - expect(response.isTimedOut).toBe(false); - }); - - it('resolves status 300', async () => { - const reason = 'Multiple Choices'; - - nock('https://algolia-dns.net', { reqheaders: headers }) - .post('/foo') - .query({ 'x-algolia-header': 'foo' }) - .reply(300, reason); - - const response = await requester.send(requestStub); - - expect(response.status).toBe(300); - expect(response.content).toBe(reason); - expect(response.isTimedOut).toBe(false); - }); - - it('resolves status 400', async () => { - const body = { message: 'Invalid Application-Id or API-Key' }; - - nock('https://algolia-dns.net', { reqheaders: headers }) - .post('/foo') - .query({ 'x-algolia-header': 'foo' }) - .reply(400, JSON.stringify(body)); - - const response = await requester.send(requestStub); - - expect(response.status).toBe(400); - expect(response.content).toBe(JSON.stringify(body)); - expect(response.isTimedOut).toBe(false); - }); - - it('handles chunked responses inside unicode character boundaries', async () => { - const testdata = Buffer.from('äöü'); - - // create a test response stream that is chunked inside a unicode character - function* generate() { - yield testdata.slice(0, 3); - yield testdata.slice(3); - } - - const testStream = Readable.from(generate()); - - nock('https://algolia-dns.net', { reqheaders: headers }) - .post('/foo') - .query({ 'x-algolia-header': 'foo' }) - .reply(200, testStream); - - const response = await requester.send(requestStub); - - expect(response.content).toEqual(testdata.toString()); - }); -}); - -describe('timeout handling', () => { - it('timeouts with the given 1 seconds connection timeout', async () => { - const before = Date.now(); - const response = await requester.send({ - ...timeoutRequest, - ...{ connectTimeout: 1, url: 'http://www.google.com:81' }, - }); - - const now = Date.now(); - - expect(response.content).toBe('Connection timeout'); - expect(now - before).toBeGreaterThan(999); - expect(now - before).toBeLessThan(1200); - }); - - it('connection timeouts with the given 2 seconds connection timeout', async () => { - const before = Date.now(); - const response = await requester.send({ - ...timeoutRequest, - ...{ connectTimeout: 2, url: 'http://www.google.com:81' }, - }); - - const now = Date.now(); - - expect(response.content).toBe('Connection timeout'); - expect(now - before).toBeGreaterThan(1999); - expect(now - before).toBeLessThan(2200); - }); - - it('socket timeouts if response dont appears before the timeout with 2 seconds timeout', async () => { - const before = Date.now(); - - const response = await requester.send({ - ...timeoutRequest, - ...{ responseTimeout: 2, url: 'http://localhost:1111/' }, - }); - - const now = Date.now(); - - expect(now - before).toBeGreaterThan(1999); - expect(now - before).toBeLessThan(2200); - expect(response.content).toBe('Socket timeout'); - }); - - it('socket timeouts if response dont appears before the timeout with 3 seconds timeout', async () => { - const before = Date.now(); - const response = await requester.send({ - ...timeoutRequest, - ...{ - responseTimeout: 3, - url: 'http://localhost:1111', - }, - }); - - const now = Date.now(); - - expect(response.content).toBe('Socket timeout'); - expect(now - before).toBeGreaterThan(2999); - expect(now - before).toBeLessThan(3200); - }); - - it('do not timeouts if response appears before the timeout', async () => { - const request = Object.assign({}, requestStub); - const before = Date.now(); - const response = await requester.send({ - ...request, - url: 'http://localhost:1111', - responseTimeout: 6, // the fake server sleeps for 5 seconds... - }); - - const now = Date.now(); - - expect(response.isTimedOut).toBe(false); - expect(response.status).toBe(200); - expect(response.content).toBe('{"foo": "bar"}'); - expect(now - before).toBeGreaterThan(4999); - expect(now - before).toBeLessThan(5200); - }); - - it('can be destroyed', async () => { - // Can be destroyed without being used. - await expect(requester.destroy()).resolves.toBeUndefined(); - - await requester.send({ - ...requestStub, - url: 'http://localhost:1111', - responseTimeout: 6, // the fake server sleeps for 5 seconds... - }); - - // Can be destroyed after being used. - await expect(requester.destroy()).resolves.toBeUndefined(); - - // Can be destroyed more than once. - await expect(requester.destroy()).resolves.toBeUndefined(); - - // Can perform requests after being destroyed - await requester.send({ - ...requestStub, - url: 'http://localhost:1111', - responseTimeout: 6, // the fake server sleeps for 5 seconds... - }); - }); -}); - -describe('error handling', (): void => { - it('resolves dns not found', async () => { - const request = { - url: 'https://this-dont-exist.algolia.com', - method: MethodEnum.Post, - headers: { - 'X-Algolia-Application-Id': 'ABCDE', - 'X-Algolia-API-Key': '12345', - 'Content-Type': 'application/x-www-form-urlencoded', - }, - data: JSON.stringify({ foo: 'bar' }), - responseTimeout: 2, - connectTimeout: 1, - }; - - const response = await requester.send(request); - - expect(response.status).toBe(0); - expect(response.content).toContain(''); - expect(response.isTimedOut).toBe(false); - }); - - it('resolves general network errors', async () => { - nock('https://algolia-dns.net', { reqheaders: headers }) - .post('/foo') - .query({ 'x-algolia-header': 'foo' }) - .replyWithError('This is a general error'); - - const response = await requester.send(requestStub); - - expect(response.status).toBe(0); - expect(response.content).toBe('This is a general error'); - expect(response.isTimedOut).toBe(false); - }); -}); - -describe('requesterOptions', () => { - it('allows to pass requesterOptions', async () => { - const body = JSON.stringify({ foo: 'bar' }); - const requesterTmp = createNodeHttpRequester({ - requesterOptions: { - headers: { - 'x-algolia-foo': 'bar', - }, - }, - }); - - nock('https://algolia-dns.net', { - reqheaders: { - ...headers, - 'x-algolia-foo': 'bar', - }, - }) - .post('/foo') - .query({ 'x-algolia-header': 'foo' }) - .reply(200, body); - - const response = await requesterTmp.send(requestStub); - - expect(response.status).toBe(200); - expect(response.content).toBe(body); - }); -}); diff --git a/packages/requester-node-http/src/createHttpRequester.ts b/packages/requester-node-http/src/createHttpRequester.ts new file mode 100644 index 000000000..58e01e9a0 --- /dev/null +++ b/packages/requester-node-http/src/createHttpRequester.ts @@ -0,0 +1,106 @@ +import http from 'http'; +import https from 'https'; +import { URL } from 'url'; + +import type { EndRequest, Requester, Response } from '@algolia/client-common'; + +export type CreateHttpRequesterOptions = Partial<{ + agent: http.Agent | https.Agent; + httpAgent: http.Agent; + httpsAgent: https.Agent; + /** + * RequestOptions to be merged with the end request, it will override default options if provided. + */ + requesterOptions: https.RequestOptions; +}>; + +// Global agents allow us to reuse the TCP protocol with multiple clients +const agentOptions = { keepAlive: true }; +const defaultHttpAgent = new http.Agent(agentOptions); +const defaultHttpsAgent = new https.Agent(agentOptions); + +export function createHttpRequester({ + agent: userGlobalAgent, + httpAgent: userHttpAgent, + httpsAgent: userHttpsAgent, + requesterOptions = {}, +}: CreateHttpRequesterOptions = {}): Requester { + const httpAgent = userHttpAgent || userGlobalAgent || defaultHttpAgent; + const httpsAgent = userHttpsAgent || userGlobalAgent || defaultHttpsAgent; + + function send(request: EndRequest): Promise { + return new Promise((resolve) => { + let responseTimeout: NodeJS.Timeout | undefined; + let connectTimeout: NodeJS.Timeout | undefined; + const url = new URL(request.url); + const path = url.search === null ? url.pathname : `${url.pathname}${url.search}`; + const options: https.RequestOptions = { + agent: url.protocol === 'https:' ? httpsAgent : httpAgent, + hostname: url.hostname, + path, + method: request.method, + ...requesterOptions, + headers: { + ...request.headers, + ...requesterOptions.headers, + }, + }; + + if (url.port && !requesterOptions.port) { + options.port = url.port; + } + + const req = (url.protocol === 'https:' ? https : http).request(options, (response) => { + let contentBuffers: Buffer[] = []; + + response.on('data', (chunk) => { + contentBuffers = contentBuffers.concat(chunk); + }); + + response.on('end', () => { + clearTimeout(connectTimeout as NodeJS.Timeout); + clearTimeout(responseTimeout as NodeJS.Timeout); + + resolve({ + status: response.statusCode || 0, + content: Buffer.concat(contentBuffers).toString(), + isTimedOut: false, + }); + }); + }); + + const createTimeout = (timeout: number, content: string): NodeJS.Timeout => { + return setTimeout(() => { + req.destroy(); + + resolve({ + status: 0, + content, + isTimedOut: true, + }); + }, timeout); + }; + + connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout'); + + req.on('error', (error) => { + clearTimeout(connectTimeout as NodeJS.Timeout); + clearTimeout(responseTimeout!); + resolve({ status: 0, content: error.message, isTimedOut: false }); + }); + + req.once('response', () => { + clearTimeout(connectTimeout as NodeJS.Timeout); + responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout'); + }); + + if (request.data !== undefined) { + req.write(request.data); + } + + req.end(); + }); + } + + return { send }; +} diff --git a/packages/requester-node-http/src/createNodeHttpRequester.ts b/packages/requester-node-http/src/createNodeHttpRequester.ts deleted file mode 100644 index ec3e66b00..000000000 --- a/packages/requester-node-http/src/createNodeHttpRequester.ts +++ /dev/null @@ -1,114 +0,0 @@ -/* eslint functional/prefer-readonly-type: 0 */ -/* eslint sonarjs/cognitive-complexity: 0 */ // --> - -import { Destroyable, Request, Requester, Response } from '@algolia/requester-common'; -import * as http from 'http'; -import * as https from 'https'; -import * as URL from 'url'; - -export type NodeHttpRequesterOptions = { - agent?: https.Agent | http.Agent; - httpAgent?: http.Agent; - httpsAgent?: https.Agent; - requesterOptions?: https.RequestOptions; -}; - -const agentOptions = { keepAlive: true }; -const defaultHttpAgent = new http.Agent(agentOptions); -const defaultHttpsAgent = new https.Agent(agentOptions); - -export function createNodeHttpRequester({ - agent: userGlobalAgent, - httpAgent: userHttpAgent, - httpsAgent: userHttpsAgent, - requesterOptions = {}, -}: NodeHttpRequesterOptions = {}): Requester & Destroyable { - const httpAgent = userHttpAgent || userGlobalAgent || defaultHttpAgent; - const httpsAgent = userHttpsAgent || userGlobalAgent || defaultHttpsAgent; - - return { - send(request: Request): Readonly> { - return new Promise(resolve => { - const url = URL.parse(request.url); - - const path = url.query === null ? url.pathname : `${url.pathname}?${url.query}`; - - const options: https.RequestOptions = { - ...requesterOptions, - agent: url.protocol === 'https:' ? httpsAgent : httpAgent, - hostname: url.hostname, - path, - method: request.method, - headers: { - ...(requesterOptions && requesterOptions.headers ? requesterOptions.headers : {}), - ...request.headers, - }, - ...(url.port !== undefined ? { port: url.port || '' } : {}), - }; - - const req = (url.protocol === 'https:' ? https : http).request(options, response => { - // eslint-disable-next-line functional/no-let - let contentBuffers: Buffer[] = []; - - response.on('data', chunk => { - contentBuffers = contentBuffers.concat(chunk); - }); - - response.on('end', () => { - // eslint-disable-next-line @typescript-eslint/no-use-before-define - clearTimeout(connectTimeout); - // eslint-disable-next-line @typescript-eslint/no-use-before-define - clearTimeout(responseTimeout as NodeJS.Timeout); - - resolve({ - status: response.statusCode || 0, - content: Buffer.concat(contentBuffers).toString(), - isTimedOut: false, - }); - }); - }); - - const createTimeout = (timeout: number, content: string): NodeJS.Timeout => { - return setTimeout(() => { - req.abort(); - - resolve({ - status: 0, - content, - isTimedOut: true, - }); - }, timeout * 1000); - }; - - const connectTimeout = createTimeout(request.connectTimeout, 'Connection timeout'); - - // eslint-disable-next-line functional/no-let - let responseTimeout: NodeJS.Timeout | undefined; - - req.on('error', error => { - clearTimeout(connectTimeout); - clearTimeout(responseTimeout as NodeJS.Timeout); - resolve({ status: 0, content: error.message, isTimedOut: false }); - }); - - req.once('response', () => { - clearTimeout(connectTimeout); - responseTimeout = createTimeout(request.responseTimeout, 'Socket timeout'); - }); - - if (request.data !== undefined) { - req.write(request.data); - } - - req.end(); - }); - }, - - destroy() { - httpAgent.destroy(); - httpsAgent.destroy(); - - return Promise.resolve(); - }, - }; -} diff --git a/packages/requester-node-http/src/index.ts b/packages/requester-node-http/src/index.ts index c5982c330..4c4838f49 100644 --- a/packages/requester-node-http/src/index.ts +++ b/packages/requester-node-http/src/index.ts @@ -1,5 +1 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createNodeHttpRequester'; +export * from './createHttpRequester'; diff --git a/packages/requester-node-http/tsconfig.json b/packages/requester-node-http/tsconfig.json new file mode 100644 index 000000000..f6efa8845 --- /dev/null +++ b/packages/requester-node-http/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "types": ["node", "vitest/globals"], + "outDir": "dist", + "skipLibCheck": true + }, + "include": ["src"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/requester-node-http/tsup.config.ts b/packages/requester-node-http/tsup.config.ts new file mode 100644 index 000000000..c4e79c904 --- /dev/null +++ b/packages/requester-node-http/tsup.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from 'tsup'; + +import { getBaseNodeOptions } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +export default defineConfig([ + { + ...getBaseNodeOptions(pkg, __dirname), + format: 'cjs', + entry: { 'requester.http': 'src/index.ts' }, + dts: { entry: { 'requester.http': 'src/index.ts' } }, + }, + { + ...getBaseNodeOptions(pkg, __dirname), + format: 'esm', + entry: { 'requester.http': 'src/index.ts' }, + dts: { entry: { 'requester.http': 'src/index.ts' } }, + }, +]); diff --git a/packages/requester-node-http/vitest.config.ts b/packages/requester-node-http/vitest.config.ts new file mode 100644 index 000000000..d09e4d203 --- /dev/null +++ b/packages/requester-node-http/vitest.config.ts @@ -0,0 +1,5 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { environment: 'node' }, +}); diff --git a/packages/requester-testing/index.d.ts b/packages/requester-testing/index.d.ts new file mode 100644 index 000000000..e81a1cd3e --- /dev/null +++ b/packages/requester-testing/index.d.ts @@ -0,0 +1 @@ +export * from './dist/node'; diff --git a/packages/requester-testing/index.js b/packages/requester-testing/index.js new file mode 100644 index 000000000..4a9cdb9ef --- /dev/null +++ b/packages/requester-testing/index.js @@ -0,0 +1 @@ +module.exports = require('./dist/node.cjs'); diff --git a/packages/requester-testing/package.json b/packages/requester-testing/package.json new file mode 100644 index 000000000..664980695 --- /dev/null +++ b/packages/requester-testing/package.json @@ -0,0 +1,61 @@ +{ + "name": "@algolia/requester-testing", + "version": "5.23.3", + "private": true, + "description": "A package that contains the echo requester of the algoliasearch JavaScript requesters, for testing purposes", + "repository": { + "type": "git", + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript#readme", + "license": "MIT", + "author": "Algolia", + "type": "module", + "files": [ + "dist", + "index.d.ts", + "index.js" + ], + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/node.js", + "module": "./dist/node.js", + "require": "./dist/node.cjs" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/browser.js", + "import": "./dist/browser.js", + "default": "./dist/browser.js" + } + }, + "./src/*": "./src/*.ts" + }, + "scripts": { + "build": "yarn clean && yarn tsup", + "clean": "rm -rf ./dist || true", + "test:bundle": "publint . && attw --pack ." + }, + "dependencies": { + "@algolia/client-common": "5.23.3", + "@algolia/requester-browser-xhr": "5.23.3", + "@algolia/requester-fetch": "5.23.3", + "@algolia/requester-node-http": "5.23.3" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.0", + "publint": "0.3.10", + "tsup": "8.4.0", + "typescript": "5.8.3" + }, + "engines": { + "node": ">= 14.0.0" + } +} diff --git a/packages/requester-testing/src/browserEchoRequester.ts b/packages/requester-testing/src/browserEchoRequester.ts new file mode 100644 index 000000000..fb03c8bce --- /dev/null +++ b/packages/requester-testing/src/browserEchoRequester.ts @@ -0,0 +1,9 @@ +import type { Requester } from '@algolia/client-common'; + +import { createEchoRequester } from './createEchoRequester'; + +export function browserEchoRequester(status: number = 200): Requester { + return createEchoRequester({ getURL: (url: string) => new URL(url), status }); +} + +export type { EchoResponse } from './createEchoRequester.ts'; diff --git a/packages/requester-testing/src/createEchoRequester.ts b/packages/requester-testing/src/createEchoRequester.ts new file mode 100644 index 000000000..7eb8c6661 --- /dev/null +++ b/packages/requester-testing/src/createEchoRequester.ts @@ -0,0 +1,81 @@ +import type { EndRequest, Request, Requester, Response } from '@algolia/client-common'; + +export type EchoResponse = Omit & + Pick & { + host: string; + algoliaAgent: string; + searchParams?: Record; + }; + +type BasicURL = { + host: string; + search: string; + pathname: string; +}; + +export type EchoRequesterParams = { + getURL: (url: string) => BasicURL; + status?: number; +}; + +function getUrlParams({ + host, + search, + pathname, +}: BasicURL): Pick { + const urlSearchParams = search.split('?'); + if (urlSearchParams.length === 1) { + return { + host, + algoliaAgent: '', + searchParams: undefined, + path: pathname, + }; + } + + const splitSearchParams = urlSearchParams[1].split('&'); + let algoliaAgent = ''; + const searchParams: Record = {}; + + if (splitSearchParams.length > 0) { + splitSearchParams.forEach((param) => { + const [key, value] = param.split('='); + if (key === 'x-algolia-agent') { + algoliaAgent = value; + return; + } + + searchParams[key] = value; + }); + } + + return { + host, + algoliaAgent, + searchParams: Object.keys(searchParams).length === 0 ? undefined : searchParams, + path: pathname, + }; +} + +export function createEchoRequester({ getURL, status = 200 }: EchoRequesterParams): Requester { + function send(request: EndRequest): Promise { + const { host, searchParams, algoliaAgent, path } = getUrlParams(getURL(request.url)); + + const content: EchoResponse = { + ...request, + data: request.data ? JSON.parse(request.data) : undefined, + path, + host, + algoliaAgent, + searchParams, + }; + + return Promise.resolve({ + content: JSON.stringify(content), + isTimedOut: false, + status, + }); + } + + return { send }; +} diff --git a/packages/requester-testing/src/index.ts b/packages/requester-testing/src/index.ts new file mode 100644 index 000000000..d64be8e34 --- /dev/null +++ b/packages/requester-testing/src/index.ts @@ -0,0 +1,3 @@ +export * from './browserEchoRequester'; +export * from './createEchoRequester'; +export * from './nodeEchoRequester'; diff --git a/packages/requester-testing/src/nodeEchoRequester.ts b/packages/requester-testing/src/nodeEchoRequester.ts new file mode 100644 index 000000000..e434bdd80 --- /dev/null +++ b/packages/requester-testing/src/nodeEchoRequester.ts @@ -0,0 +1,11 @@ +import { URL } from 'url'; + +import type { Requester } from '@algolia/client-common'; + +import { createEchoRequester } from './createEchoRequester'; + +export function nodeEchoRequester(status: number = 200): Requester { + return createEchoRequester({ getURL: (url: string) => new URL(url), status }); +} + +export type { EchoResponse } from './createEchoRequester.ts'; diff --git a/packages/requester-testing/tsconfig.json b/packages/requester-testing/tsconfig.json new file mode 100644 index 000000000..50a5d1d9f --- /dev/null +++ b/packages/requester-testing/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "types": ["node"], + "outDir": "dist" + }, + "include": ["src"], + "exclude": ["dist", "node_modules"] +} diff --git a/packages/requester-testing/tsup.config.ts b/packages/requester-testing/tsup.config.ts new file mode 100644 index 000000000..3dcdaac3b --- /dev/null +++ b/packages/requester-testing/tsup.config.ts @@ -0,0 +1,26 @@ +import { defineConfig } from 'tsup'; + +import { getBaseBrowserOptions, getBaseNodeOptions } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +export default defineConfig([ + { + ...getBaseNodeOptions(pkg, __dirname), + format: 'cjs', + entry: { node: 'src/nodeEchoRequester.ts' }, + dts: { entry: { node: 'src/nodeEchoRequester.ts' } }, + }, + { + ...getBaseNodeOptions(pkg, __dirname), + format: 'esm', + entry: { node: 'src/nodeEchoRequester.ts' }, + dts: { entry: { node: 'src/nodeEchoRequester.ts' } }, + }, + { + ...getBaseBrowserOptions(pkg, __dirname), + format: 'esm', + entry: { browser: 'src/browserEchoRequester.ts' }, + dts: { entry: { browser: 'src/browserEchoRequester.ts' } }, + }, +]); diff --git a/packages/transporter/api-extractor.json b/packages/transporter/api-extractor.json deleted file mode 100644 index d182b70fb..000000000 --- a/packages/transporter/api-extractor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../api-extractor.json", - "mainEntryPointFilePath": "./dist/packages//src/index.d.ts", - "dtsRollup": { - "untrimmedFilePath": "./dist/.d.ts" - } -} diff --git a/packages/transporter/index.js b/packages/transporter/index.js deleted file mode 100644 index e254eb1b4..000000000 --- a/packages/transporter/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line functional/immutable-data, import/no-commonjs -module.exports = require('./dist/transporter.cjs.js'); diff --git a/packages/transporter/package.json b/packages/transporter/package.json deleted file mode 100644 index a4fe78d77..000000000 --- a/packages/transporter/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@algolia/transporter", - "version": "4.13.1", - "private": false, - "description": "Promise-based transporter layer with embedded retry strategy.", - "repository": { - "type": "git", - "url": "git://github.com/algolia/algoliasearch-client-javascript.git" - }, - "license": "MIT", - "sideEffects": false, - "main": "index.js", - "module": "dist/transporter.esm.js", - "types": "dist/transporter.d.ts", - "files": [ - "index.js", - "dist" - ], - "dependencies": { - "@algolia/cache-common": "4.13.1", - "@algolia/logger-common": "4.13.1", - "@algolia/requester-common": "4.13.1" - } -} diff --git a/packages/transporter/src/__tests__/fixtures.ts b/packages/transporter/src/__tests__/fixtures.ts deleted file mode 100644 index 03a6dd3af..000000000 --- a/packages/transporter/src/__tests__/fixtures.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { createNullCache } from '@algolia/cache-common'; -import { createInMemoryCache } from '@algolia/cache-in-memory'; -import { encode } from '@algolia/client-common'; -import { - MethodEnum, - Request, - Request as RequesterRequest, - Requester, - Response, -} from '@algolia/requester-common'; - -import { CallEnum, Transporter } from '..'; -import algoliasearch from '../../../algoliasearch/src/builds/browser'; -import { version } from '../../../client-common/src/version'; - -export function createFakeRequester(): Requester { - return { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - send(request: RequesterRequest): Readonly> { - return new Promise((resolve): void => { - resolve({ - content: '{"hits": [{"name": "Star Wars"}]}', - status: 200, - isTimedOut: false, - }); - }); - }, - }; -} - -export function createFixtures() { - return { - requester(): Requester { - return createFakeRequester(); - }, - - transporter(requester: Requester, options: any = {}): Transporter { - return algoliasearch('appId', 'apiKey', { - hosts: [ - { url: 'read.com', accept: CallEnum.Read }, - { url: 'write.com', accept: CallEnum.Write }, - { url: 'read-and-write.com' }, - ], - requester, - hostsCache: createInMemoryCache(), - requestsCache: createNullCache(), - responsesCache: createNullCache(), - headers: { - 'X-Default-Header': 'Default value', - }, - queryParameters: {}, - timeouts: { - read: 2, - write: 30, - connect: 1, - }, - ...options, - }).transporter; - }, - - transporterRequest() { - return { - method: MethodEnum.Post, - path: 'save', - data: {}, - cacheable: false, - }; - }, - - readRequest(options: any = {}) { - return this.request({ - connectTimeout: 1, - responseTimeout: 2, - url: 'https://read.com/save', - ...options, - }); - }, - - writeRequest(options: any = {}) { - return this.request({ - connectTimeout: 1, - responseTimeout: 30, - url: 'https://write.com/save', - ...options, - }); - }, - - readAndWriteRequest(options: any = {}) { - return this.request({ - url: 'https://read-and-write.com/save', - ...options, - }); - }, - - request(options: any = {}): Request { - const headers: Readonly> = { - 'x-algolia-api-key': 'apiKey', - 'x-algolia-application-id': 'appId', - 'content-type': 'application/x-www-form-urlencoded', - 'x-default-header': 'Default value', - }; - - if (options.url !== undefined) { - const userAgent = encode( - '%s=%s', - 'x-algolia-agent', - `Algolia for JavaScript (${version}); Browser` - ); - - const hasQueryParametersAlready = options.url.includes('?'); - - // eslint-disable-next-line no-param-reassign - options.url = options.url.replace( - `.com/save${hasQueryParametersAlready ? '?' : ''}`, - `.com/save?${userAgent}${hasQueryParametersAlready ? '&' : ''}` - ); - } - - return { - data: '{}', - headers, - method: MethodEnum.Post, - connectTimeout: 1, - responseTimeout: 2, - ...options, - }; - }, - }; -} diff --git a/packages/transporter/src/__tests__/integration/query-parameters.test.ts b/packages/transporter/src/__tests__/integration/query-parameters.test.ts deleted file mode 100644 index 3bd28c831..000000000 --- a/packages/transporter/src/__tests__/integration/query-parameters.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { TestSuite } from '../../../../client-common/src/__tests__/TestSuite'; - -const testSuite = new TestSuite('query_parameters'); - -test(testSuite.testName, async () => { - const index = testSuite.makeIndex(); - await index.saveObject({ objectID: 1 }).wait(); - - await expect(index.getSettings()).resolves.toMatchObject({ version: 2 }); - - await expect( - index.getSettings({ - getVersion: 1, - }) - ).resolves.toMatchObject({ version: 1 }); - - await expect( - index.getSettings({ - getVersion: 1, - queryParameters: { - getVersion: 2, - }, - }) - ).resolves.toMatchObject({ version: 2 }); -}); diff --git a/packages/transporter/src/__tests__/integration/with-hosts-cache-drivers.test.ts b/packages/transporter/src/__tests__/integration/with-hosts-cache-drivers.test.ts deleted file mode 100644 index 8b56671f1..000000000 --- a/packages/transporter/src/__tests__/integration/with-hosts-cache-drivers.test.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { createBrowserLocalStorageCache } from '@algolia/cache-browser-local-storage'; -import { createNullCache } from '@algolia/cache-common'; -import { createInMemoryCache } from '@algolia/cache-in-memory'; -import { version } from '@algolia/client-common'; -import { anything, spy, verify, when } from 'ts-mockito'; - -import { createFakeRequester, createFixtures } from '../fixtures'; - -const transporterRequest = createFixtures().transporterRequest(); -const drivers = [createNullCache, createInMemoryCache]; - -const createBrowserLocalStorageCacheFunction = () => - createBrowserLocalStorageCache({ key: version }); - -if (testing.isBrowser()) { - drivers.push(createBrowserLocalStorageCacheFunction); -} - -describe('hosts cache integration with cache drivers', () => { - beforeEach(() => { - if (testing.isBrowser()) { - window.localStorage.clear(); - } - }); - - const expectedCalls = [ - { - [createNullCache.name]: 4, - [createInMemoryCache.name]: 3, - [createBrowserLocalStorageCacheFunction.name]: 3, - }, - { - [createNullCache.name]: 4, - // all down. - [createInMemoryCache.name]: 4, - [createBrowserLocalStorageCacheFunction.name]: 4, - }, - { - [createNullCache.name]: 4, - // all down. - [createInMemoryCache.name]: 4, - [createBrowserLocalStorageCacheFunction.name]: 4, - }, - ]; - - it('preserve hosts state between calls', async () => { - const driversCreated = drivers.map(driver => driver()); - - for (let callsNumber = 0; callsNumber < 2; callsNumber++) { - for (let index = 0; index < drivers.length; index++) { - const requester = createFakeRequester(); - const requesterMock = spy(requester); - - when(requesterMock.send(anything())).thenResolve({ - content: JSON.stringify({ hits: [] }), - status: 500, - isTimedOut: false, - }); - - const transporter = createFixtures().transporter(requester, { - hostsCache: driversCreated[index], - }); - - const message = - // eslint-disable-next-line max-len - 'Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.'; - - await expect(transporter.read(transporterRequest)).rejects.toMatchObject({ - message, - name: 'RetryError', - }); - - await expect(transporter.write(transporterRequest)).rejects.toMatchObject({ - message, - name: 'RetryError', - }); - - verify(requesterMock.send(anything())).times( - expectedCalls[callsNumber][drivers[index].name] - ); - } - } - }); -}); diff --git a/packages/transporter/src/__tests__/integration/with-request-cache-drivers.test.ts b/packages/transporter/src/__tests__/integration/with-request-cache-drivers.test.ts deleted file mode 100644 index 42db44a08..000000000 --- a/packages/transporter/src/__tests__/integration/with-request-cache-drivers.test.ts +++ /dev/null @@ -1,127 +0,0 @@ -/* eslint sonarjs/cognitive-complexity: 0 */ // --> OFF - -import { createNullCache } from '@algolia/cache-common'; -import { createInMemoryCache } from '@algolia/cache-in-memory'; -import { anything, spy, verify, when } from 'ts-mockito'; - -import { createFakeRequester, createFixtures } from '../fixtures'; - -const transporterRequest = createFixtures().transporterRequest(); -transporterRequest.cacheable = true; - -const drivers = [createNullCache, createInMemoryCache]; - -describe('request cache integration with cache drivers', () => { - beforeEach(() => { - if (testing.isBrowser()) { - window.localStorage.clear(); - } - }); - - const expectedCalls = { - 'in-progress': { - [createNullCache.name]: 13, - [createInMemoryCache.name]: 4, - }, - resolved: { - [createNullCache.name]: 10, - [createInMemoryCache.name]: 10, - }, - rejected: { - [createNullCache.name]: 10, - [createInMemoryCache.name]: 10, - }, - }; - - it('cache read requests in progress', async () => { - for (let index = 0; index < drivers.length; index++) { - const requester = createFakeRequester(); - const requesterMock = spy(requester); - - when(requesterMock.send(anything())).thenResolve({ - content: JSON.stringify({ hits: [] }), - status: 200, - isTimedOut: false, - }); - - const driver = drivers[index](); - - const transporter = createFixtures().transporter(requester, { - requestsCache: driver, - }); - - const responses = []; - for (let callNumber = 1; callNumber <= 10; callNumber++) { - transporterRequest.data = {}; - responses.push(transporter.read(transporterRequest)); - } - - for (let callNumber = 1; callNumber <= 3; callNumber++) { - transporterRequest.data = { callNumber }; - responses.push(transporter.read(transporterRequest)); - } - - for (let responsesNumber = 0; responsesNumber < responses.length; responsesNumber++) { - await responses[responsesNumber]; - } - - verify(requesterMock.send(anything())).times( - expectedCalls['in-progress'][drivers[index].name] - ); - } - }); - - it('do not cache read requests resolved', async () => { - for (let index = 0; index < drivers.length; index++) { - const requester = createFakeRequester(); - const requesterMock = spy(requester); - - when(requesterMock.send(anything())).thenResolve({ - content: JSON.stringify({ hits: [] }), - status: 200, - isTimedOut: false, - }); - - const driver = drivers[index](); - - const transporter = createFixtures().transporter(requester, { - requestsCache: driver, - }); - - for (let callNumber = 1; callNumber <= 10; callNumber++) { - await expect(transporter.read(transporterRequest)).resolves.toMatchObject({ hits: [] }); - } - - verify(requesterMock.send(anything())).times(expectedCalls.resolved[drivers[index].name]); - } - }); - - it('do not cache read requests rejected', async () => { - for (let index = 0; index < drivers.length; index++) { - const requester = createFakeRequester(); - const requesterMock = spy(requester); - - when(requesterMock.send(anything())).thenResolve({ - content: 'Unreachable hosts - your application id...', - status: 403, - isTimedOut: false, - }); - - const driver = drivers[index](); - - const transporter = createFixtures().transporter(requester, { - requestsCache: driver, - }); - - for (let callNumber = 1; callNumber <= 10; callNumber++) { - await expect(transporter.read(transporterRequest)).rejects.toMatchObject({ - name: 'ApiError', - message: 'Unreachable hosts - your application id...', - status: 403, - }); - } - - verify(requesterMock.send(anything())).times(expectedCalls.resolved[drivers[index].name]); - } - }); -}); diff --git a/packages/transporter/src/__tests__/integration/with-response-cache-drivers.test.ts b/packages/transporter/src/__tests__/integration/with-response-cache-drivers.test.ts deleted file mode 100644 index 636ef03f5..000000000 --- a/packages/transporter/src/__tests__/integration/with-response-cache-drivers.test.ts +++ /dev/null @@ -1,148 +0,0 @@ -/* eslint sonarjs/cognitive-complexity: 0 */ // --> OFF - -import { createBrowserLocalStorageCache } from '@algolia/cache-browser-local-storage'; -import { createNullCache } from '@algolia/cache-common'; -import { createInMemoryCache } from '@algolia/cache-in-memory'; -import { version } from '@algolia/client-common'; -import { anything, spy, verify, when } from 'ts-mockito'; - -import { createFakeRequester, createFixtures } from '../fixtures'; - -const transporterRequest = createFixtures().transporterRequest(); - -describe('response cache integration with cache drivers', () => { - beforeEach(() => { - transporterRequest.cacheable = true; - - if (testing.isBrowser()) { - window.localStorage.clear(); - } - }); - - const drivers = [createNullCache, createInMemoryCache]; - const createBrowserLocalStorageCacheFunction = () => - createBrowserLocalStorageCache({ key: version }); - - if (testing.isBrowser()) { - drivers.push(createBrowserLocalStorageCacheFunction); - } - - const expectedCalls = { - '2xx': { - [createNullCache.name]: 16, - [createInMemoryCache.name]: 7, - [createBrowserLocalStorageCacheFunction.name]: 7, - }, - '4xx': { - [createNullCache.name]: 10, - [createInMemoryCache.name]: 10, - [createBrowserLocalStorageCacheFunction.name]: 10, - }, - '2xx-mutate-transporter': { - [createNullCache.name]: 5, - [createInMemoryCache.name]: 3, - [createBrowserLocalStorageCacheFunction.name]: 3, - }, - }; - - it('cache 2xx results', async () => { - for (let index = 0; index < drivers.length; index++) { - transporterRequest.cacheable = true; - const requester = createFakeRequester(); - const requesterMock = spy(requester); - - when(requesterMock.send(anything())).thenResolve({ - content: JSON.stringify({ hits: [] }), - status: 200, - isTimedOut: false, - }); - - const driver = drivers[index](); - - const transporter = createFixtures().transporter(requester, { responsesCache: driver }); - - for (let callNumber = 1; callNumber <= 10; callNumber++) { - transporterRequest.data = {}; - await expect(transporter.read(transporterRequest)).resolves.toMatchObject({ hits: [] }); - } - - for (let callNumber = 1; callNumber <= 3; callNumber++) { - // Body is different every time, we should not cache here. - transporterRequest.data = { callNumber }; - await expect(transporter.read(transporterRequest)).resolves.toMatchObject({ hits: [] }); - } - - for (let callNumber = 1; callNumber <= 3; callNumber++) { - // We are explicit saying that we don't want any type of cache. - transporterRequest.data = { callNumber }; - transporterRequest.cacheable = false; - await expect(transporter.read(transporterRequest)).resolves.toMatchObject({ hits: [] }); - } - - verify(requesterMock.send(anything())).times(expectedCalls['2xx'][drivers[index].name]); - } - }); - - it('do not cache 4xx results', async () => { - for (let index = 0; index < drivers.length; index++) { - const requester = createFakeRequester(); - const requesterMock = spy(requester); - - when(requesterMock.send(anything())).thenResolve({ - content: JSON.stringify({ message: 'Unauthorized' }), - status: 400, - isTimedOut: false, - }); - - const driver = drivers[index](); - - const transporter = createFixtures().transporter(requester, { responsesCache: driver }); - - for (let callNumber = 1; callNumber <= 10; callNumber++) { - await expect(transporter.read(transporterRequest)).rejects.toMatchObject({ - message: 'Unauthorized', - }); - } - - verify(requesterMock.send(anything())).times(expectedCalls['4xx'][drivers[index].name]); - } - }); - - it('transporter query parameters and headers are part of the cache key', async () => { - for (let index = 0; index < drivers.length; index++) { - transporterRequest.cacheable = true; - const requester = createFakeRequester(); - const requesterMock = spy(requester); - - when(requesterMock.send(anything())).thenResolve({ - content: JSON.stringify({ hits: [] }), - status: 200, - isTimedOut: false, - }); - - const driver = drivers[index](); - - const transporter = createFixtures().transporter(requester, { responsesCache: driver }); - - await expect(transporter.read(transporterRequest)).resolves.toMatchObject({ hits: [] }); - await expect(transporter.read(transporterRequest)).resolves.toMatchObject({ hits: [] }); - - Object.assign(transporter.headers, { - 'new header': 'new header value', - }); - - await expect(transporter.read(transporterRequest)).resolves.toMatchObject({ hits: [] }); - - Object.assign(transporter.queryParameters, { - 'new query parameter': 'new query parameter value', - }); - - await expect(transporter.read(transporterRequest)).resolves.toMatchObject({ hits: [] }); - await expect(transporter.read(transporterRequest)).resolves.toMatchObject({ hits: [] }); - - verify(requesterMock.send(anything())).times( - expectedCalls['2xx-mutate-transporter'][drivers[index].name] - ); - } - }); -}); diff --git a/packages/transporter/src/__tests__/unit/deserializer.test.ts b/packages/transporter/src/__tests__/unit/deserializer.test.ts deleted file mode 100644 index 9da8b5e55..000000000 --- a/packages/transporter/src/__tests__/unit/deserializer.test.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { version } from '@algolia/client-common'; -import { Requester } from '@algolia/requester-common'; -import { anything, spy, when } from 'ts-mockito'; - -import { Transporter } from '../..'; -import { createFakeRequester, createFixtures } from '../fixtures'; - -let requesterMock: Requester; -let transporter: Transporter; - -beforeEach(() => { - const requester = createFakeRequester(); - requesterMock = spy(requester); - transporter = createFixtures().transporter(requester); -}); - -const transporterRequest = createFixtures().transporterRequest(); - -describe('deserializer', () => { - it('deserializes success responses', async () => { - type SearchResponse = { - readonly hits: ReadonlyArray<{ - readonly name: string; - }>; - }; - - when(requesterMock.send(anything())).thenResolve({ - content: JSON.stringify({ hits: [{ name: 'Star Wars' }] }), - status: 200, - isTimedOut: false, - }); - - const response = await transporter.read(transporterRequest); - - expect(response).toStrictEqual({ hits: [{ name: 'Star Wars' }] }); - }); - - it('handles deserialization errors', async () => { - when(requesterMock.send(anything())).thenResolve({ - content: 'Non json string', - status: 200, - isTimedOut: false, - }); - - await expect(transporter.read(transporterRequest)).rejects.toEqual({ - name: 'DeserializationError', - message: 'Unexpected token N in JSON at position 0', - response: { - content: 'Non json string', - status: 200, - isTimedOut: false, - }, - }); - }); - - it('deserializes fail responses', async () => { - when(requesterMock.send(anything())).thenResolve({ - content: JSON.stringify({ message: 'User not found', status: 404 }), - status: 404, - isTimedOut: false, - }); - - await expect(transporter.read(transporterRequest)).rejects.toMatchObject({ - name: 'ApiError', - message: 'User not found', - status: 404, - }); - }); - - it('deserializes fail non json responses', async () => { - when(requesterMock.send(anything())).thenResolve({ - content: 'String message for some reason', - status: 404, - isTimedOut: false, - }); - - await expect(transporter.read(transporterRequest)).rejects.toMatchObject({ - name: 'ApiError', - message: 'String message for some reason', - status: 404, - }); - }); - - it('includes stack trace', async () => { - when(requesterMock.send(anything())).thenResolve({ - content: 'Server error', - status: 404, - isTimedOut: false, - }); - - await expect(transporter.read(transporterRequest)).rejects.toEqual({ - name: 'ApiError', - message: 'Server error', - status: 404, - transporterStackTrace: [ - { - host: { - accept: 1, - protocol: 'https', - url: 'read.com', - }, - request: { - connectTimeout: 1, - data: '{}', - headers: { - 'content-type': 'application/x-www-form-urlencoded', - 'x-algolia-api-key': '*****', - 'x-algolia-application-id': 'appId', - 'x-default-header': 'Default value', - }, - method: 'POST', - responseTimeout: 2, - url: `https://read.com/save?x-algolia-agent=Algolia%20for%20JavaScript%20(${version})%3B%20Browser`, - }, - response: { - content: 'Server error', - isTimedOut: false, - status: 404, - }, - triesLeft: 1, - }, - ], - }); - }); -}); diff --git a/packages/transporter/src/__tests__/unit/headers.test.ts b/packages/transporter/src/__tests__/unit/headers.test.ts deleted file mode 100644 index 9215e20ab..000000000 --- a/packages/transporter/src/__tests__/unit/headers.test.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { Requester } from '@algolia/requester-common'; -import { anything, deepEqual, spy, verify, when } from 'ts-mockito'; - -import { Transporter } from '../..'; -import { createFakeRequester, createFixtures } from '../fixtures'; - -let requesterMock: Requester; -let transporter: Transporter; - -beforeEach(() => { - const requester = createFakeRequester(); - requesterMock = spy(requester); - transporter = createFixtures().transporter(requester); - - when(requesterMock.send(anything())).thenResolve({ - content: '{}', - status: 200, - isTimedOut: false, - }); -}); - -const transporterRequest = createFixtures().transporterRequest(); - -describe('selection of headers', () => { - it('allows add extra headers', async () => { - Object.assign(transporter.headers, { - 'X-Algolia-Signature': 'signature', - }); - - await transporter.write(transporterRequest); - - verify( - requesterMock.send( - deepEqual( - createFixtures().writeRequest({ - headers: { - 'x-algolia-api-key': 'apiKey', - 'x-algolia-application-id': 'appId', - 'content-type': 'application/x-www-form-urlencoded', - 'x-default-header': 'Default value', - 'x-algolia-signature': 'signature', - }, - }) - ) - ) - ).once(); - }); - - it('allows to add headers per read/write', async () => { - await transporter.read(transporterRequest, { - headers: { - 'X-Algolia-Application-Id': 'foo', - }, - }); - - verify( - requesterMock.send( - deepEqual( - createFixtures().readRequest({ - headers: { - 'x-algolia-application-id': 'foo', - 'x-default-header': 'Default value', - 'x-algolia-api-key': 'apiKey', - 'content-type': 'application/x-www-form-urlencoded', - }, - }) - ) - ) - ).once(); - }); - - it('allows to add headers per read/write and override the default ones', async () => { - await transporter.read(transporterRequest, { - headers: { - 'X-Algolia-Application-Id': 'foo', - 'X-Default-Header': 'My custom header', - }, - }); - - verify( - requesterMock.send( - deepEqual( - createFixtures().readRequest({ - headers: { - 'x-algolia-api-key': 'apiKey', - 'x-algolia-application-id': 'foo', - 'content-type': 'application/x-www-form-urlencoded', - 'x-default-header': 'My custom header', - }, - }) - ) - ) - ).once(); - }); -}); diff --git a/packages/transporter/src/__tests__/unit/hosts.test.ts b/packages/transporter/src/__tests__/unit/hosts.test.ts deleted file mode 100644 index 72342630b..000000000 --- a/packages/transporter/src/__tests__/unit/hosts.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Requester } from '@algolia/requester-common'; -import { anything, deepEqual, spy, verify, when } from 'ts-mockito'; - -import { CallEnum, createStatelessHost, Transporter } from '../..'; -import { createFakeRequester, createFixtures } from '../fixtures'; - -let requesterMock: Requester; -let transporter: Transporter; - -beforeEach(() => { - const requester = createFakeRequester(); - requesterMock = spy(requester); - transporter = createFixtures().transporter(requester); - - when(requesterMock.send(anything())).thenResolve({ - content: '{}', - status: 500, - isTimedOut: false, - }); -}); - -const transporterRequest = createFixtures().transporterRequest(); - -describe('selection of hosts', (): void => { - it('select only readable hosts when calling the `read` method', async () => { - await expect(transporter.read(transporterRequest)).rejects.toMatchObject({ - name: 'RetryError', - }); - - verify(requesterMock.send(deepEqual(createFixtures().readRequest()))).once(); - verify(requesterMock.send(deepEqual(createFixtures().writeRequest()))).never(); - verify( - requesterMock.send( - deepEqual( - createFixtures().readAndWriteRequest({ - responseTimeout: 2, - url: 'https://read-and-write.com/save', - }) - ) - ) - ).once(); - }); - - it('select only writable hosts when calling the `write` method', async () => { - await expect(transporter.write(transporterRequest)).rejects.toMatchObject({ - name: 'RetryError', - }); - - verify(requesterMock.send(deepEqual(createFixtures().readRequest()))).never(); - verify(requesterMock.send(deepEqual(createFixtures().writeRequest()))).once(); - verify( - requesterMock.send( - deepEqual( - createFixtures().writeRequest({ - responseTimeout: 30, - url: 'https://read-and-write.com/save', - }) - ) - ) - ).once(); - }); - - it('defaults to `https` and `any`', () => { - const host = createStatelessHost({ url: 'foo.com' }); - - expect(host).toEqual({ - url: 'foo.com', - accept: CallEnum.Any, - protocol: 'https', - }); - }); - - it('allows a string to be passed', () => { - const host = createStatelessHost('foo.com'); - - expect(host).toEqual({ - url: 'foo.com', - accept: CallEnum.Any, - protocol: 'https', - }); - }); -}); diff --git a/packages/transporter/src/__tests__/unit/query-parameters.test.ts b/packages/transporter/src/__tests__/unit/query-parameters.test.ts deleted file mode 100644 index bfe6abad0..000000000 --- a/packages/transporter/src/__tests__/unit/query-parameters.test.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Requester } from '@algolia/requester-common'; -import { anything, deepEqual, spy, verify, when } from 'ts-mockito'; - -import { Transporter } from '../..'; -import { createFakeRequester, createFixtures } from '../fixtures'; - -let requesterMock: Requester; -let transporter: Transporter; - -beforeEach(() => { - const requester = createFakeRequester(); - requesterMock = spy(requester); - transporter = createFixtures().transporter(requester); - - when(requesterMock.send(anything())).thenResolve({ - content: '{}', - status: 200, - isTimedOut: false, - }); -}); - -const transporterRequest = createFixtures().transporterRequest(); - -describe('usage of query parameters', () => { - it('allows to set query parameters', async () => { - Object.assign(transporter.queryParameters, { 'x-foo': 'foo' }); - - await transporter.write(transporterRequest); - - verify( - requesterMock.send( - deepEqual( - createFixtures().writeRequest({ - url: 'https://write.com/save?x-foo=foo', - }) - ) - ) - ).once(); - }); - - it('allows to add query parameters per read/write', async () => { - await transporter.read(transporterRequest, { - queryParameters: { - 'x-bar': 'bar', - }, - }); - - verify( - requesterMock.send( - deepEqual( - createFixtures().readRequest({ - url: 'https://read.com/save?x-bar=bar', - }) - ) - ) - ).once(); - }); - - it('allows to add query parameters per read/write and override the default ones', async () => { - await transporter.read(transporterRequest, { - queryParameters: { - 'x-foo': 'My custom foo', - 'x-bar': 'My custom bar', - }, - }); - - verify( - requesterMock.send( - deepEqual( - createFixtures().readRequest({ - url: 'https://read.com/save?x-foo=My%20custom%20foo&x-bar=My%20custom%20bar', - }) - ) - ) - ).once(); - }); -}); diff --git a/packages/transporter/src/__tests__/unit/request-options.test.ts b/packages/transporter/src/__tests__/unit/request-options.test.ts deleted file mode 100644 index 3b3c86051..000000000 --- a/packages/transporter/src/__tests__/unit/request-options.test.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { createMappedRequestOptions } from '../..'; - -describe('request options', () => { - it('has default values', () => { - const result = createMappedRequestOptions(undefined); - - expect(result.data).toEqual(undefined); - expect(result.headers).toEqual({}); - expect(result.queryParameters).toEqual({}); - expect(result.timeout).toEqual(undefined); - }); - - it('maps request options', () => { - const result = createMappedRequestOptions({ - extra: 'two', - 'another-extra': 'four', - timeout: 2, - queryParameters: { - userId: 'foo', - }, - headers: { - 'X-Algolia-Foo': 'bar', - }, - }); - - expect(result.data).toEqual({ - extra: 'two', - 'another-extra': 'four', - }); - expect(result.headers).toEqual({ 'X-Algolia-Foo': 'bar' }); - expect(result.queryParameters).toEqual({ - userId: 'foo', - }); - expect(result.timeout).toEqual(2); - }); - - it('maps request options with data', () => { - const result = createMappedRequestOptions({ - data: { - foo: 'bar', - }, - }); - - expect(result.data).toEqual({ - foo: 'bar', - }); - }); - - it('ignores empty data maps', () => { - const result = createMappedRequestOptions({ - data: {}, - }); - - expect(result.data).toBeUndefined(); - }); -}); diff --git a/packages/transporter/src/__tests__/unit/retry-strategy.test.ts b/packages/transporter/src/__tests__/unit/retry-strategy.test.ts deleted file mode 100644 index 5c838952c..000000000 --- a/packages/transporter/src/__tests__/unit/retry-strategy.test.ts +++ /dev/null @@ -1,318 +0,0 @@ -import { Requester } from '@algolia/requester-common'; -import { anything, deepEqual, spy, verify, when } from 'ts-mockito'; - -import { createStatefulHost, Transporter } from '../..'; -import { createRetryableOptions } from '../../concerns/createRetryableOptions'; -import { createStatelessHost } from '../../createStatelessHost'; -import { HostStatusEnum } from '../../types'; -import { createFakeRequester, createFixtures } from '../fixtures'; - -let requesterMock: Requester; -let transporter: Transporter; - -const transporterRequest = createFixtures().transporterRequest(); - -const defaultHost = () => Promise.resolve(undefined); - -describe('retry strategy', () => { - beforeEach(() => { - const requester = createFakeRequester(); - requesterMock = spy(requester); - transporter = createFixtures().transporter(requester); - - when(requesterMock.send(anything())).thenResolve({ - content: '{"hits": [{"name": "Star Wars"}]}', - status: 200, - isTimedOut: false, - }); - }); - - it('retries after a timeout', async () => { - when(requesterMock.send(deepEqual(createFixtures().writeRequest()))).thenResolve({ - content: '', - status: 0, - isTimedOut: true, - }); - - await transporter.write(transporterRequest, {}); - - const expectationHost = createStatefulHost(transporter.hosts[1], HostStatusEnum.Timeouted); - - // @ts-ignore - delete expectationHost.lastUpdate; - - await expect( - transporter.hostsCache.get(transporter.hosts[1], defaultHost) - ).resolves.toMatchObject(expectationHost); - await expect( - transporter.hostsCache.get(transporter.hosts[0], defaultHost) - ).resolves.toBeUndefined(); - await expect( - transporter.hostsCache.get(transporter.hosts[2], defaultHost) - ).resolves.toBeUndefined(); - - verify(requesterMock.send(anything())).twice(); - }); - - it('retries after a network error', async () => { - when(requesterMock.send(deepEqual(createFixtures().readRequest()))).thenResolve({ - content: '', - status: 0, - isTimedOut: false, - }); - - await transporter.read(transporterRequest, {}); - - verify(requesterMock.send(anything())).twice(); - - await expect( - transporter.hostsCache.get(transporter.hosts[1], defaultHost) - ).resolves.toBeUndefined(); - await expect( - transporter.hostsCache.get(transporter.hosts[0], defaultHost) - ).resolves.toBeTruthy(); - await expect( - transporter.hostsCache.get(transporter.hosts[2], defaultHost) - ).resolves.toBeUndefined(); - }); - - it('retries after a 1xx', async () => { - when(requesterMock.send(deepEqual(createFixtures().readRequest()))).thenResolve({ - content: '', - status: 101, - isTimedOut: false, - }); - - await transporter.read(transporterRequest); - - verify(requesterMock.send(anything())).twice(); - - await expect( - transporter.hostsCache.get(transporter.hosts[1], defaultHost) - ).resolves.toBeUndefined(); - await expect( - transporter.hostsCache.get(transporter.hosts[0], defaultHost) - ).resolves.toBeTruthy(); - await expect( - transporter.hostsCache.get(transporter.hosts[2], defaultHost) - ).resolves.toBeUndefined(); - }); - - it('do not retry after a 2xx', async () => { - type SearchResponse = { - readonly hits: ReadonlyArray<{ readonly name: string }>; - }; - - const response = await transporter.read(transporterRequest, {}); - - expect(response.hits[0].name).toBe('Star Wars'); - verify(requesterMock.send(anything())).once(); - - await expect( - transporter.hostsCache.get(transporter.hosts[1], defaultHost) - ).resolves.toBeUndefined(); - await expect( - transporter.hostsCache.get(transporter.hosts[0], defaultHost) - ).resolves.toBeUndefined(); - await expect( - transporter.hostsCache.get(transporter.hosts[2], defaultHost) - ).resolves.toBeUndefined(); - }); - - it('retries after a 3xx', async () => { - when(requesterMock.send(deepEqual(createFixtures().readRequest()))).thenResolve({ - content: '', - status: 300, - isTimedOut: false, - }); - - await transporter.read(transporterRequest); - - verify(requesterMock.send(anything())).twice(); - - await expect( - transporter.hostsCache.get(transporter.hosts[1], defaultHost) - ).resolves.toBeUndefined(); - await expect( - transporter.hostsCache.get(transporter.hosts[0], defaultHost) - ).resolves.toBeTruthy(); - await expect( - transporter.hostsCache.get(transporter.hosts[2], defaultHost) - ).resolves.toBeUndefined(); - }); - - it('do not retry after a 4xx', async () => { - when(requesterMock.send(deepEqual(createFixtures().writeRequest()))).thenResolve({ - content: JSON.stringify({ - message: 'Invalid Application ID', - status: 404, - }), - status: 404, - isTimedOut: false, - }); - - await expect(transporter.write(transporterRequest)).rejects.toMatchObject({ - name: 'ApiError', - message: 'Invalid Application ID', - status: 404, - }); - - verify(requesterMock.send(anything())).once(); - - await expect( - transporter.hostsCache.get(transporter.hosts[1], defaultHost) - ).resolves.toBeUndefined(); - await expect( - transporter.hostsCache.get(transporter.hosts[0], defaultHost) - ).resolves.toBeUndefined(); - await expect( - transporter.hostsCache.get(transporter.hosts[2], defaultHost) - ).resolves.toBeUndefined(); - }); - - it('retries after a 5xx', async () => { - when(requesterMock.send(deepEqual(createFixtures().writeRequest()))).thenResolve({ - content: '', - status: 500, - isTimedOut: false, - }); - - await transporter.write(transporterRequest, {}); - - verify(requesterMock.send(anything())).twice(); - - await expect( - transporter.hostsCache.get(transporter.hosts[1], defaultHost) - ).resolves.toBeTruthy(); - await expect( - transporter.hostsCache.get(transporter.hosts[0], defaultHost) - ).resolves.toBeUndefined(); - await expect( - transporter.hostsCache.get(transporter.hosts[2], defaultHost) - ).resolves.toBeUndefined(); - }); - - it('takes cache in consideration', async () => { - when(requesterMock.send(deepEqual(createFixtures().writeRequest()))).thenResolve({ - content: '', - status: 500, - isTimedOut: false, - }); - - await transporter.write(transporterRequest, {}); - - verify(requesterMock.send(anything())).twice(); - - await transporter.write(transporterRequest, {}); - - verify(requesterMock.send(anything())).times(3); // +1 - }); - - it('respects TTL', async () => { - // Set one host down. - await transporter.hostsCache.set(transporter.hosts[0], { - ...createStatefulHost(transporter.hosts[0], HostStatusEnum.Down), - lastUpdate: Date.now() - 60 * 2 * 1000 + 10, // should be down - }); - - expect( - (await createRetryableOptions(transporter.hostsCache, transporter.hosts)).statelessHosts - ).toHaveLength(2); - - await transporter.hostsCache.set(transporter.hosts[0], { - ...createStatefulHost( - createStatelessHost({ - url: 'read.com', - }) - ), - lastUpdate: Date.now() - 60 * 2 * 1000 - 20, - }); - expect( - (await createRetryableOptions(transporter.hostsCache, transporter.hosts)).statelessHosts - ).toHaveLength(3); - }); - - it('respests hosts order', async () => { - // Default - expect( - (await createRetryableOptions(transporter.hostsCache, transporter.hosts)).statelessHosts[0] - ).toEqual(transporter.hosts[0]); - - // Remove one host - await transporter.hostsCache.set( - transporter.hosts[0], - createStatefulHost(transporter.hosts[0], HostStatusEnum.Down) - ); - expect( - (await createRetryableOptions(transporter.hostsCache, transporter.hosts)).statelessHosts[0] - ).toEqual(transporter.hosts[1]); - - expect( - (await createRetryableOptions(transporter.hostsCache, transporter.hosts)).statelessHosts - ).toHaveLength(2); - - // Remove all down - await transporter.hostsCache.set( - transporter.hosts[1], - createStatefulHost(transporter.hosts[1], HostStatusEnum.Down) - ); - await transporter.hostsCache.set( - transporter.hosts[2], - createStatefulHost(transporter.hosts[2], HostStatusEnum.Down) - ); - expect( - (await createRetryableOptions(transporter.hostsCache, transporter.hosts)).statelessHosts[0] - ).toEqual(transporter.hosts[0]); - expect( - (await createRetryableOptions(transporter.hostsCache, transporter.hosts)).statelessHosts - ).toHaveLength(3); - }); - - it('gives all hosts when all are down', async () => { - await transporter.hostsCache.set( - transporter.hosts[0], - createStatefulHost(transporter.hosts[0], HostStatusEnum.Down) - ); - await transporter.hostsCache.set( - transporter.hosts[1], - createStatefulHost(transporter.hosts[1], HostStatusEnum.Down) - ); - await transporter.hostsCache.set( - transporter.hosts[2], - createStatefulHost(transporter.hosts[2], HostStatusEnum.Down) - ); - - expect( - (await createRetryableOptions(transporter.hostsCache, transporter.hosts)).statelessHosts - ).toHaveLength(3); - - await transporter.hostsCache.set(transporter.hosts[0], { - ...createStatefulHost(transporter.hosts[0], HostStatusEnum.Down), - lastUpdate: Date.now() - 60 * 2 * 1000 - 20, // should be up - }); - - expect( - (await createRetryableOptions(transporter.hostsCache, transporter.hosts)).statelessHosts - ).toHaveLength(1); - - await transporter.hostsCache.set( - transporter.hosts[0], - createStatefulHost(transporter.hosts[0], HostStatusEnum.Timeouted) - ); - - expect( - (await createRetryableOptions(transporter.hostsCache, transporter.hosts)).statelessHosts - ).toHaveLength(1); - }); - - it('sets timeouted hosts on the end of the list', async () => { - await transporter.hostsCache.set( - transporter.hosts[0], - createStatefulHost(transporter.hosts[0], HostStatusEnum.Timeouted) - ); - - expect( - (await createRetryableOptions(transporter.hostsCache, transporter.hosts)).statelessHosts[0] - ).toEqual(transporter.hosts[1]); - }); -}); diff --git a/packages/transporter/src/__tests__/unit/serializer.test.ts b/packages/transporter/src/__tests__/unit/serializer.test.ts deleted file mode 100644 index 6238fe1b0..000000000 --- a/packages/transporter/src/__tests__/unit/serializer.test.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Requester } from '@algolia/requester-common'; -import { anything, deepEqual, spy, verify, when } from 'ts-mockito'; - -import { createStatelessHost, serializeQueryParameters, Transporter } from '../..'; -import { CallEnum } from '../../types'; -import { createFakeRequester, createFixtures } from '../fixtures'; - -let requesterMock: Requester; -let transporter: Transporter; - -beforeEach(() => { - const requester = createFakeRequester(); - requesterMock = spy(requester); - transporter = createFixtures().transporter(requester); - - when(requesterMock.send(anything())).thenResolve({ - content: '{}', - status: 200, - isTimedOut: false, - }); -}); - -describe('serializer', () => { - it('serializes url with / ', async () => { - const transporterRequest = createFixtures().transporterRequest(); - await transporter.write(transporterRequest); - await transporter.write({ - ...transporterRequest, - path: '/save', - }); - - verify(requesterMock.send(deepEqual(createFixtures().writeRequest()))).twice(); - }); - - it('serializes url protocol', async () => { - const transporterRequest = createFixtures().transporterRequest(); - - transporter.hosts = [ - { - protocol: 'http', - url: 'localhost.com', - accept: CallEnum.Read, - }, - ].map(host => createStatelessHost(host)); - - await transporter.read(transporterRequest); - - verify( - requesterMock.send( - deepEqual( - createFixtures().readRequest({ - url: 'http://localhost.com/save', - }) - ) - ) - ).once(); - }); - - it('serializes query parameters', () => { - // @todo change this to an more integration level. - expect( - serializeQueryParameters({ - str: 'foo', - obj: { foo: 1 }, - arr: ['nuno', 'chloe'], - bool: true, - }) - ).toEqual('str=foo&obj=%7B%22foo%22%3A1%7D&arr=%5B%22nuno%22%2C%22chloe%22%5D&bool=true'); - }); -}); diff --git a/packages/transporter/src/__tests__/unit/stackTrace.test.ts b/packages/transporter/src/__tests__/unit/stackTrace.test.ts deleted file mode 100644 index 0254a00a1..000000000 --- a/packages/transporter/src/__tests__/unit/stackTrace.test.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { version } from '@algolia/client-common'; -import { createNullLogger, Logger } from '@algolia/logger-common'; -import { Requester } from '@algolia/requester-common'; -import { anything, deepEqual, spy, verify, when } from 'ts-mockito'; - -import { Transporter } from '../..'; -import { createFakeRequester, createFixtures } from '../fixtures'; - -let requesterMock: Requester; -let loggerMock: Logger; -let transporter: Transporter; - -beforeEach(() => { - const requester = createFakeRequester(); - requesterMock = spy(requester); - - const logger = createNullLogger(); - loggerMock = spy(logger); - - transporter = createFixtures().transporter(requester, { - logger, - }); - - when(requesterMock.send(anything())).thenResolve({ - content: 'Internal Error', - status: 500, - isTimedOut: false, - }); -}); - -const transporterRequest = createFixtures().transporterRequest(); - -describe('transporter stack trace serialization', () => { - it('removes credentials', async () => { - const transporterStackTrace = [ - { - host: { - accept: 1, - protocol: 'https', - url: 'read.com', - }, - request: { - connectTimeout: 1, - data: '{}', - headers: { - 'content-type': 'application/x-www-form-urlencoded', - 'x-algolia-api-key': '*****', - 'x-algolia-application-id': 'appId', - 'x-default-header': 'Default value', - }, - method: 'POST', - responseTimeout: 2, - url: `https://read.com/save?x-algolia-agent=Algolia%20for%20JavaScript%20(${version})%3B%20Browser`, - }, - response: { - content: 'Internal Error', - isTimedOut: false, - status: 500, - }, - triesLeft: 1, - }, - { - host: { - accept: 3, - protocol: 'https', - url: 'read-and-write.com', - }, - request: { - connectTimeout: 1, - data: '{}', - headers: { - 'content-type': 'application/x-www-form-urlencoded', - 'x-algolia-api-key': '*****', - 'x-algolia-application-id': 'appId', - 'x-default-header': 'Default value', - }, - method: 'POST', - responseTimeout: 2, - url: `https://read-and-write.com/save?x-algolia-agent=Algolia%20for%20JavaScript%20(${version})%3B%20Browser`, - }, - response: { - content: 'Internal Error', - isTimedOut: false, - status: 500, - }, - triesLeft: 0, - }, - ]; - - await expect(transporter.read(transporterRequest)).rejects.toEqual({ - name: 'RetryError', - message: - 'Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.', - transporterStackTrace, - }); - - // assert headers did not got mutated - await expect(transporter.headers).toEqual({ - 'content-type': 'application/x-www-form-urlencoded', - 'x-algolia-api-key': 'apiKey', - 'x-algolia-application-id': 'appId', - 'X-Default-Header': 'Default value', - }); - - // assert logger received retriable failures - await verify(loggerMock.info('Retryable failure', deepEqual(transporterStackTrace[0]))).times( - 1 - ); - await verify(loggerMock.info('Retryable failure', deepEqual(transporterStackTrace[1]))).times( - 1 - ); - }); -}); diff --git a/packages/transporter/src/__tests__/unit/timeouts.test.ts b/packages/transporter/src/__tests__/unit/timeouts.test.ts deleted file mode 100644 index ee7454bc5..000000000 --- a/packages/transporter/src/__tests__/unit/timeouts.test.ts +++ /dev/null @@ -1,182 +0,0 @@ -import { Requester } from '@algolia/requester-common'; -import { anything, deepEqual, spy, verify, when } from 'ts-mockito'; - -import { createStatefulHost, Transporter } from '../..'; -import { createStatelessHost } from '../../createStatelessHost'; -import { CallEnum, HostStatusEnum } from '../../types'; -import { createFakeRequester, createFixtures } from '../fixtures'; - -let requesterMock: Requester; -let transporter: Transporter; - -beforeEach(() => { - const requester = createFakeRequester(); - requesterMock = spy(requester); - transporter = createFixtures().transporter(requester); - - when(requesterMock.send(anything())).thenResolve({ - content: '{}', - status: 200, - isTimedOut: false, - }); -}); - -const transporterRequest = createFixtures().transporterRequest(); - -describe('the timeouts selection', () => { - it('uses read default value', async () => { - await transporter.read(transporterRequest); - - verify(requesterMock.send(deepEqual(createFixtures().readRequest()))).once(); - verify(requesterMock.send(anything())).once(); - }); - - it('uses write default value', async () => { - await transporter.write(transporterRequest); - verify(requesterMock.send(deepEqual(createFixtures().writeRequest()))).once(); - verify(requesterMock.send(anything())).once(); - }); - - it('uses overrides read default value with request options', async () => { - await transporter.read(transporterRequest, { timeout: 5 }); - - verify( - requesterMock.send( - deepEqual( - createFixtures().readRequest({ - responseTimeout: 5, - }) - ) - ) - ).once(); - verify(requesterMock.send(anything())).once(); - }); - - it('uses overrides write default value with request options', async () => { - await transporter.write(transporterRequest, { timeout: 25 }); - verify( - requesterMock.send( - deepEqual( - createFixtures().writeRequest({ - responseTimeout: 25, - }) - ) - ) - ).once(); - }); - - it('increases timeout based on number of retries', async () => { - when(requesterMock.send(anything())).thenResolve({ - content: '{}', - status: 500, - isTimedOut: true, - }); - - // @ts-ignore - transporter.hosts = [ - ...transporter.hosts, - { url: 'another-read-host.com', accept: CallEnum.Read }, - ].map(host => createStatelessHost(host)); - - const assertRequest = (request: object) => { - return verify(requesterMock.send(deepEqual(createFixtures().readRequest(request)))).once(); - }; - - // First, let's test that the timeouts increase. - await expect(transporter.read(transporterRequest)).rejects.toMatchObject({ - name: 'RetryError', - message: - 'Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.', - }); - - assertRequest({ - url: 'https://read.com/save', - connectTimeout: 1, - responseTimeout: 2, - }); - - assertRequest({ - url: 'https://read-and-write.com/save', - connectTimeout: 4, - responseTimeout: 8, - }); - - assertRequest({ - url: 'https://another-read-host.com/save', - connectTimeout: 5, - responseTimeout: 10, - }); - - // Then, let's test that the timeouts are kept on the next search - await expect(transporter.read(transporterRequest)).rejects.toMatchObject({ - name: 'RetryError', - message: - 'Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.', - }); - - assertRequest({ - url: 'https://read.com/save', - connectTimeout: 6, - responseTimeout: 12, - }); - - assertRequest({ - url: 'https://read-and-write.com/save', - connectTimeout: 7, - responseTimeout: 14, - }); - - assertRequest({ - url: 'https://another-read-host.com/save', - connectTimeout: 8, - responseTimeout: 16, - }); - - // Finally, let's test that the timeouts are not kept if the lastUpdate - // of the host was long time ago. - await transporter.hostsCache.set(transporter.hosts[0], { - ...createStatefulHost(transporter.hosts[0], HostStatusEnum.Timeout), - lastUpdate: Date.now() - 60 * 2 * 1000 - 20, // should be up now! - }); - - await expect(transporter.read(transporterRequest)).rejects.toMatchObject({ - name: 'RetryError', - message: - 'Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.', - }); - - assertRequest({ - url: 'https://read.com/save', - connectTimeout: 5, - responseTimeout: 10, - }); - - assertRequest({ - url: 'https://read-and-write.com/save', - connectTimeout: 6, - responseTimeout: 12, - }); - - assertRequest({ - url: 'https://another-read-host.com/save', - connectTimeout: 7, - responseTimeout: 14, - }); - }); - - it('proxies to default timeout when timeout is 0', async () => { - when(requesterMock.send(anything())).thenResolve({ - content: '{}', - status: 200, - isTimedOut: false, - }); - - await expect( - transporter.read(transporterRequest, { - timeout: 0, - }) - ).resolves.toEqual({}); - - verify(requesterMock.send(deepEqual(createFixtures().readRequest()))).once(); - }); -}); diff --git a/packages/transporter/src/__tests__/unit/user-agent.test.ts b/packages/transporter/src/__tests__/unit/user-agent.test.ts deleted file mode 100644 index 97c3e1676..000000000 --- a/packages/transporter/src/__tests__/unit/user-agent.test.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { createUserAgent } from '../..'; - -describe('user agent', () => { - it('contains a default value', () => { - expect(createUserAgent('1.0.0').value).toEqual('Algolia for JavaScript (1.0.0)'); - }); - - it('allows to add other api clients', () => { - const userAgent = createUserAgent('1.0.0'); - - expect(userAgent.value).toEqual('Algolia for JavaScript (1.0.0)'); - - expect( - userAgent.add({ - segment: 'JS Helper', - version: '2.0.0', - }).value - ).toEqual('Algolia for JavaScript (1.0.0); JS Helper (2.0.0)'); - - expect(userAgent.value).toEqual('Algolia for JavaScript (1.0.0); JS Helper (2.0.0)'); - - expect( - userAgent.add({ - segment: 'React Native (3.0.0)', - }).value - ).toEqual('Algolia for JavaScript (1.0.0); JS Helper (2.0.0); React Native (3.0.0)'); - - expect(userAgent.value).toEqual( - 'Algolia for JavaScript (1.0.0); JS Helper (2.0.0); React Native (3.0.0)' - ); - }); - - it('is idempotent', () => { - const userAgent = createUserAgent('1.0.0'); - - expect( - userAgent.add({ - segment: 'React Native (3.0.0)', - }).value - ).toEqual('Algolia for JavaScript (1.0.0); React Native (3.0.0)'); - - expect( - userAgent.add({ - segment: 'React Native', - version: '3.0.0', - }).value - ).toEqual('Algolia for JavaScript (1.0.0); React Native (3.0.0)'); - }); -}); diff --git a/packages/transporter/src/concerns/createRetryableOptions.ts b/packages/transporter/src/concerns/createRetryableOptions.ts deleted file mode 100644 index 08f368317..000000000 --- a/packages/transporter/src/concerns/createRetryableOptions.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Cache } from '@algolia/cache-common'; - -import { - createStatefulHost, - createStatelessHost, - isStatefulHostTimeouted, - isStatefulHostUp, - StatelessHost, -} from '..'; - -export type RetryableOptions = { - readonly statelessHosts: readonly StatelessHost[]; - readonly getTimeout: (retryCount: number, timeout: number) => number; -}; - -export function createRetryableOptions( - hostsCache: Cache, - statelessHosts: readonly StatelessHost[] -): Readonly> { - return Promise.all( - statelessHosts.map(statelessHost => { - return hostsCache.get(statelessHost, () => { - return Promise.resolve(createStatefulHost(statelessHost)); - }); - }) - ).then(statefulHosts => { - const hostsUp = statefulHosts.filter(host => isStatefulHostUp(host)); - const hostsTimeouted = statefulHosts.filter(host => isStatefulHostTimeouted(host)); - - /** - * Note, we put the hosts that previously timeouted on the end of the list. - */ - const hostsAvailable = [...hostsUp, ...hostsTimeouted]; - - const statelessHostsAvailable = - hostsAvailable.length > 0 - ? hostsAvailable.map(host => createStatelessHost(host)) - : statelessHosts; - - return { - getTimeout(timeoutsCount: number, baseTimeout: number): number { - /** - * Imagine that you have 4 hosts, if timeouts will increase - * on the following way: 1 (timeouted) > 4 (timeouted) > 5 (200) - * - * Note that, the very next request, we start from the previous timeout - * - * 5 (timeouted) > 6 (timeouted) > 7 ... - * - * This strategy may need to be reviewed, but is the strategy on the our - * current v3 version. - */ - const timeoutMultiplier = - hostsTimeouted.length === 0 && timeoutsCount === 0 - ? 1 - : hostsTimeouted.length + 3 + timeoutsCount; - - return timeoutMultiplier * baseTimeout; - }, - statelessHosts: statelessHostsAvailable, - }; - }); -} diff --git a/packages/transporter/src/concerns/retryDecision.ts b/packages/transporter/src/concerns/retryDecision.ts deleted file mode 100644 index 4c8a7bb57..000000000 --- a/packages/transporter/src/concerns/retryDecision.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Response } from '@algolia/requester-common'; - -const isNetworkError = ({ isTimedOut, status }: Response): boolean => { - return !isTimedOut && ~~status === 0; -}; - -const isRetryable = (response: Response): boolean => { - const status = response.status; - const isTimedOut = response.isTimedOut; - - return ( - isTimedOut || isNetworkError(response) || (~~(status / 100) !== 2 && ~~(status / 100) !== 4) - ); -}; - -const isSuccess = ({ status }: Response): boolean => { - return ~~(status / 100) === 2; -}; - -export const retryDecision = ( - response: Response, - outcomes: Outcomes -): Readonly> => { - if (isRetryable(response)) { - return outcomes.onRetry(response); - } - - if (isSuccess(response)) { - return outcomes.onSuccess(response); - } - - return outcomes.onFail(response); -}; - -export type Outcomes = { - readonly onFail: (response: Response) => Readonly>; - readonly onSuccess: (response: Response) => Readonly>; - readonly onRetry: (response: Response) => Readonly>; -}; diff --git a/packages/transporter/src/concerns/retryableRequest.ts b/packages/transporter/src/concerns/retryableRequest.ts deleted file mode 100644 index 0d9f29de2..000000000 --- a/packages/transporter/src/concerns/retryableRequest.ts +++ /dev/null @@ -1,154 +0,0 @@ -import { MethodEnum, Response } from '@algolia/requester-common'; - -import { - createRetryError, - createStatefulHost, - deserializeFailure, - deserializeSuccess, - HostStatusEnum, - MappedRequestOptions, - Request, - serializeData, - serializeHeaders, - serializeUrl, - StackFrame, - stackFrameWithoutCredentials, - stackTraceWithoutCredentials, - StatelessHost, - Transporter, -} from '..'; -import { createRetryableOptions } from './createRetryableOptions'; -import { Outcomes, retryDecision } from './retryDecision'; - -export function retryableRequest( - transporter: Transporter, - statelessHosts: readonly StatelessHost[], - request: Request, - requestOptions: MappedRequestOptions -): Readonly> { - const stackTrace: StackFrame[] = []; // eslint-disable-line functional/prefer-readonly-type - - /** - * First we prepare the payload that do not depend from hosts. - */ - const data = serializeData(request, requestOptions); - const headers = serializeHeaders(transporter, requestOptions); - const method = request.method; - - // On `GET`, the data is proxied to query parameters. - const dataQueryParameters: Record = - request.method !== MethodEnum.Get - ? {} - : { - ...request.data, - ...requestOptions.data, - }; - - const queryParameters = { - 'x-algolia-agent': transporter.userAgent.value, - ...transporter.queryParameters, - ...dataQueryParameters, - ...requestOptions.queryParameters, - }; - - let timeoutsCount = 0; // eslint-disable-line functional/no-let - - const retry = ( - hosts: StatelessHost[], // eslint-disable-line functional/prefer-readonly-type - getTimeout: (timeoutsCount: number, timeout: number) => number - ): Readonly> => { - /** - * We iterate on each host, until there is no host left. - */ - const host = hosts.pop(); // eslint-disable-line functional/immutable-data - if (host === undefined) { - throw createRetryError(stackTraceWithoutCredentials(stackTrace)); - } - - const payload = { - data, - headers, - method, - url: serializeUrl(host, request.path, queryParameters), - connectTimeout: getTimeout(timeoutsCount, transporter.timeouts.connect), - responseTimeout: getTimeout(timeoutsCount, requestOptions.timeout as number), - }; - - /** - * The stackFrame is pushed to the stackTrace so we - * can have information about onRetry and onFailure - * decisions. - */ - const pushToStackTrace = (response: Response): StackFrame => { - const stackFrame: StackFrame = { - request: payload, - response, - host, - triesLeft: hosts.length, - }; - - // eslint-disable-next-line functional/immutable-data - stackTrace.push(stackFrame); - - return stackFrame; - }; - - const decisions: Outcomes = { - onSuccess: response => deserializeSuccess(response), - onRetry(response) { - const stackFrame = pushToStackTrace(response); - - /** - * If response is a timeout, we increaset the number of - * timeouts so we can increase the timeout later. - */ - if (response.isTimedOut) { - timeoutsCount++; - } - - return Promise.all([ - /** - * Failures are individually send the logger, allowing - * the end user to debug / store stack frames even - * when a retry error does not happen. - */ - transporter.logger.info('Retryable failure', stackFrameWithoutCredentials(stackFrame)), - - /** - * We also store the state of the host in failure cases. If the host, is - * down it will remain down for the next 2 minutes. In a timeout situation, - * this host will be added end of the list of hosts on the next request. - */ - transporter.hostsCache.set( - host, - createStatefulHost( - host, - response.isTimedOut ? HostStatusEnum.Timeouted : HostStatusEnum.Down - ) - ), - ]).then(() => retry(hosts, getTimeout)); - }, - onFail(response) { - pushToStackTrace(response); - - throw deserializeFailure(response, stackTraceWithoutCredentials(stackTrace)); - }, - }; - - return transporter.requester.send(payload).then(response => { - return retryDecision(response, decisions); - }); - }; - - /** - * Finally, for each retryable host perform request until we got a non - * retryable response. Some notes here: - * - * 1. The reverse here is applied so we can apply a `pop` later on => more performant. - * 2. We also get from the retryable options a timeout multiplier that is tailored - * for the current context. - */ - return createRetryableOptions(transporter.hostsCache, statelessHosts).then(options => { - return retry([...options.statelessHosts].reverse(), options.getTimeout); - }); -} diff --git a/packages/transporter/src/createMappedRequestOptions.ts b/packages/transporter/src/createMappedRequestOptions.ts deleted file mode 100644 index 2054a3ddb..000000000 --- a/packages/transporter/src/createMappedRequestOptions.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { MappedRequestOptions, RequestOptions } from '.'; - -export function createMappedRequestOptions( - requestOptions?: RequestOptions, - timeout?: number -): MappedRequestOptions { - const options: RequestOptions = requestOptions || {}; - - const data: Record = options.data || {}; - - Object.keys(options).forEach(key => { - if (['timeout', 'headers', 'queryParameters', 'data', 'cacheable'].indexOf(key) === -1) { - data[key] = options[key]; // eslint-disable-line functional/immutable-data - } - }); - - return { - data: Object.entries(data).length > 0 ? data : undefined, - timeout: options.timeout || timeout, - headers: options.headers || {}, - queryParameters: options.queryParameters || {}, - cacheable: options.cacheable, - }; -} diff --git a/packages/transporter/src/createStatefulHost.ts b/packages/transporter/src/createStatefulHost.ts deleted file mode 100644 index 1a4621d48..000000000 --- a/packages/transporter/src/createStatefulHost.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { HostStatusType, StatefulHost, StatelessHost } from '.'; -import { HostStatusEnum } from './types'; - -// By default, API Clients at Algolia have expiration delay -// of 5 mins. In the JavaScript client, we have 2 mins. -const EXPIRATION_DELAY = 2 * 60 * 1000; - -export function createStatefulHost( - host: StatelessHost, - status: HostStatusType = HostStatusEnum.Up -): StatefulHost { - return { - ...host, - status, - lastUpdate: Date.now(), - }; -} - -export function isStatefulHostUp(host: StatefulHost): boolean { - return host.status === HostStatusEnum.Up || Date.now() - host.lastUpdate > EXPIRATION_DELAY; -} - -export function isStatefulHostTimeouted(host: StatefulHost): boolean { - return ( - host.status === HostStatusEnum.Timeouted && Date.now() - host.lastUpdate <= EXPIRATION_DELAY - ); -} diff --git a/packages/transporter/src/createStatelessHost.ts b/packages/transporter/src/createStatelessHost.ts deleted file mode 100644 index 08b04ac57..000000000 --- a/packages/transporter/src/createStatelessHost.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { CallEnum, HostOptions, StatelessHost } from '.'; - -export function createStatelessHost(options: HostOptions): StatelessHost { - if (typeof options === 'string') { - return { - protocol: 'https', - url: options, - accept: CallEnum.Any, - }; - } - - return { - protocol: options.protocol || 'https', - url: options.url, - accept: options.accept || CallEnum.Any, - }; -} diff --git a/packages/transporter/src/createTransporter.ts b/packages/transporter/src/createTransporter.ts deleted file mode 100644 index 278cf225e..000000000 --- a/packages/transporter/src/createTransporter.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { - CallEnum, - createMappedRequestOptions, - createStatelessHost, - Request, - RequestOptions, - Transporter, - TransporterOptions, -} from '.'; -import { retryableRequest } from './concerns/retryableRequest'; - -export function createTransporter(options: TransporterOptions): Transporter { - const { - hostsCache, - logger, - requester, - requestsCache, - responsesCache, - timeouts, - userAgent, - hosts, - queryParameters, - headers, - } = options; - - const transporter: Transporter = { - hostsCache, - logger, - requester, - requestsCache, - responsesCache, - timeouts, - userAgent, - headers, - queryParameters, - hosts: hosts.map(host => createStatelessHost(host)), - read( - request: Request, - requestOptions?: RequestOptions - ): Readonly> { - /** - * First, we compute the user request options. Now, keep in mind, - * that using request options the user is able to modified the intire - * payload of the request. Such as headers, query parameters, and others. - */ - const mappedRequestOptions = createMappedRequestOptions( - requestOptions, - transporter.timeouts.read - ); - - const createRetryableRequest = (): Readonly> => { - /** - * Then, we prepare a function factory that contains the construction of - * the retryable request. At this point, we may *not* perform the actual - * request. But we want to have the function factory ready. - */ - return retryableRequest( - transporter, - transporter.hosts.filter(host => (host.accept & CallEnum.Read) !== 0), - request, - mappedRequestOptions - ); - }; - - /** - * Once we have the function factory ready, we need to determine of the - * request is "cacheable" - should be cached. Note that, once again, - * the user can force this option. - */ - const cacheable = - mappedRequestOptions.cacheable !== undefined - ? mappedRequestOptions.cacheable - : request.cacheable; - - /** - * If is not "cacheable", we immediatly trigger the retryable request, no - * need to check cache implementations. - */ - if (cacheable !== true) { - return createRetryableRequest(); - } - - /** - * If the request is "cacheable", we need to first compute the key to ask - * the cache implementations if this request is on progress or if the - * response already exists on the cache. - */ - const key = { - request, - mappedRequestOptions, - transporter: { - queryParameters: transporter.queryParameters, - headers: transporter.headers, - }, - }; - - /** - * With the computed key, we first ask the responses cache - * implemention if this request was been resolved before. - */ - return transporter.responsesCache.get( - key, - () => { - /** - * If the request has never resolved before, we actually ask if there - * is a current request with the same key on progress. - */ - return transporter.requestsCache.get(key, () => { - return ( - transporter.requestsCache - /** - * Finally, if there is no request in progress with the same key, - * this `createRetryableRequest()` will actually trigger the - * retryable request. - */ - .set(key, createRetryableRequest()) - .then( - response => Promise.all([transporter.requestsCache.delete(key), response]), - err => Promise.all([transporter.requestsCache.delete(key), Promise.reject(err)]) - ) - .then(([_, response]) => response as TResponse) - ); - }); - }, - { - /** - * Of course, once we get this response back from the server, we - * tell response cache to actually store the received response - * to be used later. - */ - miss: response => transporter.responsesCache.set(key, response), - } - ); - }, - write( - request: Request, - requestOptions?: RequestOptions - ): Readonly> { - /** - * On write requests, no cache mechanisms are applied, and we - * proxy the request immediately to the requester. - */ - return retryableRequest( - transporter, - transporter.hosts.filter(host => (host.accept & CallEnum.Write) !== 0), - request, - createMappedRequestOptions(requestOptions, transporter.timeouts.write) - ); - }, - }; - - return transporter; -} diff --git a/packages/transporter/src/createUserAgent.ts b/packages/transporter/src/createUserAgent.ts deleted file mode 100644 index bf23a933e..000000000 --- a/packages/transporter/src/createUserAgent.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { UserAgent, UserAgentOptions } from '.'; - -export function createUserAgent(version: string): UserAgent { - const userAgent: UserAgent = { - value: `Algolia for JavaScript (${version})`, - add(options: UserAgentOptions): UserAgent { - const addedUserAgent = `; ${options.segment}${ - options.version !== undefined ? ` (${options.version})` : '' - }`; - - if (userAgent.value.indexOf(addedUserAgent) === -1) { - // eslint-disable-next-line functional/immutable-data - userAgent.value = `${userAgent.value}${addedUserAgent}`; - } - - return userAgent; - }, - }; - - return userAgent; -} diff --git a/packages/transporter/src/deserializer.ts b/packages/transporter/src/deserializer.ts deleted file mode 100644 index 07633a7bf..000000000 --- a/packages/transporter/src/deserializer.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Response } from '@algolia/requester-common'; - -import { createApiError, createDeserializationError, StackFrame } from '.'; - -export function deserializeSuccess(response: Response): TObject { - // eslint-disable-next-line functional/no-try-statement - try { - return JSON.parse(response.content); - } catch (e) { - throw createDeserializationError(e.message, response); - } -} - -export function deserializeFailure( - { content, status }: Response, - stackFrame: readonly StackFrame[] -): Error { - // eslint-disable-next-line functional/no-let - let message = content; - - // eslint-disable-next-line functional/no-try-statement - try { - message = JSON.parse(content).message; - } catch (e) { - // .. - } - - return createApiError(message, status, stackFrame); -} diff --git a/packages/transporter/src/errors/createApiError.ts b/packages/transporter/src/errors/createApiError.ts deleted file mode 100644 index 226e63b34..000000000 --- a/packages/transporter/src/errors/createApiError.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApiError, StackFrame } from '..'; - -export function createApiError( - message: string, - status: number, - transporterStackTrace: readonly StackFrame[] -): ApiError { - return { - name: 'ApiError', - message, - status, - transporterStackTrace, - }; -} diff --git a/packages/transporter/src/errors/createDeserializationError.ts b/packages/transporter/src/errors/createDeserializationError.ts deleted file mode 100644 index b26fe761e..000000000 --- a/packages/transporter/src/errors/createDeserializationError.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Response } from '@algolia/requester-common'; - -import { DeserializationError } from '..'; - -export function createDeserializationError( - message: string, - response: Response -): DeserializationError { - return { - name: 'DeserializationError', - message, - response, - }; -} diff --git a/packages/transporter/src/errors/createRetryError.ts b/packages/transporter/src/errors/createRetryError.ts deleted file mode 100644 index b317aaa0e..000000000 --- a/packages/transporter/src/errors/createRetryError.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { RetryError, StackFrame } from '..'; - -export function createRetryError(transporterStackTrace: readonly StackFrame[]): RetryError { - return { - name: 'RetryError', - message: - 'Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.', - transporterStackTrace, - }; -} diff --git a/packages/transporter/src/errors/index.ts b/packages/transporter/src/errors/index.ts deleted file mode 100644 index 04d68daf7..000000000 --- a/packages/transporter/src/errors/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createApiError'; -export * from './createDeserializationError'; -export * from './createRetryError'; diff --git a/packages/transporter/src/index.ts b/packages/transporter/src/index.ts deleted file mode 100644 index 05f5e4e8a..000000000 --- a/packages/transporter/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './createMappedRequestOptions'; -export * from './createStatefulHost'; -export * from './createStatelessHost'; -export * from './createTransporter'; -export * from './createUserAgent'; -export * from './deserializer'; -export * from './serializer'; -export * from './stackTrace'; -export * from './errors/index'; -export * from './types/index'; diff --git a/packages/transporter/src/serializer.ts b/packages/transporter/src/serializer.ts deleted file mode 100644 index 79f9a503a..000000000 --- a/packages/transporter/src/serializer.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { encode } from '@algolia/client-common'; -import { MethodEnum } from '@algolia/requester-common'; - -import { Headers, Request, RequestOptions, StatelessHost, Transporter } from '.'; - -export function serializeUrl( - host: StatelessHost, - path: string, - queryParameters: Readonly> -): string { - const queryParametersAsString = serializeQueryParameters(queryParameters); - // eslint-disable-next-line functional/no-let - let url = `${host.protocol}://${host.url}/${path.charAt(0) === '/' ? path.substr(1) : path}`; - - if (queryParametersAsString.length) { - url += `?${queryParametersAsString}`; - } - - return url; -} - -export function serializeQueryParameters(parameters: Readonly>): string { - const isObjectOrArray = (value: any): boolean => - Object.prototype.toString.call(value) === '[object Object]' || - Object.prototype.toString.call(value) === '[object Array]'; - - return Object.keys(parameters) - .map(key => - encode( - '%s=%s', - key, - isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key] - ) - ) - .join('&'); -} - -export function serializeData( - request: Request, - requestOptions: RequestOptions -): string | undefined { - if ( - request.method === MethodEnum.Get || - (request.data === undefined && requestOptions.data === undefined) - ) { - return undefined; - } - - const data = Array.isArray(request.data) - ? request.data - : { ...request.data, ...requestOptions.data }; - - return JSON.stringify(data); -} - -export function serializeHeaders( - transporter: Transporter, - requestOptions: RequestOptions -): Headers { - const headers: Headers = { - ...transporter.headers, - ...requestOptions.headers, - }; - const serializedHeaders: Headers = {}; - - Object.keys(headers).forEach(header => { - const value = headers[header]; - - // @ts-ignore - // eslint-disable-next-line functional/immutable-data - serializedHeaders[header.toLowerCase()] = value; - }); - - return serializedHeaders; -} diff --git a/packages/transporter/src/stackTrace.ts b/packages/transporter/src/stackTrace.ts deleted file mode 100644 index 7255fff0d..000000000 --- a/packages/transporter/src/stackTrace.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { StackFrame } from './types'; - -export function stackTraceWithoutCredentials( - stackTrace: readonly StackFrame[] -): readonly StackFrame[] { - return stackTrace.map(stackFrame => stackFrameWithoutCredentials(stackFrame)); -} - -export function stackFrameWithoutCredentials(stackFrame: StackFrame): StackFrame { - const modifiedHeaders: Readonly> = stackFrame.request.headers[ - 'x-algolia-api-key' - ] - ? { 'x-algolia-api-key': '*****' } - : {}; - - return { - ...stackFrame, - request: { - ...stackFrame.request, - headers: { - ...stackFrame.request.headers, - ...modifiedHeaders, - }, - }, - }; -} diff --git a/packages/transporter/src/types/ApiError.ts b/packages/transporter/src/types/ApiError.ts deleted file mode 100644 index 83d7f0e5a..000000000 --- a/packages/transporter/src/types/ApiError.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { StackFrame } from '.'; - -export type ApiError = Error & { - /** - * The http status code. - */ - readonly status: number; - - /** - * Contains report of stack frames of the - * execution of a certain request. - */ - readonly transporterStackTrace: readonly StackFrame[]; -}; diff --git a/packages/transporter/src/types/CallType.ts b/packages/transporter/src/types/CallType.ts deleted file mode 100644 index 5d9ebaa64..000000000 --- a/packages/transporter/src/types/CallType.ts +++ /dev/null @@ -1,18 +0,0 @@ -export const CallEnum: Readonly> = { - /** - * If the host is read only. - */ - Read: 1, - - /** - * If the host is write only. - */ - Write: 2, - - /** - * If the host is both read and write. - */ - Any: 3, -}; - -export type CallType = 1 | 2 | 3; diff --git a/packages/transporter/src/types/DeserializationError.ts b/packages/transporter/src/types/DeserializationError.ts deleted file mode 100644 index fd5f87163..000000000 --- a/packages/transporter/src/types/DeserializationError.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Response } from '@algolia/requester-common'; - -export type DeserializationError = Error & { - /** - * The raw response from the server. - */ - readonly response: Response; -}; diff --git a/packages/transporter/src/types/Headers.ts b/packages/transporter/src/types/Headers.ts deleted file mode 100644 index b65178c2d..000000000 --- a/packages/transporter/src/types/Headers.ts +++ /dev/null @@ -1 +0,0 @@ -export type Headers = Readonly>; diff --git a/packages/transporter/src/types/HostOptions.ts b/packages/transporter/src/types/HostOptions.ts deleted file mode 100644 index 3a520d8e4..000000000 --- a/packages/transporter/src/types/HostOptions.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { CallType } from '.'; - -export type HostOptions = - | string - | { - /** - * The url of the server, without the protocol. - */ - readonly url: string; - - /** - * The type of host. Defaults to `Any`. - */ - readonly accept?: CallType; - - /** - * The protocol. Defaults to `https`. - */ - readonly protocol?: string; - }; diff --git a/packages/transporter/src/types/MappedRequestOptions.ts b/packages/transporter/src/types/MappedRequestOptions.ts deleted file mode 100644 index fc11ab53f..000000000 --- a/packages/transporter/src/types/MappedRequestOptions.ts +++ /dev/null @@ -1,26 +0,0 @@ -export type MappedRequestOptions = { - /** - * If the request should be cached. - */ - readonly cacheable: boolean | undefined; - - /** - * The `read` or `write` timeout of the request. - */ - readonly timeout: number | undefined; - - /** - * The headers of the request. - */ - readonly headers: Record; - - /** - * The query parameters of the request. - */ - readonly queryParameters: Record; - - /** - * The data to be transfered to the server. - */ - readonly data?: Record; -}; diff --git a/packages/transporter/src/types/QueryParameters.ts b/packages/transporter/src/types/QueryParameters.ts deleted file mode 100644 index 033b66d7f..000000000 --- a/packages/transporter/src/types/QueryParameters.ts +++ /dev/null @@ -1 +0,0 @@ -export type QueryParameters = Readonly>; diff --git a/packages/transporter/src/types/Request.ts b/packages/transporter/src/types/Request.ts deleted file mode 100644 index 1558cfb9a..000000000 --- a/packages/transporter/src/types/Request.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { MethodType } from '@algolia/requester-common'; - -export type Request = { - /** - * The method of the request. `GET`, etc. - */ - readonly method: MethodType; - - /** - * The path of the request. i.e: `/1/indexes`. - */ - readonly path: string; - - /** - * The data to transfer to the server. - */ - readonly data?: Record | ReadonlyArray>; - - /** - * If the response should persist on cache. - */ - readonly cacheable?: boolean; -}; diff --git a/packages/transporter/src/types/RequestOptions.ts b/packages/transporter/src/types/RequestOptions.ts deleted file mode 100644 index 018843e5d..000000000 --- a/packages/transporter/src/types/RequestOptions.ts +++ /dev/null @@ -1,38 +0,0 @@ -export type RequestOptions = { - /** - * If the given request should persist on the cache. Keep in mind, - * that some methods may have this option enabled by default. - */ - readonly cacheable?: boolean; - - /** - * Custom timeout for the request. Note that, in normal situacions - * the given timeout will be applied. But the transporter layer may - * increase this timeout if there is need for it. - */ - readonly timeout?: number; - - /** - * Custom headers for the request. This headers are - * going to be merged the transporter headers. - */ - readonly headers?: Readonly>; - - /** - * Custom query parameters for the request. This query parameters are - * going to be merged the transporter query parameters. - */ - readonly queryParameters?: Record; - - /** - * Custom data for the request. This data are - * going to be merged the transporter data. - */ - readonly data?: Record; - - /** - * Additional request body values. It's only taken in - * consideration in `POST` and `PUT` requests. - */ - [key: string]: any; // eslint-disable-line functional/prefer-readonly-type -}; diff --git a/packages/transporter/src/types/RetryError.ts b/packages/transporter/src/types/RetryError.ts deleted file mode 100644 index a939b50f9..000000000 --- a/packages/transporter/src/types/RetryError.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { StackFrame } from '.'; - -export type RetryError = Error & { - /** - * Contains report of stack frames of the - * execution of a certain request. - */ - readonly transporterStackTrace: readonly StackFrame[]; -}; diff --git a/packages/transporter/src/types/StackFrame.ts b/packages/transporter/src/types/StackFrame.ts deleted file mode 100644 index a729581a6..000000000 --- a/packages/transporter/src/types/StackFrame.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Request, Response } from '@algolia/requester-common'; - -import { StatelessHost } from './StatelessHost'; - -export type StackFrame = { - /** - * The request made. - */ - readonly request: Request; - - /** - * The received response. - */ - readonly response: Response; - - /** - * The host associated with the `request` and the `response`. - */ - readonly host: StatelessHost; - - /** - * The number of tries left. - */ - readonly triesLeft: number; -}; diff --git a/packages/transporter/src/types/StatefulHost.ts b/packages/transporter/src/types/StatefulHost.ts deleted file mode 100644 index fe88b3069..000000000 --- a/packages/transporter/src/types/StatefulHost.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { StatelessHost } from '.'; - -export const HostStatusEnum: Readonly> = { - Up: 1, - Down: 2, - Timeouted: 3, -}; - -export type HostStatusType = 1 | 2 | 3; - -export type StatefulHost = StatelessHost & { - /** - * Holds the last time this host failed in milliseconds elapsed - * since the UNIX epoch. This failure can be because of an - * timeout error or a because the host is not available. - */ - readonly lastUpdate: number; - - /** - * Holds the host status. Note that, depending of the `lastUpdate` - * an host may be considered as `Up` on the transporter layer. - */ - readonly status: HostStatusType; -}; diff --git a/packages/transporter/src/types/StatelessHost.ts b/packages/transporter/src/types/StatelessHost.ts deleted file mode 100644 index a9f12577d..000000000 --- a/packages/transporter/src/types/StatelessHost.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { CallType } from '.'; - -export type StatelessHost = { - /** - * The protocol of the stateless host. Between `http` and `https`. - */ - readonly protocol: string; - - /** - * The url, without protocol. - */ - readonly url: string; - - /** - * The type of the host. - */ - readonly accept: CallType; -}; diff --git a/packages/transporter/src/types/Timeouts.ts b/packages/transporter/src/types/Timeouts.ts deleted file mode 100644 index dcccf8da3..000000000 --- a/packages/transporter/src/types/Timeouts.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type Timeouts = { - /** - * The timeout to stablish a connection with the server. - */ - readonly connect: number; - - /** - * The timeout to receive the response on read requests. - */ - readonly read: number; - - /** - * The timeout to receive the response on write requests. - */ - readonly write: number; -}; diff --git a/packages/transporter/src/types/Transporter.ts b/packages/transporter/src/types/Transporter.ts deleted file mode 100644 index 509933a5d..000000000 --- a/packages/transporter/src/types/Transporter.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { Cache } from '@algolia/cache-common'; -import { Logger } from '@algolia/logger-common'; -import { Requester } from '@algolia/requester-common'; - -import { - Headers, - QueryParameters, - Request, - RequestOptions, - StatelessHost, - Timeouts, - UserAgent, -} from '.'; - -export type Transporter = { - /** - * The cache of the hosts. Usually used to persist - * the state of the host when its down. - */ - readonly hostsCache: Cache; - - /** - * The logger instance to send events of the transporter. - */ - readonly logger: Logger; - - /** - * The underlying requester used. Should differ - * depending of the enviroment where the client - * will be used. - */ - readonly requester: Requester; - - /** - * The cache of the requests. When requests are - * `cacheable`, the returned promised persists - * in this cache to shared in similar resquests - * before being resolved. - */ - readonly requestsCache: Cache; - - /** - * The cache of the responses. When requests are - * `cacheable`, the returned responses persists - * in this cache to shared in similar resquests. - */ - readonly responsesCache: Cache; - - /** - * The timeouts used by the requester. The transporter - * layer may increase this timeouts as defined on the - * retry strategy. - */ - readonly timeouts: Timeouts; - - /** - * The user agent used. Sent on query parameters. - */ - readonly userAgent: UserAgent; - - /** - * The headers used on each request. - */ - readonly headers: Headers; - - /** - * The query parameters used on each request. - */ - readonly queryParameters: QueryParameters; - - /** - * The hosts used by the retry strategy. - * - * @readonly - */ - hosts: readonly StatelessHost[]; // eslint-disable-line functional/prefer-readonly-type - - /** - * Performs a read request using read hosts. - */ - readonly read: ( - request: Request, - requestOptions?: RequestOptions - ) => Readonly>; - - /** - * Performs a write request using write hosts. - */ - readonly write: ( - request: Request, - requestOptions?: RequestOptions - ) => Readonly>; -}; diff --git a/packages/transporter/src/types/TransporterOptions.ts b/packages/transporter/src/types/TransporterOptions.ts deleted file mode 100644 index bb201411c..000000000 --- a/packages/transporter/src/types/TransporterOptions.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Cache } from '@algolia/cache-common'; -import { Logger } from '@algolia/logger-common'; -import { Requester } from '@algolia/requester-common'; - -import { Headers, HostOptions, QueryParameters, Timeouts, UserAgent } from '..'; - -export type TransporterOptions = { - /** - * The cache of the hosts. Usually used to persist - * the state of the host when its down. - */ - readonly hostsCache: Cache; - - /** - * The logger instance to send events of the transporter. - */ - readonly logger: Logger; - - /** - * The underlying requester used. Should differ - * depending of the enviroment where the client - * will be used. - */ - readonly requester: Requester; - - /** - * The cache of the requests. When requests are - * `cacheable`, the returned promised persists - * in this cache to shared in similar resquests - * before being resolved. - */ - readonly requestsCache: Cache; - - /** - * The cache of the responses. When requests are - * `cacheable`, the returned responses persists - * in this cache to shared in similar resquests. - */ - readonly responsesCache: Cache; - - /** - * The timeouts used by the requester. The transporter - * layer may increase this timeouts as defined on the - * retry strategy. - */ - readonly timeouts: Timeouts; - - /** - * The hosts used by the requester. - */ - readonly hosts: readonly HostOptions[]; - - /** - * The headers used by the requester. The transporter - * layer may add some extra headers during the request - * for the user agent, and others. - */ - readonly headers: Headers; - - /** - * The query parameters used by the requester. The transporter - * layer may add some extra headers during the request - * for the user agent, and others. - */ - readonly queryParameters: QueryParameters; - - /** - * The user agent used. Sent on query parameters. - */ - readonly userAgent: UserAgent; -}; diff --git a/packages/transporter/src/types/UserAgent.ts b/packages/transporter/src/types/UserAgent.ts deleted file mode 100644 index 5f6d4134c..000000000 --- a/packages/transporter/src/types/UserAgent.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { UserAgentOptions } from './UserAgentOptions'; - -export type UserAgent = { - /** - * The raw value of the user agent. - * - * @readonly - */ - value: string; // eslint-disable-line functional/prefer-readonly-type - - /** - * Mutates the current user agent ading the given user agent options. - */ - readonly add: (options: UserAgentOptions) => UserAgent; -}; diff --git a/packages/transporter/src/types/UserAgentOptions.ts b/packages/transporter/src/types/UserAgentOptions.ts deleted file mode 100644 index d19d9d6b0..000000000 --- a/packages/transporter/src/types/UserAgentOptions.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type UserAgentOptions = { - /** - * The segment. Usually the integration name. - */ - readonly segment: string; - - /** - * The version. Usually the integration version. - */ - readonly version?: string; -}; diff --git a/packages/transporter/src/types/index.ts b/packages/transporter/src/types/index.ts deleted file mode 100644 index 8dfa8e916..000000000 --- a/packages/transporter/src/types/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @file Automatically generated by barrelsby. - */ - -export * from './ApiError'; -export * from './CallType'; -export * from './DeserializationError'; -export * from './Headers'; -export * from './HostOptions'; -export * from './MappedRequestOptions'; -export * from './QueryParameters'; -export * from './Request'; -export * from './RequestOptions'; -export * from './RetryError'; -export * from './StackFrame'; -export * from './StatefulHost'; -export * from './StatelessHost'; -export * from './Timeouts'; -export * from './Transporter'; -export * from './TransporterOptions'; -export * from './UserAgent'; -export * from './UserAgentOptions'; diff --git a/playground/browser-lite/index.html b/playground/browser-lite/index.html deleted file mode 100644 index 7666d035d..000000000 --- a/playground/browser-lite/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/playground/browser/index.html b/playground/browser/index.html deleted file mode 100644 index 78944576b..000000000 --- a/playground/browser/index.html +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/playground/node/index.ts b/playground/node/index.ts deleted file mode 100644 index c87eec762..000000000 --- a/playground/node/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import algoliasearchType from 'algoliasearch'; - -const algoliasearch: typeof algoliasearchType = require('../../packages/algoliasearch'); - -const client = algoliasearch('..', '..'); -console.log(client); diff --git a/renovate.json b/renovate.json deleted file mode 100644 index 93346e064..000000000 --- a/renovate.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": [ - "config:js-lib", - "algolia" - ], - "enable": false -} diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index 93c540558..000000000 --- a/rollup.config.js +++ /dev/null @@ -1,244 +0,0 @@ -/* eslint-disable functional/immutable-data, functional/no-let */ - -import alias from '@rollup/plugin-alias'; -import json from '@rollup/plugin-json'; -import fs from 'fs'; -import path from 'path'; -import babel from 'rollup-plugin-babel'; -import filesize from 'rollup-plugin-filesize'; -import ignore from 'rollup-plugin-ignore'; -import globals from 'rollup-plugin-node-globals'; -import { terser } from 'rollup-plugin-terser'; -import ts from 'rollup-plugin-typescript2'; - -const defaultInput = 'src/index.ts'; - -// eslint-disable-next-line import/no-commonjs -const version = require('./lerna.json').version; -const algolia = '© Algolia, inc.'; -const link = 'https://github.com/algolia/algoliasearch-client-javascript'; -const createLicence = name => `/*! ${name} | ${version} | ${algolia} | ${link} */`; - -if (!process.env.TARGET) { - throw new Error('TARGET package must be specified via --environment flag.'); -} - -const packagesConfig = [ - 'cache-common', - 'cache-in-memory', - 'client-account', - 'client-analytics', - 'client-common', - 'client-personalization', - 'client-recommendation', - 'logger-common', - 'logger-console', - 'requester-common', - 'transporter', -].map(packageId => { - return { - output: packageId, - package: packageId, - input: defaultInput, - formats: ['cjs', 'esm'], - }; -}); - -packagesConfig.push({ - output: 'client-search', - package: 'client-search', - input: defaultInput, - formats: ['cjs', 'esm'], - external: ['crypto'], -}); - -['cache-browser-local-storage', 'requester-browser-xhr'].forEach(packageId => { - packagesConfig.push({ - output: packageId, - package: packageId, - input: defaultInput, - formats: ['cjs', 'esm'], - external: ['dom'], - }); -}); - -packagesConfig.push({ - output: 'requester-node-http', - package: 'requester-node-http', - input: defaultInput, - formats: ['cjs', 'esm'], - external: ['https', 'http', 'url'], -}); - -packagesConfig.push({ - output: 'algoliasearch', - package: 'algoliasearch', - input: `src/builds/node.ts`, - formats: ['cjs'], -}); - -['browser', 'browserLite'].forEach(build => { - packagesConfig.push({ - output: build === 'browser' ? 'algoliasearch' : 'algoliasearch-lite', - package: 'algoliasearch', - name: 'algoliasearch', - input: `src/builds/${build}.ts`, - formats: ['esm-browser'], - ignore: ['crypto'], - }); - - packagesConfig.push({ - output: build === 'browser' ? 'algoliasearch' : 'algoliasearch-lite', - package: 'algoliasearch', - name: 'algoliasearch', - input: `src/builds/${build}.ts`, - formats: ['umd'], - external: ['dom'], - globals: { - algoliasearch: 'algoliasearch', - }, - ignore: ['crypto'], - }); -}); - -packagesConfig.push( - { - output: 'recommend', - package: 'recommend', - name: '@algolia/recommend', - input: `src/builds/browser.ts`, - formats: ['esm-browser', 'umd'], - }, - { - output: 'recommend', - package: 'recommend', - name: '@algolia/recommend', - input: `src/builds/node.ts`, - formats: ['cjs'], - } -); - -const packagesDir = path.resolve(__dirname, 'packages'); -const aliasOptions = { resolve: ['.ts'] }; - -fs.readdirSync(packagesDir).forEach(dir => { - if (dir !== 'algoliasearch' && fs.statSync(path.resolve(packagesDir, dir)).isDirectory()) { - aliasOptions[`@algolia/${dir}`] = path.resolve(packagesDir, `${dir}/index`); - } -}); - -const rollupConfig = []; - -packagesConfig - .filter(packageConfig => { - return process.env.TARGET === packageConfig.package; - }) - .forEach(packageConfig => { - let hasTSChecked = false; - const packageResolve = p => path.resolve(packagesDir, `${packageConfig.package}/${p}`); - - const bundlers = { - esm: { - file: `${packageConfig.output}.esm.js`, - format: `es`, - }, - 'esm-browser': { - file: `${packageConfig.output}.esm.browser.js`, - format: `es`, - }, - cjs: { - file: `${packageConfig.output}.cjs.js`, - format: `cjs`, - }, - umd: { - file: `${packageConfig.output}.umd.js`, - format: `umd`, - }, - }; - - packageConfig.formats.forEach(format => { - const output = bundlers[format]; - - const isUmdBuild = /\.umd.js$/.test(output.file); - const isEsmBrowserBuild = /\.esm.browser.js$/.test(output.file); - - if (isUmdBuild) { - output.name = packageConfig.name; - output.banner = createLicence(output.file); - } - - output.file = packageResolve(`dist/${output.file}`); - - const compressorPlugins = isUmdBuild ? [terser()] : []; - const transpilerPlugins = isUmdBuild - ? [ - babel({ - babelrc: false, - extensions: ['.ts'], - presets: [ - [ - '@babel/preset-env', - { - modules: false, - targets: { - browsers: ['last 2 versions', 'ie >= 11'], - }, - }, - ], - ], - }), - ] - : []; - - let dependencies = require(packageResolve('package.json')).dependencies; - - if (isUmdBuild || isEsmBrowserBuild || dependencies === undefined) { - dependencies = []; - } - - rollupConfig.push({ - input: packageResolve(packageConfig.input), - external: Object.keys(dependencies).concat(packageConfig.external), - plugins: [ - json({ - namedExports: false, - }), - globals({ - global: true, - }), - ignore(packageConfig.ignore || []), - ts({ - check: !hasTSChecked, - tsconfig: path.resolve(__dirname, 'tsconfig.json'), - // cacheRoot: path.resolve(__dirname, 'node_modules/.rts2_cache'), - tsconfigOverride: { - include: ['packages/**/src/**/*.ts'], - exclude: ['packages/**/src/__tests__/**/*.ts'], - compilerOptions: { - declaration: !hasTSChecked, - declarationMap: !hasTSChecked, - }, - }, - }), - alias(aliasOptions), - ...transpilerPlugins, - ...compressorPlugins, - filesize({ - showMinifiedSize: false, - showGzippedSize: true, - }), - ], - output, - onwarn(msg, warn) { - if (!/Circular/.test(msg)) { - warn(msg); - } - }, - }); - - // We just generate TS declarations once for each package. - hasTSChecked = true; - }); - }); - -export default rollupConfig; diff --git a/scripts/build.js b/scripts/build.js deleted file mode 100755 index 9126fc293..000000000 --- a/scripts/build.js +++ /dev/null @@ -1,78 +0,0 @@ -/* eslint-disable no-console, import/no-commonjs, functional/immutable-data*/ - -const fs = require('fs-extra'); -const path = require('path'); -const execa = require('execa'); - -const targets = fs.readdirSync('packages').filter(f => fs.statSync(`packages/${f}`).isDirectory()); - -run(); - -async function run() { - if (process.env.CIRCLE_BUILD_NUM) { - // eslint-disable-next-line functional/no-loop-statement - for (const target of targets) { - await build(target); - } - } else { - await Promise.all(targets.map(target => build(target))); - } -} - -async function build(target) { - await fs.remove(`packages/${target}/dist`); - - await execa(`rollup`, ['-c', '--environment', [`TARGET:${target}`].join(',')], { - stdio: 'inherit', - }); - - await buildDefinition(target); - - if (target === 'algoliasearch') { - await buildDefinition('algoliasearch', 'lite'); - } - - await fs.remove(path.resolve(`packages/${target}/dist/packages`)); -} - -async function buildDefinition(target, config = '') { - const pkgDir = path.resolve(`packages/${target}`); - const pkg = require(`${pkgDir}/package.json`); - - console.log(); - console.log(`Rolling up type definitions for ${target}...`); - - // build types - const { Extractor, ExtractorConfig } = require('@microsoft/api-extractor'); - - const extractorConfigPath = path.resolve( - pkgDir, - `api-extractor${config ? `-${config}` : ''}.json` - ); - const extractorConfig = ExtractorConfig.loadFileAndPrepare(extractorConfigPath); - const result = Extractor.invoke(extractorConfig, { - localBuild: true, - showVerboseMessages: true, - }); - - if (result.succeeded) { - if (pkg.buildOptions && pkg.buildOptions.dts) { - const dtsPath = path.resolve(pkgDir, pkg.types); - const existing = await fs.readFile(dtsPath, 'utf-8'); - const toAdd = await Promise.all( - pkg.buildOptions.dts.map(file => { - return fs.readFile(path.resolve(pkgDir, file), 'utf-8'); - }) - ); - await fs.writeFile(dtsPath, `${existing}\n${toAdd.join('\n')}`); - } - console.log(`API Extractor completed successfully.`); - } else { - console.error( - `API Extractor completed with ${result.errorCount} errors` + - ` and ${result.warningCount} warnings` - ); - - process.exitCode = 1; - } -} diff --git a/scripts/generate-exports.js b/scripts/generate-exports.js deleted file mode 100644 index f2431e412..000000000 --- a/scripts/generate-exports.js +++ /dev/null @@ -1,32 +0,0 @@ -/* eslint-disable import/no-commonjs*/ -const fs = require('fs-extra'); -const execa = require('execa'); - -const targets = fs.readdirSync('packages').filter(f => fs.statSync(`packages/${f}`).isDirectory()); -const exclude = { - all: '__tests__', - algoliasearch: 'builds', - recommend: 'builds', - transporter: 'concerns', -}; - -generateExports(); -async function generateExports() { - await Promise.all( - targets.map(target => - execa( - `barrelsby`, - [ - `--directory=packages/${target}/src`, - '--delete', - '--location=all', - `--exclude=${exclude.all}|${exclude[target]}`, - '--singleQuotes', - ], - { - stdio: 'inherit', - } - ) - ) - ); -} diff --git a/scripts/packages.js b/scripts/packages.js deleted file mode 100644 index ab75c8e82..000000000 --- a/scripts/packages.js +++ /dev/null @@ -1,4 +0,0 @@ -/* eslint-disable import/no-commonjs, functional/immutable-data */ -const fs = require('fs-extra'); - -module.exports = fs.readdirSync('packages').filter(f => fs.statSync(`packages/${f}`).isDirectory()); diff --git a/scripts/prepare-playground.sh b/scripts/prepare-playground.sh deleted file mode 100755 index 09bb055bb..000000000 --- a/scripts/prepare-playground.sh +++ /dev/null @@ -1,2 +0,0 @@ -cp -a packages/algoliasearch/dist/algoliasearch-lite.umd* playground/browser-lite/. -cp -a packages/algoliasearch/dist/algoliasearch.umd* playground/browser/. diff --git a/scripts/prepare-test-browser.sh b/scripts/prepare-test-browser.sh deleted file mode 100755 index 7db3af5a0..000000000 --- a/scripts/prepare-test-browser.sh +++ /dev/null @@ -1,2 +0,0 @@ -cp -a packages/algoliasearch/dist/algoliasearch-lite.umd* specs/fixtures/websites/algoliasearch-lite.com/. -cp -a packages/algoliasearch/dist/algoliasearch.umd* specs/fixtures/websites/algoliasearch.com/. diff --git a/scripts/prepare-test-unit.sh b/scripts/prepare-test-unit.sh deleted file mode 100755 index 233419f99..000000000 --- a/scripts/prepare-test-unit.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -kill -9 `ps aux | grep test-server-for-timeouts | awk '{print $2}'` 2> /dev/null || : && node scripts/test-server-for-timeouts.js & diff --git a/scripts/publish.ts b/scripts/publish.ts new file mode 100755 index 000000000..c879ab317 --- /dev/null +++ b/scripts/publish.ts @@ -0,0 +1,21 @@ +import { execaCommand } from 'execa'; + +async function publish(): Promise { + // publish the stable public packages + await execaCommand( + `yarn lerna exec --ignore '@algolia/client-composition' --no-bail -- npm_config_registry=https://registry.npmjs.org/ npm publish --access public`, + { + shell: 'bash', + }, + ); + + // publish the prereleases private packages + await execaCommand( + `yarn lerna exec --scope '@algolia/client-composition' --no-bail -- npm_config_registry=https://registry.npmjs.org/ npm publish --access private --tag alpha --tag latest`, + { + shell: 'bash', + }, + ); +} + +publish(); diff --git a/scripts/setup-test-browser.js b/scripts/setup-test-browser.js deleted file mode 100644 index 33e0a8298..000000000 --- a/scripts/setup-test-browser.js +++ /dev/null @@ -1,66 +0,0 @@ -/* eslint-disable import/no-commonjs*/ -const algoliasearch = require('../packages/algoliasearch'); - -const objects = [ - { - color: 'red', - value: '#f00', - }, - { - color: 'green', - value: '#0f0', - }, - { - color: 'blue', - value: '#00f', - }, - { - color: 'cyan', - value: '#0ff', - }, - { - color: 'magenta', - value: '#f0f', - }, - { - color: 'yellow', - value: '#ff0', - }, - { - color: 'black', - value: '#000', - }, -]; - -(async () => { - const index = algoliasearch( - process.env.ALGOLIA_APPLICATION_ID_1, - process.env.ALGOLIA_ADMIN_KEY_1 - ).initIndex('javascript-browser-testing-lite'); - - if (await index.exists()) { - // eslint-disable-next-line no-console - console.log( - `Index "javascript-browser-testing-lite" already exists on app id: ${process.env.ALGOLIA_APPLICATION_ID_1}` - ); - - return; - } - - await index - .setSettings({ - attributesForFaceting: ['searchable(color)'], - }) - .wait(); - - await index - .saveObjects(objects, { - autoGenerateObjectIDIfNotExist: true, - }) - .wait(); - - // eslint-disable-next-line no-console - console.log( - `Created index "javascript-browser-testing-lite" on app id: ${process.env.ALGOLIA_APPLICATION_ID_1}` - ); -})(); diff --git a/scripts/sort-package-json.js b/scripts/sort-package-json.js deleted file mode 100644 index 1de5a8bdb..000000000 --- a/scripts/sort-package-json.js +++ /dev/null @@ -1,19 +0,0 @@ -/* eslint-disable import/no-commonjs*/ - -const execa = require('execa'); -const targets = require('./packages'); - -run(); - -async function run() { - await Promise.all( - targets - .map(target => `./packages/${target}/package.json`) - .concat('./package.json') - .map(targetPackageJson => { - return execa(`sort-package-json`, [targetPackageJson], { - stdio: 'inherit', - }); - }) - ); -} diff --git a/scripts/test-build-declarations.js b/scripts/test-build-declarations.js deleted file mode 100755 index 2e871750d..000000000 --- a/scripts/test-build-declarations.js +++ /dev/null @@ -1,45 +0,0 @@ -/* eslint-disable import/no-commonjs, no-console, no-process-exit */ -const glob = require('glob'); -const execa = require('execa'); - -const NUMBER_OF_DECLARATIONS = 21; - -(async () => { - const declarations = await new Promise(resolve => { - glob(`${__dirname}/../packages/**/*.d.ts`, {}, (err, files) => { - if (err || files.length === 0) { - throw new Error(err || 'No declarations found'); - } - - resolve(files); - }); - }); - - if (declarations.length !== NUMBER_OF_DECLARATIONS) { - console.log( - 'Unexpected number of declarations. expected:', - NUMBER_OF_DECLARATIONS, - 'but got:', - declarations.length - ); - process.exit(1); - } - - const check = file => { - return execa('yarn', ['tsc', file, '--noEmit'], { - stdio: 'inherit', - }).catch(err => { - console.log(err); - process.exit(1); - }); - }; - - if (process.env.CIRCLE_BUILD_NUM) { - // eslint-disable-next-line functional/no-loop-statement - for (const declaration of declarations) { - await check(declaration); - } - } else { - await Promise.all(declarations.map(check)); - } -})(); diff --git a/scripts/test-server-for-timeouts.js b/scripts/test-server-for-timeouts.js deleted file mode 100644 index 9aaa5b57e..000000000 --- a/scripts/test-server-for-timeouts.js +++ /dev/null @@ -1,26 +0,0 @@ -// eslint-disable-next-line import/no-commonjs -const http = require('http'); -const port = '1111'; - -http - .createServer(function(request, response) { - response.writeHead(200, { - 'Content-Type': 'text/json', - 'Access-Control-Allow-Origin': '*', - 'X-Powered-By': 'nodejs', - }); - - response.write('{'); - - response.write('"foo":'); - - setTimeout(() => { - response.write(' "bar"'); - }, 1000); - - setTimeout(() => { - response.write('}'); - response.end(); - }, 5000); - }) - .listen(port); diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json new file mode 100644 index 000000000..d79475974 --- /dev/null +++ b/scripts/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "resolveJsonModule": true, + "outDir": "dist" + }, + "include": ["*.ts"] +} diff --git a/serve.json b/serve.json deleted file mode 100644 index 4d2e141f0..000000000 --- a/serve.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "rewrites": [ - { "source": "", "destination": "/playground/browser/index.html" }, - { "source": "/lite", "destination": "/playground/browser-lite/index.html" } - ] -} diff --git a/ship.config.js b/ship.config.js deleted file mode 100644 index 5249136f5..000000000 --- a/ship.config.js +++ /dev/null @@ -1,34 +0,0 @@ -/* eslint-disable functional/immutable-data */ -/* eslint-disable import/no-commonjs */ - -const util = require('util'); -const exec = util.promisify(require('child_process').exec); -const fs = require('fs').promises; -const path = require('path'); - -module.exports = { - monorepo: { - mainVersionFile: 'package.json', - // no packages should be versioned by shipjs, lerna should do it! - packagesToBump: [], - packagesToPublish: ['packages/*'], - }, - getTagName: ({ version }) => `${version}`, - conventionalChangelogArgs: - '--config conventional-changelog.config.js --infile CHANGELOG.md --same-file', - publishCommand({ tag }) { - return `yarn publish --access public --tag ${tag}`; - }, - async versionUpdated({ version, dir }) { - // Update version with lerna - await exec(`lerna version ${version} --no-git-tag-version --no-push --exact --yes`); - - // Update version in `packages/client-common/src/version.ts` file since - // `shipjs prepare` does not seem to support Typescript version files - // bumping (yet?). - const clientCommonTypescriptPath = 'packages/client-common/src/version.ts'; - const clientCommonTypescript = path.resolve(dir, clientCommonTypescriptPath); - - await fs.writeFile(clientCommonTypescript, `export const version = '${version}';\n`); - }, -}; diff --git a/specs/.prettierrc b/specs/.prettierrc deleted file mode 100644 index 1ca87ab7d..000000000 --- a/specs/.prettierrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "singleQuote": false -} diff --git a/specs/errors.spec.ts b/specs/errors.spec.ts deleted file mode 100644 index 706c82b7c..000000000 --- a/specs/errors.spec.ts +++ /dev/null @@ -1,61 +0,0 @@ -// @ts-ignore -const credentials = { - appId: `${process.env.ALGOLIA_APPLICATION_ID_1}`, - apiKey: `${process.env.ALGOLIA_SEARCH_KEY_1}` -}; - -const version = require("../lerna.json").version; - -["algoliasearch-lite.com", "algoliasearch.com"].forEach(preset => { - describe(`search features - ${preset}`, () => { - beforeEach(async () => browser.url(preset)); - - it("throws api errors", async () => { - const headers = - preset === "algoliasearch.com" - ? { - "content-type": "application/x-www-form-urlencoded", - "x-algolia-api-key": "*****", - "x-algolia-application-id": "NOCTT5TZUU" - } - : { - "content-type": "application/x-www-form-urlencoded" - }; - - let url = `https://${credentials.appId}-dsn.algolia.net/1/indexes/SDFGHJKL/query?x-algolia-agent=Algolia%20for%20JavaScript%20(${version})%3B%20Browser`; - - if (preset === "algoliasearch-lite.com") { - url += `%20(lite)&x-algolia-api-key=${credentials.apiKey}&x-algolia-application-id=${credentials.appId}`; - } - - const err = await browser.executeAsync(function(credentials, done) { - const client = algoliasearch(credentials.appId, credentials.apiKey); - - const index = client.initIndex("SDFGHJKL"); - - index.search("").then(undefined, done); - }, credentials); - - expect(err.transporterStackTrace[0].host).toEqual({ - accept: 1, - protocol: "https", - url: `${credentials.appId}-dsn.algolia.net` - }); - - expect(err.transporterStackTrace[0].request).toEqual({ - connectTimeout: 1, - data: '{"query":""}', - headers: headers, - method: "POST", - responseTimeout: 2, - url: url - }); - - expect(err.transporterStackTrace[0].triesLeft).toBe(3); - - expect(err.name).toBe('ApiError'); - expect(err.status).toBe(404); - expect(err.message).toBe('Index SDFGHJKL does not exist'); - }); - }); -}); diff --git a/specs/fixtures/websites/algoliasearch-lite.com/index.html b/specs/fixtures/websites/algoliasearch-lite.com/index.html deleted file mode 100644 index d266862e8..000000000 --- a/specs/fixtures/websites/algoliasearch-lite.com/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/specs/fixtures/websites/algoliasearch.com/index.html b/specs/fixtures/websites/algoliasearch.com/index.html deleted file mode 100644 index 85fa22f54..000000000 --- a/specs/fixtures/websites/algoliasearch.com/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/specs/search.spec.ts b/specs/search.spec.ts deleted file mode 100644 index 84ff13acf..000000000 --- a/specs/search.spec.ts +++ /dev/null @@ -1,170 +0,0 @@ -import algolia from "../packages/algoliasearch/dist/algoliasearch"; -declare const algoliasearch: typeof algolia; - -declare const browser: { - executeAsync( - cb: (arg: TArg, done: (res: TResult) => TResult) => void, - arg: TArg - ): TResult; - executeAsync(cb: (done: (res: TResult) => void) => void): TResult; - - url(to: string): void; -}; - -const objects = [ - { - color: "red", - value: "#f00" - }, - { - color: "green", - value: "#0f0" - }, - { - color: "blue", - value: "#00f" - }, - { - color: "cyan", - value: "#0ff" - }, - { - color: "magenta", - value: "#f0f" - }, - { - color: "yellow", - value: "#ff0" - }, - { - color: "black", - value: "#000" - } -]; - -const credentials = { - appId: `${process.env.ALGOLIA_APPLICATION_ID_1}`, - apiKey: `${process.env.ALGOLIA_SEARCH_KEY_1}` -}; - -// @ts-ignore -const version = require("../lerna.json").version; - -["algoliasearch-lite.com", "algoliasearch.com"].forEach(preset => { - describe(`search features - ${preset}`, () => { - beforeEach(async () => browser.url(preset)); - - it("searchClient::search and searchIndex::search", async () => { - const results = await browser.executeAsync(function(credentials, done) { - const client = algoliasearch(credentials.appId, credentials.apiKey); - - const index = client.initIndex("javascript-browser-testing-lite"); - - Promise.all([ - index.search(""), - index.search("red"), - index.search("black") - ]).then(done); - }, credentials); - - expect(results[0].nbHits).toBe(objects.length); - - expect(results[1].hits.pop().value).toEqual("#f00"); - expect(results[1].nbHits).toBe(1); - - expect(results[2].hits.pop().value).toEqual("#000"); - expect(results[2].nbHits).toBe(1); - }); - - it("searchClient::searchForFacetValues and searchIndex::searchForFacetValues", async () => { - const results: any = await browser.executeAsync(function( - credentials, - done - ) { - const client = algoliasearch(credentials.appId, credentials.apiKey); - - const index = client.initIndex("javascript-browser-testing-lite"); - - Promise.all([ - index.searchForFacetValues("color", "red"), - index.searchForFacetValues("color", "green") - ]).then(function(responses) { - done({ - red: responses[0], - green: responses[1] - }); - }); - }, - credentials); - - expect(results.red.facetHits.pop().value).toEqual("red"); - expect(results.green.facetHits.pop().value).toEqual("green"); - }); - - it("cache requests", async () => { - const responses: any = await browser.executeAsync(function( - credentials, - done - ) { - const client = algoliasearch(credentials.appId, credentials.apiKey); - const params = [ - { - indexName: "javascript-browser-testing-lite", - params: { clickAnalytics: true } - } - ]; - const promise = client.search(params); - const promise2 = client.search(params); - const promise3 = client.search(params, { cacheable: false }); - - return Promise.all([promise, promise2, promise3]).then(done); - }, - credentials); - - expect(responses.length).toBe(3); - const queryID = responses[0].results[0].queryID; - const queryID2 = responses[1].results[0].queryID; - const queryID3 = responses[2].results[0].queryID; - expect(queryID).toBe(queryID2); - - // because is not cacheable - expect(queryID2 === queryID3).toBe(false); - }); - - it("cache responses", async () => { - const responses: any = await browser.executeAsync(function( - credentials, - done - ) { - const client = algoliasearch(credentials.appId, credentials.apiKey); - const params = [ - { - indexName: "javascript-browser-testing-lite", - params: { clickAnalytics: true } - } - ]; - return client - .search(params) - .then(function(response) { - return Promise.all([response, client.search(params)]); - }) - .then(done); - }, - credentials); - - expect(responses.length).toBe(2); - const queryID = responses[0].results[0].queryID; - const queryID2 = responses[1].results[0].queryID; - expect(queryID).toBe(queryID2); - }); - - it("contains version", async () => { - const browserVersion: string = await browser.executeAsync(function(done) { - done(algoliasearch.version); - }); - - expect(browserVersion).toBe(version); - expect(browserVersion.startsWith("4.")).toBe(true); - }); - }); -}); diff --git a/tests/utils.ts b/tests/utils.ts new file mode 100644 index 000000000..ca65d7148 --- /dev/null +++ b/tests/utils.ts @@ -0,0 +1,86 @@ +import http from 'http'; + +import type { EndRequest, Headers } from '@algolia/client-common'; + +/** + * Base URL in tests. + */ +export const BASE_URL = 'https://algolia-dns.net/foo?x-algolia-header=bar'; + +/** + * Default headers for tests. + */ +export const headers: Headers = { + 'content-type': 'text/plain', +}; + +/** + * Default timeout request used for tests. + */ +export const timeoutRequest: EndRequest = { + url: 'missing-url-here', + data: '', + headers: {}, + method: 'GET', + responseTimeout: 5000, + connectTimeout: 2000, +}; + +/** + * Default request used for tests. + */ +export const requestStub: EndRequest = { + url: BASE_URL, + method: 'POST', + headers, + data: getStringifiedBody(), + responseTimeout: 2000, + connectTimeout: 1000, +}; + +export const testQueryHeader: Headers = { 'x-algolia-header': 'bar' }; +export const testQueryBaseUrl = 'https://algolia-dns.net'; + +/** + * Returns a JSON strigified body. + */ +export function getStringifiedBody(body: Record = { foo: 'bar' }): string { + return JSON.stringify(body); +} + +/** + * Creates a test server. + */ +export function createTestServer(): http.Server { + return http.createServer(function (req, res) { + if (req.url?.endsWith('/connection_timeout')) { + setTimeout(() => { + res.writeHead(200, { + 'content-type': 'text/plain', + 'access-control-allow-origin': '*', + 'x-powered-by': 'nodejs', + }); + + res.write('{"foo": "bar"}'); + res.end(); + }, 5000); + } else { + res.writeHead(200, { + 'content-type': 'text/plain', + 'access-control-allow-origin': '*', + 'x-powered-by': 'nodejs', + }); + + res.write('{"foo":'); + + setTimeout(() => { + res.write(' "bar"'); + }, 1000); + + setTimeout(() => { + res.write('}'); + res.end(); + }, 5000); + } + }); +} diff --git a/tsconfig.json b/tsconfig.json index 1e7e91a3c..c5d1e1c91 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,28 +1,25 @@ { "compilerOptions": { - "baseUrl": ".", - "outDir": "dist", - "strict": true, - "sourceMap": false, - "target": "esnext", + "allowJs": false, + "verbatimModuleSyntax": true, + "allowSyntheticDefaultImports": true, + "declaration": true, + "esModuleInterop": true, + "lib": ["dom", "esnext", "dom.iterable", "scripthost"], "module": "esnext", "moduleResolution": "node", - "allowJs": false, - "noUnusedLocals": true, - "strictNullChecks": true, "noImplicitAny": true, "noImplicitThis": true, - "experimentalDecorators": true, - "resolveJsonModule": true, - "esModuleInterop": true, + "noImplicitOverride": true, + "noLib": false, + "noUnusedLocals": true, + "outDir": "dist", "removeComments": false, - "lib": ["esnext", "dom"], - "types": ["jest", "node", "webdriverio"], - "rootDir": ".", - "paths": { - "algoliasearch": ["packages/algoliasearch/src/builds/node"], - "@algolia/*": ["packages/*/src"] - } + "sourceMap": true, + "strict": true, + "target": "esnext", + "types": ["node"] }, - "include": ["packages/**/src/**/*.ts", "global.d.ts"] + "include": ["packages/**/*.ts"], + "exclude": ["dist", "node_modules"] } diff --git a/wdio.base.conf.js b/wdio.base.conf.js deleted file mode 100644 index f54937153..000000000 --- a/wdio.base.conf.js +++ /dev/null @@ -1,35 +0,0 @@ -/* eslint-disable import/no-commonjs, functional/immutable-data */ - -const path = require('path'); - -module.exports = { - services: ['static-server'], - staticServerFolders: [ - { - mount: '/algoliasearch-lite.com', - path: './specs/fixtures/websites/algoliasearch-lite.com', - }, - { - mount: '/algoliasearch.com', - path: './specs/fixtures/websites/algoliasearch.com', - }, - ], - staticServerPort: 5000, - baseUrl: 'http://localhost:5000', - specs: [path.join(__dirname, 'specs/**/*.spec.ts')], - logLevel: 'warn', - waitforTimeout: 10000, - bail: 1, - framework: 'jasmine', - jasmineNodeOpts: { - defaultTimeoutInterval: 60000, - }, - reporters: ['spec'], - before() { - require('ts-node').register({ - transpileOnly: true, - ignore: [], - project: path.join(__dirname, './tsconfig.json'), - }); - }, -}; diff --git a/wdio.local.conf.js b/wdio.local.conf.js deleted file mode 100644 index 42cb3a1ba..000000000 --- a/wdio.local.conf.js +++ /dev/null @@ -1,14 +0,0 @@ -/* eslint-disable import/no-commonjs, functional/immutable-data */ - -const baseConfig = require('./wdio.base.conf'); - -exports.config = { - headless: false, - ...baseConfig, - services: [...(baseConfig.services || []), 'selenium-standalone'], - capabilities: [ - { - browserName: 'chrome', - }, - ], -}; diff --git a/wdio.saucelabs.conf.js b/wdio.saucelabs.conf.js deleted file mode 100644 index 2285e9254..000000000 --- a/wdio.saucelabs.conf.js +++ /dev/null @@ -1,64 +0,0 @@ -/* eslint-disable import/no-commonjs, functional/immutable-data, sonarjs/no-duplicate-string */ - -require('dotenv').config(); - -const baseConfig = require('./wdio.base.conf'); - -const sauceOptions = { - recordVideo: false, - recordScreenshots: false, -}; - -exports.config = { - ...baseConfig, - services: [...(baseConfig.services || []), 'sauce'], - user: process.env.SAUCE_USERNAME, - key: process.env.SAUCE_ACCESS_KEY, - sauceConnect: true, - maxInstances: 5, - specFileRetries: 0, - capabilities: [ - { - platformName: `Windows 7`, - browserName: 'internet explorer', - browserVersion: 'latest', - 'sauce:options': sauceOptions, - }, - ...['7', '8.1'].map(platform => ({ - platformName: `Windows ${platform}`, - browserName: 'internet explorer', - browserVersion: '11.0', - 'sauce:options': sauceOptions, - })), - { - platformName: 'Windows 10', - browserName: 'internet explorer', - browserVersion: '11.285', - 'sauce:options': sauceOptions, - }, - { - platformName: 'Windows 7', - browserName: 'chrome', - browserVersion: '76.0', - 'sauce:options': sauceOptions, - }, - { - platformName: 'Windows 10', - browserName: 'chrome', - browserVersion: '77.0', - 'sauce:options': sauceOptions, - }, - { - platformName: 'Windows 7', - browserName: 'firefox', - browserVersion: '68.0', - 'sauce:options': sauceOptions, - }, - { - platformName: 'Windows 10', - browserName: 'firefox', - browserVersion: '69.0', - 'sauce:options': sauceOptions, - }, - ], -}; diff --git a/yarn.lock b/yarn.lock index b6ba14f84..45dcaa308 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,11717 +1,9177 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/cli@7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.8.4.tgz#505fb053721a98777b2b175323ea4f090b7d3c1c" - integrity sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag== - dependencies: - commander "^4.0.1" - convert-source-map "^1.1.0" - fs-readdir-recursive "^1.1.0" - glob "^7.0.0" - lodash "^4.17.13" - make-dir "^2.1.0" - slash "^2.0.0" - source-map "^0.5.0" - optionalDependencies: - chokidar "^2.1.8" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== - dependencies: - "@babel/highlight" "^7.8.3" - -"@babel/code-frame@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.8.6": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" - integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== - dependencies: - browserslist "^4.12.0" - invariant "^2.2.4" - semver "^5.5.0" - -"@babel/core@7.8.7", "@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.7.tgz#b69017d221ccdeb203145ae9da269d72cf102f3b" - integrity sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.7" - "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.7" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.8.6" - "@babel/types" "^7.8.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.11.5": - version "7.11.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" - integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== - dependencies: - "@babel/types" "^7.11.5" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.8.6", "@babel/generator@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.7.tgz#870b3cf7984f5297998152af625c4f3e341400f7" - integrity sha512-DQwjiKJqH4C3qGiyQCAExJHoZssn49JTMJgZ8SANGgVFdkupcUhLOdkAeoC6kmHZCPfoDG5M0b6cFlSN5wW7Ew== - dependencies: - "@babel/types" "^7.8.7" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" - integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" - integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-compilation-targets@^7.8.7": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" - integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== - dependencies: - "@babel/compat-data" "^7.10.4" - browserslist "^4.12.0" - invariant "^2.2.4" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/helper-create-class-features-plugin@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" - integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-member-expression-to-functions" "^7.10.5" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - -"@babel/helper-create-regexp-features-plugin@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" - integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - regexpu-core "^4.7.0" - -"@babel/helper-define-map@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" - integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/types" "^7.10.5" - lodash "^4.17.19" - -"@babel/helper-explode-assignable-expression@^7.10.4": - version "7.11.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b" - integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" - integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== - dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-get-function-arity@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" - integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-hoist-variables@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" - integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" - integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-module-imports@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" - integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" - integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" - integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/template" "^7.10.4" - "@babel/types" "^7.11.0" - lodash "^4.17.19" - -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" - integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" - integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== - -"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== - -"@babel/helper-regex@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" - integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== - dependencies: - lodash "^4.17.19" - -"@babel/helper-remap-async-to-generator@^7.10.4": - version "7.11.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz#4474ea9f7438f18575e30b0cac784045b402a12d" - integrity sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-wrap-function" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-replace-supers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" - integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-simple-access@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" - integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== - dependencies: - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" - integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-split-export-declaration@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" - integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== - -"@babel/helper-wrap-function@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" - integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helpers@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" - integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== - dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" - -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" - integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.7.tgz#7b8facf95d25fef9534aad51c4ffecde1a61e26a" - integrity sha512-9JWls8WilDXFGxs0phaXAZgpxTZhSk/yOYH2hTHC0X1yC7Z78IJfvR1vJ+rmJKq3I35td2XzXzN6ZLYlna+r/A== - -"@babel/parser@^7.10.4", "@babel/parser@^7.11.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" - integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== - -"@babel/plugin-proposal-async-generator-functions@^7.8.3": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" - integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" - "@babel/plugin-syntax-async-generators" "^7.8.0" - -"@babel/plugin-proposal-dynamic-import@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" - integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - -"@babel/plugin-proposal-json-strings@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" - integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.0" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" - integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - -"@babel/plugin-proposal-object-rest-spread@^7.8.3": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" - integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.10.4" - -"@babel/plugin-proposal-optional-catch-binding@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" - integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - -"@babel/plugin-proposal-optional-chaining@^7.8.3": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" - integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" - integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-async-generators@^7.8.0": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-dynamic-import@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-json-strings@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" - integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-typescript@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz#2f55e770d3501e83af217d782cb7517d7bb34d25" - integrity sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-arrow-functions@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" - integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-async-to-generator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" - integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" - -"@babel/plugin-transform-block-scoped-functions@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" - integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-block-scoping@^7.8.3": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" - integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-classes@^7.8.6": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" - integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-define-map" "^7.10.4" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" - integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-destructuring@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" - integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-dotall-regex@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" - integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-duplicate-keys@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" - integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-exponentiation-operator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" - integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-for-of@^7.8.6": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" - integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-function-name@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" - integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-literals@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" - integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" - integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-modules-amd@^7.8.3": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" - integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== - dependencies: - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" - integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== - dependencies: - "@babel/helper-module-transforms" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.8.3": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" - integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== - dependencies: - "@babel/helper-hoist-variables" "^7.10.4" - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" - integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== - dependencies: - "@babel/helper-module-transforms" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" - integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - -"@babel/plugin-transform-new-target@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" - integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-object-super@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" - integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - -"@babel/plugin-transform-parameters@^7.10.4", "@babel/plugin-transform-parameters@^7.8.7": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" - integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-property-literals@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" - integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-regenerator@^7.8.7": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" - integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" - integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-shorthand-properties@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" - integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-spread@^7.8.3": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" - integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" - -"@babel/plugin-transform-sticky-regex@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" - integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - -"@babel/plugin-transform-template-literals@^7.8.3": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" - integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-typeof-symbol@^7.8.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" - integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-typescript@^7.8.3": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.11.0.tgz#2b4879676af37342ebb278216dd090ac67f13abb" - integrity sha512-edJsNzTtvb3MaXQwj8403B7mZoGu9ElDJQZOKjGUnvilquxBA3IQoEIOvkX/1O8xfAsnHS/oQhe2w/IXrr+w0w== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-typescript" "^7.10.4" - -"@babel/plugin-transform-unicode-regex@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" - integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/preset-env@7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.7.tgz#1fc7d89c7f75d2d70c2b6768de6c2e049b3cb9db" - integrity sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw== - dependencies: - "@babel/compat-data" "^7.8.6" - "@babel/helper-compilation-targets" "^7.8.7" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.8.3" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.8.3" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.8.6" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.8.3" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.8.6" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.8.3" - "@babel/plugin-transform-modules-commonjs" "^7.8.3" - "@babel/plugin-transform-modules-systemjs" "^7.8.3" - "@babel/plugin-transform-modules-umd" "^7.8.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.7" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.7" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.4" - "@babel/plugin-transform-unicode-regex" "^7.8.3" - "@babel/types" "^7.8.7" - browserslist "^4.8.5" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/preset-typescript@7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.8.3.tgz#90af8690121beecd9a75d0cc26c6be39d1595d13" - integrity sha512-qee5LgPGui9zQ0jR1TeU5/fP9L+ovoArklEqY12ek8P/wV5ZeM/VYSQYwICeoT6FfpJTekG9Ilay5PhwsOpMHA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-typescript" "^7.8.3" - -"@babel/runtime@^7.6.3": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" - integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.7.tgz#8fefce9802db54881ba59f90bb28719b4996324d" - integrity sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/template@^7.7.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" - integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.4", "@babel/traverse@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff" - integrity sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.6" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/traverse@^7.10.4": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" - integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.11.5" - "@babel/types" "^7.11.5" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.7.tgz#1fc9729e1acbb2337d5b6977a63979b4819f5d1d" - integrity sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" - integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@evocateur/libnpmaccess@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" - integrity sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - npm-package-arg "^6.1.0" - -"@evocateur/libnpmpublish@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" - integrity sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - lodash.clonedeep "^4.5.0" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - semver "^5.5.1" - ssri "^6.0.1" - -"@evocateur/npm-registry-fetch@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" - integrity sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g== - dependencies: - JSONStream "^1.3.4" - bluebird "^3.5.1" - figgy-pudding "^3.4.1" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - npm-package-arg "^6.1.0" - safe-buffer "^5.1.2" - -"@evocateur/pacote@^9.6.3": - version "9.6.5" - resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" - integrity sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - bluebird "^3.5.3" - cacache "^12.0.3" - chownr "^1.1.2" - figgy-pudding "^3.5.1" - get-stream "^4.1.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - minimatch "^3.0.4" - minipass "^2.3.5" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.5.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.4.4" - npm-pick-manifest "^3.0.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.1" - rimraf "^2.6.3" - safe-buffer "^5.2.0" - semver "^5.7.0" - ssri "^6.0.1" - tar "^4.4.10" - unique-filename "^1.1.1" - which "^1.3.1" - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" - integrity sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== - -"@jest/console@^25.1.0": - version "25.1.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.1.0.tgz#1fc765d44a1e11aec5029c08e798246bd37075ab" - integrity sha512-3P1DpqAMK/L07ag/Y9/Jup5iDEG9P4pRAuZiMQnU0JB3UOvCyYCjCoxr7sIA80SeyUCUKrr24fKAxVpmBgQonA== - dependencies: - "@jest/source-map" "^25.1.0" - chalk "^3.0.0" - jest-util "^25.1.0" - slash "^3.0.0" - -"@jest/core@^25.1.0": - version "25.1.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.1.0.tgz#3d4634fc3348bb2d7532915d67781cdac0869e47" - integrity sha512-iz05+NmwCmZRzMXvMo6KFipW7nzhbpEawrKrkkdJzgytavPse0biEnCNr2wRlyCsp3SmKaEY+SGv7YWYQnIdig== - dependencies: - "@jest/console" "^25.1.0" - "@jest/reporters" "^25.1.0" - "@jest/test-result" "^25.1.0" - "@jest/transform" "^25.1.0" - "@jest/types" "^25.1.0" - ansi-escapes "^4.2.1" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.3" - jest-changed-files "^25.1.0" - jest-config "^25.1.0" - jest-haste-map "^25.1.0" - jest-message-util "^25.1.0" - jest-regex-util "^25.1.0" - jest-resolve "^25.1.0" - jest-resolve-dependencies "^25.1.0" - jest-runner "^25.1.0" - jest-runtime "^25.1.0" - jest-snapshot "^25.1.0" - jest-util "^25.1.0" - jest-validate "^25.1.0" - jest-watcher "^25.1.0" - micromatch "^4.0.2" - p-each-series "^2.1.0" - realpath-native "^1.1.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^25.1.0": - version "25.1.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.1.0.tgz#4a97f64770c9d075f5d2b662b5169207f0a3f787" - integrity sha512-cTpUtsjU4cum53VqBDlcW0E4KbQF03Cn0jckGPW/5rrE9tb+porD3+hhLtHAwhthsqfyF+bizyodTlsRA++sHg== - dependencies: - "@jest/fake-timers" "^25.1.0" - "@jest/types" "^25.1.0" - jest-mock "^25.1.0" - -"@jest/fake-timers@^25.1.0": - version "25.1.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.1.0.tgz#a1e0eff51ffdbb13ee81f35b52e0c1c11a350ce8" - integrity sha512-Eu3dysBzSAO1lD7cylZd/CVKdZZ1/43SF35iYBNV1Lvvn2Undp3Grwsv8PrzvbLhqwRzDd4zxrY4gsiHc+wygQ== - dependencies: - "@jest/types" "^25.1.0" - jest-message-util "^25.1.0" - jest-mock "^25.1.0" - jest-util "^25.1.0" - lolex "^5.0.0" - -"@jest/reporters@^25.1.0": - version "25.1.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.1.0.tgz#9178ecf136c48f125674ac328f82ddea46e482b0" - integrity sha512-ORLT7hq2acJQa8N+NKfs68ZtHFnJPxsGqmofxW7v7urVhzJvpKZG9M7FAcgh9Ee1ZbCteMrirHA3m5JfBtAaDg== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^25.1.0" - "@jest/environment" "^25.1.0" - "@jest/test-result" "^25.1.0" - "@jest/transform" "^25.1.0" - "@jest/types" "^25.1.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.0" - jest-haste-map "^25.1.0" - jest-resolve "^25.1.0" - jest-runtime "^25.1.0" - jest-util "^25.1.0" - jest-worker "^25.1.0" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^3.1.0" - terminal-link "^2.0.0" - v8-to-istanbul "^4.0.1" - optionalDependencies: - node-notifier "^6.0.0" - -"@jest/source-map@^25.1.0": - version "25.1.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.1.0.tgz#b012e6c469ccdbc379413f5c1b1ffb7ba7034fb0" - integrity sha512-ohf2iKT0xnLWcIUhL6U6QN+CwFWf9XnrM2a6ybL9NXxJjgYijjLSitkYHIdzkd8wFliH73qj/+epIpTiWjRtAA== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.3" - source-map "^0.6.0" - -"@jest/test-result@^25.1.0": - version "25.1.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.1.0.tgz#847af2972c1df9822a8200457e64be4ff62821f7" - integrity sha512-FZzSo36h++U93vNWZ0KgvlNuZ9pnDnztvaM7P/UcTx87aPDotG18bXifkf1Ji44B7k/eIatmMzkBapnAzjkJkg== - dependencies: - "@jest/console" "^25.1.0" - "@jest/transform" "^25.1.0" - "@jest/types" "^25.1.0" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^25.1.0": - version "25.1.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.1.0.tgz#4df47208542f0065f356fcdb80026e3c042851ab" - integrity sha512-WgZLRgVr2b4l/7ED1J1RJQBOharxS11EFhmwDqknpknE0Pm87HLZVS2Asuuw+HQdfQvm2aXL2FvvBLxOD1D0iw== - dependencies: - "@jest/test-result" "^25.1.0" - jest-haste-map "^25.1.0" - jest-runner "^25.1.0" - jest-runtime "^25.1.0" - -"@jest/transform@^25.1.0": - version "25.1.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.1.0.tgz#221f354f512b4628d88ce776d5b9e601028ea9da" - integrity sha512-4ktrQ2TPREVeM+KxB4zskAT84SnmG1vaz4S+51aTefyqn3zocZUnliLLm5Fsl85I3p/kFPN4CRp1RElIfXGegQ== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^25.1.0" - babel-plugin-istanbul "^6.0.0" - chalk "^3.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.3" - jest-haste-map "^25.1.0" - jest-regex-util "^25.1.0" - jest-util "^25.1.0" - micromatch "^4.0.2" - pirates "^4.0.1" - realpath-native "^1.1.0" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^25.1.0": - version "25.1.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.1.0.tgz#b26831916f0d7c381e11dbb5e103a72aed1b4395" - integrity sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - -"@lerna/add@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.20.0.tgz#bea7edf36fc93fb72ec34cb9ba854c48d4abf309" - integrity sha512-AnH1oRIEEg/VDa3SjYq4x1/UglEAvrZuV0WssHUMN81RTZgQk3we+Mv3qZNddrZ/fBcZu2IAdN/EQ3+ie2JxKQ== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/bootstrap" "3.20.0" - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - npm-package-arg "^6.1.0" - p-map "^2.1.0" - semver "^6.2.0" - -"@lerna/bootstrap@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.20.0.tgz#635d71046830f208e851ab429a63da1747589e37" - integrity sha512-Wylullx3uthKE7r4izo09qeRGL20Y5yONlQEjPCfnbxCC2Elu+QcPu4RC6kqKQ7b+g7pdC3OOgcHZjngrwr5XQ== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/has-npm-version" "3.16.5" - "@lerna/npm-install" "3.16.5" - "@lerna/package-graph" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/symlink-binary" "3.17.0" - "@lerna/symlink-dependencies" "3.17.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - get-port "^4.2.0" - multimatch "^3.0.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - read-package-tree "^5.1.6" - semver "^6.2.0" - -"@lerna/changed@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.20.0.tgz#66b97ebd6c8f8d207152ee524a0791846a9097ae" - integrity sha512-+hzMFSldbRPulZ0vbKk6RD9f36gaH3Osjx34wrrZ62VB4pKmjyuS/rxVYkCA3viPLHoiIw2F8zHM5BdYoDSbjw== - dependencies: - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.18.5" - "@lerna/listable" "3.18.5" - "@lerna/output" "3.13.0" - -"@lerna/check-working-tree@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa" - integrity sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ== - dependencies: - "@lerna/collect-uncommitted" "3.16.5" - "@lerna/describe-ref" "3.16.5" - "@lerna/validation-error" "3.13.0" - -"@lerna/child-process@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2" - integrity sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg== - dependencies: - chalk "^2.3.1" - execa "^1.0.0" - strong-log-transformer "^2.0.0" - -"@lerna/clean@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.20.0.tgz#ba777e373ddeae63e57860df75d47a9e5264c5b2" - integrity sha512-9ZdYrrjQvR5wNXmHfDsfjWjp0foOkCwKe3hrckTzkAeQA1ibyz5llGwz5e1AeFrV12e2/OLajVqYfe+qdkZUgg== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - -"@lerna/cli@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242" - integrity sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA== - dependencies: - "@lerna/global-options" "3.13.0" - dedent "^0.7.0" - npmlog "^4.1.2" - yargs "^14.2.2" - -"@lerna/collect-uncommitted@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63" - integrity sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg== - dependencies: - "@lerna/child-process" "3.16.5" - chalk "^2.3.1" - figgy-pudding "^3.5.1" - npmlog "^4.1.2" - -"@lerna/collect-updates@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1" - integrity sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/describe-ref" "3.16.5" - minimatch "^3.0.4" - npmlog "^4.1.2" - slash "^2.0.0" - -"@lerna/command@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.18.5.tgz#14c6d2454adbfd365f8027201523e6c289cd3cd9" - integrity sha512-36EnqR59yaTU4HrR1C9XDFti2jRx0BgpIUBeWn129LZZB8kAB3ov1/dJNa1KcNRKp91DncoKHLY99FZ6zTNpMQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/package-graph" "3.18.5" - "@lerna/project" "3.18.0" - "@lerna/validation-error" "3.13.0" - "@lerna/write-log-file" "3.13.0" - clone-deep "^4.0.1" - dedent "^0.7.0" - execa "^1.0.0" - is-ci "^2.0.0" - npmlog "^4.1.2" - -"@lerna/conventional-commits@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.18.5.tgz#08efd2e5b45acfaf3f151a53a3ec7ecade58a7bc" - integrity sha512-qcvXIEJ3qSgalxXnQ7Yxp5H9Ta5TVyai6vEor6AAEHc20WiO7UIdbLDCxBtiiHMdGdpH85dTYlsoYUwsCJu3HQ== - dependencies: - "@lerna/validation-error" "3.13.0" - conventional-changelog-angular "^5.0.3" - conventional-changelog-core "^3.1.6" - conventional-recommended-bump "^5.0.0" - fs-extra "^8.1.0" - get-stream "^4.0.0" - lodash.template "^4.5.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - semver "^6.2.0" - -"@lerna/create-symlink@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" - integrity sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw== - dependencies: - "@zkochan/cmd-shim" "^3.1.0" - fs-extra "^8.1.0" - npmlog "^4.1.2" - -"@lerna/create@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.18.5.tgz#11ac539f069248eaf7bc4c42e237784330f4fc47" - integrity sha512-cHpjocbpKmLopCuZFI7cKEM3E/QY8y+yC7VtZ4FQRSaLU8D8i2xXtXmYaP1GOlVNavji0iwoXjuNpnRMInIr2g== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - camelcase "^5.0.0" - dedent "^0.7.0" - fs-extra "^8.1.0" - globby "^9.2.0" - init-package-json "^1.10.3" - npm-package-arg "^6.1.0" - p-reduce "^1.0.0" - pify "^4.0.1" - semver "^6.2.0" - slash "^2.0.0" - validate-npm-package-license "^3.0.3" - validate-npm-package-name "^3.0.0" - whatwg-url "^7.0.0" - -"@lerna/describe-ref@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0" - integrity sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw== - dependencies: - "@lerna/child-process" "3.16.5" - npmlog "^4.1.2" - -"@lerna/diff@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.18.5.tgz#e9e2cb882f84d5b84f0487c612137305f07accbc" - integrity sha512-u90lGs+B8DRA9Z/2xX4YaS3h9X6GbypmGV6ITzx9+1Ga12UWGTVlKaCXBgONMBjzJDzAQOK8qPTwLA57SeBLgA== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - "@lerna/validation-error" "3.13.0" - npmlog "^4.1.2" - -"@lerna/exec@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.20.0.tgz#29f0c01aee2340eb46f90706731fef2062a49639" - integrity sha512-pS1mmC7kzV668rHLWuv31ClngqeXjeHC8kJuM+W2D6IpUVMGQHLcCTYLudFgQsuKGVpl0DGNYG+sjLhAPiiu6A== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/profiler" "3.20.0" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/filter-options@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b" - integrity sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g== - dependencies: - "@lerna/collect-updates" "3.20.0" - "@lerna/filter-packages" "3.18.0" - dedent "^0.7.0" - figgy-pudding "^3.5.1" - npmlog "^4.1.2" - -"@lerna/filter-packages@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70" - integrity sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ== - dependencies: - "@lerna/validation-error" "3.13.0" - multimatch "^3.0.0" - npmlog "^4.1.2" - -"@lerna/get-npm-exec-opts@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" - integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== - dependencies: - npmlog "^4.1.2" - -"@lerna/get-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" - integrity sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw== - dependencies: - fs-extra "^8.1.0" - ssri "^6.0.1" - tar "^4.4.8" - -"@lerna/github-client@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.16.5.tgz#2eb0235c3bf7a7e5d92d73e09b3761ab21f35c2e" - integrity sha512-rHQdn8Dv/CJrO3VouOP66zAcJzrHsm+wFuZ4uGAai2At2NkgKH+tpNhQy2H1PSC0Ezj9LxvdaHYrUzULqVK5Hw== - dependencies: - "@lerna/child-process" "3.16.5" - "@octokit/plugin-enterprise-rest" "^3.6.1" - "@octokit/rest" "^16.28.4" - git-url-parse "^11.1.2" - npmlog "^4.1.2" - -"@lerna/gitlab-client@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" - integrity sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q== - dependencies: - node-fetch "^2.5.0" - npmlog "^4.1.2" - whatwg-url "^7.0.0" - -"@lerna/global-options@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" - integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== - -"@lerna/has-npm-version@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326" - integrity sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q== - dependencies: - "@lerna/child-process" "3.16.5" - semver "^6.2.0" - -"@lerna/import@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.18.5.tgz#a9c7d8601870729851293c10abd18b3707f7ba5e" - integrity sha512-PH0WVLEgp+ORyNKbGGwUcrueW89K3Iuk/DDCz8mFyG2IG09l/jOF0vzckEyGyz6PO5CMcz4TI1al/qnp3FrahQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - fs-extra "^8.1.0" - p-map-series "^1.0.0" - -"@lerna/info@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.20.0.tgz#3a5212f3029f2bc6255f9533bdf4bcb120ef329a" - integrity sha512-Rsz+KQF9mczbGUbPTrtOed1N0C+cA08Qz0eX/oI+NNjvsryZIju/o7uedG4I3P55MBiAioNrJI88fHH3eTgYug== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/output" "3.13.0" - envinfo "^7.3.1" - -"@lerna/init@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.18.5.tgz#86dd0b2b3290755a96975069b5cb007f775df9f5" - integrity sha512-oCwipWrha98EcJAHm8AGd2YFFLNI7AW9AWi0/LbClj1+XY9ah+uifXIgYGfTk63LbgophDd8936ZEpHMxBsbAg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.18.5" - fs-extra "^8.1.0" - p-map "^2.1.0" - write-json-file "^3.2.0" - -"@lerna/link@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.18.5.tgz#f24347e4f0b71d54575bd37cfa1794bc8ee91b18" - integrity sha512-xTN3vktJpkT7Nqc3QkZRtHO4bT5NvuLMtKNIBDkks0HpGxC9PRyyqwOoCoh1yOGbrWIuDezhfMg3Qow+6I69IQ== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/package-graph" "3.18.5" - "@lerna/symlink-dependencies" "3.17.0" - p-map "^2.1.0" - slash "^2.0.0" - -"@lerna/list@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.20.0.tgz#7e67cc29c5cf661cfd097e8a7c2d3dcce7a81029" - integrity sha512-fXTicPrfioVnRzknyPawmYIVkzDRBaQqk9spejS1S3O1DOidkihK0xxNkr8HCVC0L22w6f92g83qWDp2BYRUbg== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/listable" "3.18.5" - "@lerna/output" "3.13.0" - -"@lerna/listable@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a" - integrity sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg== - dependencies: - "@lerna/query-graph" "3.18.5" - chalk "^2.3.1" - columnify "^1.5.4" - -"@lerna/log-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" - integrity sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ== - dependencies: - byte-size "^5.0.1" - columnify "^1.5.4" - has-unicode "^2.0.1" - npmlog "^4.1.2" - -"@lerna/npm-conf@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" - integrity sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA== - dependencies: - config-chain "^1.1.11" - pify "^4.0.1" - -"@lerna/npm-dist-tag@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55" - integrity sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ== - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - "@lerna/otplease" "3.18.5" - figgy-pudding "^3.5.1" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - -"@lerna/npm-install@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3" - integrity sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - signal-exit "^3.0.2" - write-pkg "^3.1.0" - -"@lerna/npm-publish@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af" - integrity sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg== - dependencies: - "@evocateur/libnpmpublish" "^1.2.2" - "@lerna/otplease" "3.18.5" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - read-package-json "^2.0.13" - -"@lerna/npm-run-script@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15" - integrity sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" - npmlog "^4.1.2" - -"@lerna/otplease@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231" - integrity sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog== - dependencies: - "@lerna/prompt" "3.18.5" - figgy-pudding "^3.5.1" - -"@lerna/output@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" - integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== - dependencies: - npmlog "^4.1.2" - -"@lerna/pack-directory@3.16.4": - version "3.16.4" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" - integrity sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng== - dependencies: - "@lerna/get-packed" "3.16.0" - "@lerna/package" "3.16.0" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - npm-packlist "^1.4.4" - npmlog "^4.1.2" - tar "^4.4.10" - temp-write "^3.4.0" - -"@lerna/package-graph@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b" - integrity sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA== - dependencies: - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/validation-error" "3.13.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - semver "^6.2.0" - -"@lerna/package@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" - integrity sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw== - dependencies: - load-json-file "^5.3.0" - npm-package-arg "^6.1.0" - write-pkg "^3.1.0" - -"@lerna/prerelease-id-from-version@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" - integrity sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA== - dependencies: - semver "^6.2.0" - -"@lerna/profiler@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051" - integrity sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg== - dependencies: - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npmlog "^4.1.2" - upath "^1.2.0" - -"@lerna/project@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.18.0.tgz#56feee01daeb42c03cbdf0ed8a2a10cbce32f670" - integrity sha512-+LDwvdAp0BurOAWmeHE3uuticsq9hNxBI0+FMHiIai8jrygpJGahaQrBYWpwbshbQyVLeQgx3+YJdW2TbEdFWA== - dependencies: - "@lerna/package" "3.16.0" - "@lerna/validation-error" "3.13.0" - cosmiconfig "^5.1.0" - dedent "^0.7.0" - dot-prop "^4.2.0" - glob-parent "^5.0.0" - globby "^9.2.0" - load-json-file "^5.3.0" - npmlog "^4.1.2" - p-map "^2.1.0" - resolve-from "^4.0.0" - write-json-file "^3.2.0" - -"@lerna/prompt@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1" - integrity sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ== - dependencies: - inquirer "^6.2.0" - npmlog "^4.1.2" - -"@lerna/publish@3.20.2": - version "3.20.2" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.20.2.tgz#a45d29813099b3249657ea913d0dc3f8ebc5cc2e" - integrity sha512-N7Y6PdhJ+tYQPdI1tZum8W25cDlTp4D6brvRacKZusweWexxaopbV8RprBaKexkEX/KIbncuADq7qjDBdQHzaA== - dependencies: - "@evocateur/libnpmaccess" "^3.1.2" - "@evocateur/npm-registry-fetch" "^4.0.0" - "@evocateur/pacote" "^9.6.3" - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.18.5" - "@lerna/describe-ref" "3.16.5" - "@lerna/log-packed" "3.16.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/npm-dist-tag" "3.18.5" - "@lerna/npm-publish" "3.18.5" - "@lerna/otplease" "3.18.5" - "@lerna/output" "3.13.0" - "@lerna/pack-directory" "3.16.4" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - "@lerna/version" "3.20.2" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-pipe "^1.2.0" - semver "^6.2.0" - -"@lerna/pulse-till-done@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" - integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== - dependencies: - npmlog "^4.1.2" - -"@lerna/query-graph@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86" - integrity sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA== - dependencies: - "@lerna/package-graph" "3.18.5" - figgy-pudding "^3.5.1" - -"@lerna/resolve-symlink@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" - integrity sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ== - dependencies: - fs-extra "^8.1.0" - npmlog "^4.1.2" - read-cmd-shim "^1.0.1" - -"@lerna/rimraf-dir@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09" - integrity sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA== - dependencies: - "@lerna/child-process" "3.16.5" - npmlog "^4.1.2" - path-exists "^3.0.0" - rimraf "^2.6.2" - -"@lerna/run-lifecycle@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" - integrity sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A== - dependencies: - "@lerna/npm-conf" "3.16.0" - figgy-pudding "^3.5.1" - npm-lifecycle "^3.1.2" - npmlog "^4.1.2" - -"@lerna/run-topologically@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3" - integrity sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg== - dependencies: - "@lerna/query-graph" "3.18.5" - figgy-pudding "^3.5.1" - p-queue "^4.0.0" - -"@lerna/run@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.20.0.tgz#a479f7c42bdf9ebabb3a1e5a2bdebb7a8d201151" - integrity sha512-9U3AqeaCeB7KsGS9oyKNp62s9vYoULg/B4cqXTKZkc+OKL6QOEjYHYVSBcMK9lUXrMjCjDIuDSX3PnTCPxQ2Dw== - dependencies: - "@lerna/command" "3.18.5" - "@lerna/filter-options" "3.20.0" - "@lerna/npm-run-script" "3.16.5" - "@lerna/output" "3.13.0" - "@lerna/profiler" "3.20.0" - "@lerna/run-topologically" "3.18.5" - "@lerna/timer" "3.13.0" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/symlink-binary@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a" - integrity sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/package" "3.16.0" - fs-extra "^8.1.0" - p-map "^2.1.0" - -"@lerna/symlink-dependencies@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a" - integrity sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q== - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/resolve-symlink" "3.16.0" - "@lerna/symlink-binary" "3.17.0" - fs-extra "^8.1.0" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - -"@lerna/timer@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" - integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== - -"@lerna/validation-error@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" - integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== - dependencies: - npmlog "^4.1.2" - -"@lerna/version@3.20.2": - version "3.20.2" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.20.2.tgz#3709141c0f537741d9bc10cb24f56897bcb30428" - integrity sha512-ckBJMaBWc+xJen0cMyCE7W67QXLLrc0ELvigPIn8p609qkfNM0L0CF803MKxjVOldJAjw84b8ucNWZLvJagP/Q== - dependencies: - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.18.5" - "@lerna/conventional-commits" "3.18.5" - "@lerna/github-client" "3.16.5" - "@lerna/gitlab-client" "3.15.0" - "@lerna/output" "3.13.0" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.18.5" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - chalk "^2.3.1" - dedent "^0.7.0" - load-json-file "^5.3.0" - minimatch "^3.0.4" - npmlog "^4.1.2" - p-map "^2.1.0" - p-pipe "^1.2.0" - p-reduce "^1.0.0" - p-waterfall "^1.0.0" - semver "^6.2.0" - slash "^2.0.0" - temp-write "^3.4.0" - write-json-file "^3.2.0" - -"@lerna/write-log-file@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" - integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== - dependencies: - npmlog "^4.1.2" - write-file-atomic "^2.3.0" - -"@microsoft/api-extractor-model@7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.7.7.tgz#1d15eae7a19b72abbfca9053f200fe79b6f9d755" - integrity sha512-822kyHMEx2sl+KnBioEiFoTIXuz/4pYBo94nQ4AMqb9BFvY9I1AZUPtC4HFh2zcXQqpFLpKKC55s/o8UOze2wQ== - dependencies: - "@microsoft/node-core-library" "3.19.3" - "@microsoft/tsdoc" "0.12.14" - -"@microsoft/api-extractor@7.7.8": - version "7.7.8" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.7.8.tgz#19b0bca8a2113d4ded55a270266bc2b802de1a43" - integrity sha512-XNO6Dk6ByfJq24Cn1/j0B0F16ZtwYnEC/sxgB/M0wTphBdBlHjRXZmxofmjirBBj9f7vG4UJ18IOIZRLbhGFPw== - dependencies: - "@microsoft/api-extractor-model" "7.7.7" - "@microsoft/node-core-library" "3.19.3" - "@microsoft/ts-command-line" "4.3.10" - "@microsoft/tsdoc" "0.12.14" - colors "~1.2.1" - lodash "~4.17.15" - resolve "1.8.1" - source-map "~0.6.1" - typescript "~3.7.2" - -"@microsoft/node-core-library@3.19.3": - version "3.19.3" - resolved "https://registry.yarnpkg.com/@microsoft/node-core-library/-/node-core-library-3.19.3.tgz#cf09ddb2905a29b32956d4a88f9d035a00637be9" - integrity sha512-rJ+hT6+XK5AESbhn31YBnHKpZSFKCmqHCRZyK9+jyWwav1HXv0qzuXnFvnyrO0MZyJ6rH0seWOZVWbU5KGv1tg== - dependencies: - "@types/node" "10.17.13" - colors "~1.2.1" - fs-extra "~7.0.1" - jju "~1.4.0" - semver "~5.3.0" - timsort "~0.3.0" - z-schema "~3.18.3" - -"@microsoft/ts-command-line@4.3.10": - version "4.3.10" - resolved "https://registry.yarnpkg.com/@microsoft/ts-command-line/-/ts-command-line-4.3.10.tgz#fcb4f5ea43c93d17db6cc810bbee39ea32b2a86d" - integrity sha512-AgxArGqPt0H5WTo3fxNFP3Blm3obkCCopVG9kwIo+/mMdXaj6qMDn6+8Bv8+5Nke3CvvXpKAZtu3IaGY5cV1Hg== - dependencies: - "@types/argparse" "1.0.33" - argparse "~1.0.9" - colors "~1.2.1" - -"@microsoft/tsdoc@0.12.14": - version "0.12.14" - resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.12.14.tgz#0e0810a0a174e50e22dfe8edb30599840712f22d" - integrity sha512-518yewjSga1jLdiLrcmpMFlaba5P+50b0TWNFUpC+SL9Yzf0kMi57qw+bMl+rQ08cGqH1vLx4eg9YFUbZXgZ0Q== - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.scandir@2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" - integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== - dependencies: - "@nodelib/fs.stat" "2.0.3" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" - integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" - integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== - dependencies: - "@nodelib/fs.scandir" "2.1.3" - fastq "^1.6.0" - -"@octokit/auth-token@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.0.tgz#b64178975218b99e4dfe948253f0673cbbb59d9f" - integrity sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg== - dependencies: - "@octokit/types" "^2.0.0" - -"@octokit/core@^2.4.3": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-2.5.4.tgz#f7fbf8e4f86c5cc2497a8887ba2561ec8d358054" - integrity sha512-HCp8yKQfTITYK+Nd09MHzAlP1v3Ii/oCohv0/TW9rhSLvzb98BOVs2QmVYuloE6a3l6LsfyGIwb6Pc4ycgWlIQ== - dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/graphql" "^4.3.1" - "@octokit/request" "^5.4.0" - "@octokit/types" "^5.0.0" - before-after-hook "^2.1.0" - universal-user-agent "^5.0.0" - -"@octokit/endpoint@^5.5.0": - version "5.5.3" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.5.3.tgz#0397d1baaca687a4c8454ba424a627699d97c978" - integrity sha512-EzKwkwcxeegYYah5ukEeAI/gYRLv2Y9U5PpIsseGSFDk+G3RbipQGBs8GuYS1TLCtQaqoO66+aQGtITPalxsNQ== - dependencies: - "@octokit/types" "^2.0.0" - is-plain-object "^3.0.0" - universal-user-agent "^5.0.0" - -"@octokit/endpoint@^6.0.1": - version "6.0.6" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.6.tgz#4f09f2b468976b444742a1d5069f6fa45826d999" - integrity sha512-7Cc8olaCoL/mtquB7j/HTbPM+sY6Ebr4k2X2y4JoXpVKQ7r5xB4iGQE0IoO58wIPsUk4AzoT65AMEpymSbWTgQ== - dependencies: - "@octokit/types" "^5.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^4.3.1": - version "4.5.6" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.5.6.tgz#708143ba15cf7c1879ed6188266e7f270be805d4" - integrity sha512-Rry+unqKTa3svswT2ZAuqenpLrzJd+JTv89LTeVa5UM/5OX8o4KTkPL7/1ABq4f/ZkELb0XEK/2IEoYwykcLXg== - dependencies: - "@octokit/request" "^5.3.0" - "@octokit/types" "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/plugin-enterprise-rest@^3.6.1": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-3.6.2.tgz#74de25bef21e0182b4fa03a8678cd00a4e67e561" - integrity sha512-3wF5eueS5OHQYuAEudkpN+xVeUsg8vYEMMenEzLphUZ7PRZ8OJtDcsreL3ad9zxXmBbaFWzLmFcdob5CLyZftA== - -"@octokit/plugin-paginate-rest@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" - integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== - dependencies: - "@octokit/types" "^2.0.1" - -"@octokit/plugin-paginate-rest@^2.2.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.4.0.tgz#92f951ddc8a1cd505353fa07650752ca25ed7e93" - integrity sha512-YT6Klz3LLH6/nNgi0pheJnUmTFW4kVnxGft+v8Itc41IIcjl7y1C8TatmKQBbCSuTSNFXO5pCENnqg6sjwpJhg== - dependencies: - "@octokit/types" "^5.5.0" - -"@octokit/plugin-request-log@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" - integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw== - -"@octokit/plugin-rest-endpoint-methods@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" - integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== - dependencies: - "@octokit/types" "^2.0.1" - deprecation "^2.3.1" - -"@octokit/plugin-rest-endpoint-methods@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-3.17.0.tgz#d8ba04eb883849dd98666c55bf49d8c9fe7be055" - integrity sha512-NFV3vq7GgoO2TrkyBRUOwflkfTYkFKS0tLAPym7RNpkwLCttqShaEGjthOsPEEL+7LFcYv3mU24+F2yVd3npmg== - dependencies: - "@octokit/types" "^4.1.6" - deprecation "^2.3.1" - -"@octokit/request-error@^1.0.1", "@octokit/request-error@^1.0.2": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" - integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== - dependencies: - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request-error@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.2.tgz#0e76b83f5d8fdda1db99027ea5f617c2e6ba9ed0" - integrity sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw== - dependencies: - "@octokit/types" "^5.0.1" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^5.2.0": - version "5.3.2" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.3.2.tgz#1ca8b90a407772a1ee1ab758e7e0aced213b9883" - integrity sha512-7NPJpg19wVQy1cs2xqXjjRq/RmtSomja/VSWnptfYwuBxLdbYh2UjhGi0Wx7B1v5Iw5GKhfFDQL7jM7SSp7K2g== - dependencies: - "@octokit/endpoint" "^5.5.0" - "@octokit/request-error" "^1.0.1" - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - is-plain-object "^3.0.0" - node-fetch "^2.3.0" - once "^1.4.0" - universal-user-agent "^5.0.0" - -"@octokit/request@^5.3.0", "@octokit/request@^5.4.0": - version "5.4.9" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.9.tgz#0a46f11b82351b3416d3157261ad9b1558c43365" - integrity sha512-CzwVvRyimIM1h2n9pLVYfTDmX9m+KHSgCpqPsY8F1NdEK8IaWqXhSBXsdjOBFZSpEcxNEeg4p0UO9cQ8EnOCLA== - dependencies: - "@octokit/endpoint" "^6.0.1" - "@octokit/request-error" "^2.0.0" - "@octokit/types" "^5.0.0" - deprecation "^2.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.1" - once "^1.4.0" - universal-user-agent "^6.0.0" - -"@octokit/rest@^16.28.4": - version "16.43.1" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.1.tgz#3b11e7d1b1ac2bbeeb23b08a17df0b20947eda6b" - integrity sha512-gfFKwRT/wFxq5qlNjnW2dh+qh74XgTQ2B179UX5K1HYCluioWj8Ndbgqw2PVqa1NnVJkGHp2ovMpVn/DImlmkw== - dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/plugin-paginate-rest" "^1.1.1" - "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "2.4.0" - "@octokit/request" "^5.2.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" - deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^4.0.0" - -"@octokit/rest@^17.0.0": - version "17.11.2" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-17.11.2.tgz#f3dbd46f9f06361c646230fd0ef8598e59183ead" - integrity sha512-4jTmn8WossTUaLfNDfXk4fVJgbz5JgZE8eCs4BvIb52lvIH8rpVMD1fgRCrHbSd6LRPE5JFZSfAEtszrOq3ZFQ== - dependencies: - "@octokit/core" "^2.4.3" - "@octokit/plugin-paginate-rest" "^2.2.0" - "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "3.17.0" - -"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.3.1.tgz#40cd61c125a6161cfb3bfabc75805ac7a54213b4" - integrity sha512-rvJP1Y9A/+Cky2C3var1vsw3Lf5Rjn/0sojNl2AjCX+WbpIHYccaJ46abrZoIxMYnOToul6S9tPytUVkFI7CXQ== - dependencies: - "@types/node" ">= 8" - -"@octokit/types@^4.1.6": - version "4.1.10" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-4.1.10.tgz#e4029c11e2cc1335051775bc1600e7e740e4aca4" - integrity sha512-/wbFy1cUIE5eICcg0wTKGXMlKSbaAxEr00qaBXzscLXpqhcwgXeS6P8O0pkysBhRfyjkKjJaYrvR1ExMO5eOXQ== - dependencies: - "@types/node" ">= 8" - -"@octokit/types@^5.0.0", "@octokit/types@^5.0.1", "@octokit/types@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.5.0.tgz#e5f06e8db21246ca102aa28444cdb13ae17a139b" - integrity sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ== - dependencies: - "@types/node" ">= 8" - -"@rollup/plugin-alias@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-alias/-/plugin-alias-3.0.1.tgz#eb0549da7177a09e2d6d9d852e4cc5058f3e2104" - integrity sha512-ReSy6iPl3GsWLMNeshXAfgItZFMoMOTYC7MZQQM5va4pqxiGgwl1xZUZfHW6zGyZPK+k8TBadxx+kdmepiUa+g== - dependencies: - slash "^3.0.0" - -"@rollup/plugin-json@4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.0.2.tgz#482185ee36ac7dd21c346e2dbcc22ffed0c6f2d6" - integrity sha512-t4zJMc98BdH42mBuzjhQA7dKh0t4vMJlUka6Fz0c+iO5IVnWaEMiYBy1uBj9ruHZzXBW23IPDGL9oCzBkQ9Udg== - dependencies: - "@rollup/pluginutils" "^3.0.4" - -"@rollup/plugin-node-resolve@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.1.tgz#8c6e59c4b28baf9d223028d0e450e06a485bb2b7" - integrity sha512-14ddhD7TnemeHE97a4rLOhobfYvUVcaYuqTnL8Ti7Jxi9V9Jr5LY7Gko4HZ5k4h4vqQM0gBQt6tsp9xXW94WPA== - dependencies: - "@rollup/pluginutils" "^3.0.6" - "@types/resolve" "0.0.8" - builtin-modules "^3.1.0" - is-module "^1.0.0" - resolve "^1.14.2" - -"@rollup/pluginutils@^3.0.4", "@rollup/pluginutils@^3.0.6": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.0.8.tgz#4e94d128d94b90699e517ef045422960d18c8fde" - integrity sha512-rYGeAc4sxcZ+kPG/Tw4/fwJODC3IXHYDH4qusdN/b6aLw5LPUbzpecYbEJh4sVQGPFJxd2dBU4kc1H3oy9/bnw== - dependencies: - estree-walker "^1.0.1" - -"@sinonjs/commons@^1.7.0": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.1.tgz#da5fd19a5f71177a53778073978873964f49acf1" - integrity sha512-Debi3Baff1Qu1Unc3mjJ96MgpbwTn43S1+9yJ0llWygPwDNu2aaWBD6yc9y/Z8XDRNhx7U+u2UDg2OGQXkclUQ== - dependencies: - type-detect "4.0.8" - -"@slack/types@^1.2.1": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@slack/types/-/types-1.9.0.tgz#aa8f90b2f66ac54a77e42606644366f93cff4871" - integrity sha512-RmwgMWqOtzd2JPXdiaD/tyrDD0vtjjRDFdxN1I3tAxwBbg4aryzDUVqFc8na16A+3Xik/UN8X1hvVTw8J4EB9w== - -"@slack/webhook@^5.0.1": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@slack/webhook/-/webhook-5.0.3.tgz#2205cba9a8d49d2ae84ca93f11ab4a1dba2f963b" - integrity sha512-51vnejJ2zABNumPVukOLyerpHQT39/Lt0TYFtOEz/N2X77bPofOgfPj2atB3etaM07mxWHLT9IRJ4Zuqx38DkQ== - dependencies: - "@slack/types" "^1.2.1" - "@types/node" ">=8.9.0" - axios "^0.19.0" - -"@types/argparse@1.0.33": - version "1.0.33" - resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.33.tgz#2728669427cdd74a99e53c9f457ca2866a37c52d" - integrity sha512-VQgHxyPMTj3hIlq9SY1mctqx+Jj8kpQfoLvDlVSDNOyuYs8JYfkuY3OW/4+dO657yPmNhHpePRx0/Tje5ImNVQ== - -"@types/babel__core@^7.1.0": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.6.tgz#16ff42a5ae203c9af1c6e190ed1f30f83207b610" - integrity sha512-tTnhWszAqvXnhW7m5jQU9PomXSiKXk2sFxpahXvI20SZKu9ylPi8WtIxueZ6ehDWikPT0jeFujMj3X4ZHuf3Tg== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.1" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" - integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" - integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.9.tgz#be82fab304b141c3eee81a4ce3b034d0eba1590a" - integrity sha512-jEFQ8L1tuvPjOI8lnpaf73oCJe+aoxL6ygqSy6c8LcW98zaC+4mzWuQIRCEvKeCOu+lbqdXcg4Uqmm1S8AP1tw== - dependencies: - "@babel/types" "^7.3.0" - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/estree@*": - version "0.0.42" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.42.tgz#8d0c1f480339efedb3e46070e22dd63e0430dd11" - integrity sha512-K1DPVvnBCPxzD+G51/cxVIoc2X8uUVl1zpJeE6iKcgHMj4+tbat5Xu4TjV7v2QSDbIeAfLi2hIk+u2+s0MlpUQ== - -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - -"@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== - dependencies: - "@types/events" "*" - "@types/minimatch" "*" - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" - integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" - integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - -"@types/jest@25.1.4": - version "25.1.4" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.1.4.tgz#9e9f1e59dda86d3fd56afce71d1ea1b331f6f760" - integrity sha512-QDDY2uNAhCV7TMCITrxz+MRk1EizcsevzfeS6LykIlq2V1E5oO4wXG8V2ZEd9w7Snxeeagk46YbMgZ8ESHx3sw== - dependencies: - jest-diff "^25.1.0" - pretty-format "^25.1.0" - -"@types/json-schema@^7.0.3": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" - integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== - -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== - -"@types/minimist@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" - integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= - -"@types/node@*", "@types/node@13.9.0", "@types/node@>= 8": - version "13.9.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.0.tgz#5b6ee7a77faacddd7de719017d0bc12f52f81589" - integrity sha512-0ARSQootUG1RljH2HncpsY2TJBfGQIKOOi7kxzUY6z54ePu/ZD+wJA8zI2Q6v8rol2qpG/rvqsReco8zNMPvhQ== - -"@types/node@10.17.13": - version "10.17.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.13.tgz#ccebcdb990bd6139cd16e84c39dc2fb1023ca90c" - integrity sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg== - -"@types/node@>=8.9.0": - version "14.11.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.1.tgz#56af902ad157e763f9ba63d671c39cda3193c835" - integrity sha512-oTQgnd0hblfLsJ6BvJzzSL+Inogp3lq9fGgqRkMB/ziKMgEUaFl801OncOzUmalfzt14N0oPHMK47ipl+wbTIw== - -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/resolve@0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== - dependencies: - "@types/node" "*" - -"@types/selenium-standalone@^6.15.0": - version "6.15.0" - resolved "https://registry.yarnpkg.com/@types/selenium-standalone/-/selenium-standalone-6.15.0.tgz#daa3ba1c5d46be614f84aecfe975ff5af4837a43" - integrity sha512-hP/pI5N9pqX4nEK58myrx3A04M2cm+q5kXpIE+va4HsiJO+HV1hkUprcA83DURMFUaAHAGZDDOaKPWtW4UuYew== - dependencies: - "@types/node" "*" - -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== - -"@types/yargs-parser@*": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" - integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== - -"@types/yargs@^13.0.3": - version "13.0.8" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99" - integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^15.0.0": - version "15.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" - integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@2.22.0": - version "2.22.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.22.0.tgz#218ce6d4aa0244c6a40baba39ca1e021b26bb017" - integrity sha512-BvxRLaTDVQ3N+Qq8BivLiE9akQLAOUfxNHIEhedOcg8B2+jY8Rc4/D+iVprvuMX1AdezFYautuGDwr9QxqSxBQ== - dependencies: - "@typescript-eslint/experimental-utils" "2.22.0" - eslint-utils "^1.4.3" - functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@2.22.0", "@typescript-eslint/experimental-utils@^2.15.0", "@typescript-eslint/experimental-utils@^2.5.0": - version "2.22.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.22.0.tgz#4d00c91fbaaa68e56e7869be284999a265707f85" - integrity sha512-sJt1GYBe6yC0dWOQzXlp+tiuGglNhJC9eXZeC8GBVH98Zv9jtatccuhz0OF5kC/DwChqsNfghHx7OlIDQjNYAQ== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.22.0" - eslint-scope "^5.0.0" - -"@typescript-eslint/parser@2.22.0": - version "2.22.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.22.0.tgz#8eeb6cb6de873f655e64153397d4790898e149d0" - integrity sha512-FaZKC1X+nvD7qMPqKFUYHz3H0TAioSVFGvG29f796Nc5tBluoqfHgLbSFKsh7mKjRoeTm8J9WX2Wo9EyZWjG7w== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.22.0" - "@typescript-eslint/typescript-estree" "2.22.0" - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/typescript-estree@2.22.0": - version "2.22.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.22.0.tgz#a16ed45876abf743e1f5857e2f4a1c3199fd219e" - integrity sha512-2HFZW2FQc4MhIBB8WhDm9lVFaBDy6h9jGrJ4V2Uzxe/ON29HCHBTj3GkgcsgMWfsl2U5as+pTOr30Nibaw7qRQ== - dependencies: - debug "^4.1.1" - eslint-visitor-keys "^1.1.0" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^6.3.0" - tsutils "^3.17.1" - -"@wdio/cli@5.18.7": - version "5.18.7" - resolved "https://registry.yarnpkg.com/@wdio/cli/-/cli-5.18.7.tgz#1ac56ad96137b3d838909f893eb3e296df6ffea0" - integrity sha512-ovqNuNnQmAJCYbz+m7mynkJ74j9DkO3OFTnfQguBY29Su9L/Fm2szKmJvuHkbhb2MtTqvFkBea7xsD87TAn9lA== - dependencies: - "@wdio/config" "5.18.4" - "@wdio/logger" "5.16.10" - "@wdio/utils" "5.18.6" - async-exit-hook "^2.0.1" - chalk "^3.0.0" - chokidar "^3.0.0" - cli-spinners "^2.1.0" - ejs "^3.0.1" - fs-extra "^8.0.1" - inquirer "^7.0.0" - lodash.flattendeep "^4.4.0" - lodash.pickby "^4.6.0" - lodash.union "^4.6.0" - log-update "^3.2.0" - webdriverio "5.18.7" - yargs "^15.0.1" - yarn-install "^1.0.0" - -"@wdio/config@5.18.4": - version "5.18.4" - resolved "https://registry.yarnpkg.com/@wdio/config/-/config-5.18.4.tgz#cabbac2f42bb1f8ac768f79d0e7671976d97d30e" - integrity sha512-HQugjG+BABDYG/1dPR6KA+IQilsg1MSQ/NVIg8R6I8ER9MA2JNIoaxvXZ+CnDfgY/QpyIHEeqJhfgw8GElaPdw== - dependencies: - "@wdio/logger" "5.16.10" - deepmerge "^4.0.0" - glob "^7.1.2" - -"@wdio/jasmine-framework@5.18.6": - version "5.18.6" - resolved "https://registry.yarnpkg.com/@wdio/jasmine-framework/-/jasmine-framework-5.18.6.tgz#5a0bc5123b98d06a97c7199102a48820f560c0ce" - integrity sha512-Sqvt/nyJT5HPeH2G9vU6ozAEU9fDqD6NMj4Mj6+44epbhfHg0DV+JXdTvyb9JnZ5RVTORCkouNERagYo6VBAWA== - dependencies: - "@wdio/logger" "5.16.10" - "@wdio/utils" "5.18.6" - jasmine "^3.5.0" - -"@wdio/local-runner@5.18.7": - version "5.18.7" - resolved "https://registry.yarnpkg.com/@wdio/local-runner/-/local-runner-5.18.7.tgz#85b4d32f817b0635964dd833cf28a6f060ff9483" - integrity sha512-CL1WzqeA7fK3nJ9cOaFHTy8P7TUnFpJIsF8TnFOV6BnGtNOaIQsrRDaYgzy3p9E+8WoywL7qnt95fNd3GCEe5g== - dependencies: - "@wdio/logger" "5.16.10" - "@wdio/repl" "5.18.6" - "@wdio/runner" "5.18.7" - async-exit-hook "^2.0.1" - stream-buffers "^3.0.2" - -"@wdio/logger@5.16.10": - version "5.16.10" - resolved "https://registry.yarnpkg.com/@wdio/logger/-/logger-5.16.10.tgz#45d0ea485d52c8a7c526954ccc980d54c3e29e56" - integrity sha512-hRKhxgd9uB48Dtj2xe2ckxU4KwI/RO8IwguySuaI2SLFj6EDbdonwzpVkq111/fjBuq7R1NauAaNcm3AMEbIFA== - dependencies: - chalk "^3.0.0" - loglevel "^1.6.0" - loglevel-plugin-prefix "^0.8.4" - strip-ansi "^6.0.0" - -"@wdio/protocols@5.18.7": - version "5.18.7" - resolved "https://registry.yarnpkg.com/@wdio/protocols/-/protocols-5.18.7.tgz#d470aeff16054195868341f9b74281fb3bb513bf" - integrity sha512-Docjl1mGwjsd7xU/eEMspWPWiMUniHxtzXfr/7aDTIlkfh5fazR5NmBPVLHBZNYbe+wPndgc2i/WNZHAKVTx7A== - -"@wdio/repl@5.18.6": - version "5.18.6" - resolved "https://registry.yarnpkg.com/@wdio/repl/-/repl-5.18.6.tgz#6e3467ff6e52879f726579a2053baf98a00e9a0f" - integrity sha512-z9UPBk/Uee0l9g0ijnOatU3WP7TcpIyNtRj9AGsJVbYZFwqMWBqPkO4nblldyNQIuqdgXAPsDo8lPGDno12/oA== - dependencies: - "@wdio/utils" "5.18.6" - -"@wdio/reporter@5.18.6": - version "5.18.6" - resolved "https://registry.yarnpkg.com/@wdio/reporter/-/reporter-5.18.6.tgz#00b0a565fc23abc5be9295ef18f42c30fa476f7b" - integrity sha512-Q9fGfH0XqvRPuDSmfvsfaR0L7varPGfrzELebpx6P3jx4Xqp2AZTSewEWkmn04svPFo0CIjV/+IcKjlJbk13NQ== - dependencies: - fs-extra "^8.0.1" - -"@wdio/runner@5.18.7": - version "5.18.7" - resolved "https://registry.yarnpkg.com/@wdio/runner/-/runner-5.18.7.tgz#37152209448d26a99f4cd9a698d36709b8ec9ac2" - integrity sha512-WP5bke4ERS9MfJxDrbhlbW0vrJtlQ0CapgEGvM/JTj07pRwAbUWw+zdWcOMSboko1wzoe8kw/H8B7XxXaYKQkQ== - dependencies: - "@wdio/config" "5.18.4" - "@wdio/logger" "5.16.10" - "@wdio/utils" "5.18.6" - deepmerge "^4.0.0" - gaze "^1.1.2" - webdriverio "5.18.7" - -"@wdio/sauce-service@5.16.10": - version "5.16.10" - resolved "https://registry.yarnpkg.com/@wdio/sauce-service/-/sauce-service-5.16.10.tgz#f3c12d6f22fce34a605c6e6326b746e3d9906f05" - integrity sha512-KlK/TEoa9bQ+M1BS1vhoYPxfr7IcgMlZ8Hvm7ervgmeEL7NYp8kK5bqjQakIYWITu+FoYHzjc/0Z4xCy7Rlvow== - dependencies: - "@wdio/logger" "5.16.10" - sauce-connect-launcher "^1.2.3" - saucelabs "^3.0.0" - -"@wdio/selenium-standalone-service@5.16.10": - version "5.16.10" - resolved "https://registry.yarnpkg.com/@wdio/selenium-standalone-service/-/selenium-standalone-service-5.16.10.tgz#1d76a9e2334a54abaae32ed5b414624a56112e9d" - integrity sha512-IudfrPgFoejkM+UT4sPv9g5pAGax7+CyHDZkbPDl2XXsct3gdAXDVe57KWuNYX+s0jFu8MSR/4nLnvJjdydNjw== - dependencies: - "@types/selenium-standalone" "^6.15.0" - "@wdio/logger" "5.16.10" - fs-extra "^8.0.1" - selenium-standalone "^6.15.1" - -"@wdio/spec-reporter@5.18.7": - version "5.18.7" - resolved "https://registry.yarnpkg.com/@wdio/spec-reporter/-/spec-reporter-5.18.7.tgz#9f9106c9398b608891e84adcc7e3c4540805caa4" - integrity sha512-CF1CgAyQdGq51HcNBoSnIRxqyB6V0V6GWxx2fVMlf6V0447SrPXPN1FdBRdLgQGA70ZqNs3o4ZLwSJJaZOIoTw== - dependencies: - "@wdio/reporter" "5.18.6" - chalk "^3.0.0" - easy-table "^1.1.1" - pretty-ms "^6.0.0" - -"@wdio/static-server-service@5.16.10": - version "5.16.10" - resolved "https://registry.yarnpkg.com/@wdio/static-server-service/-/static-server-service-5.16.10.tgz#bd70c179d4884f75f6279ed5b73791b0eec28973" - integrity sha512-Kw+T1zZNL9FjvVXrrZO7Zse0fB4iKF8bFj8Wc/Bf5wXNdvPNjwlqZQdU98JUcsHdfM9bEVr4wLngTfD0xl1OqQ== - dependencies: - "@wdio/logger" "5.16.10" - express "^4.14.0" - fs-extra "^0.30.0" - morgan "^1.7.0" - -"@wdio/utils@5.18.6": - version "5.18.6" - resolved "https://registry.yarnpkg.com/@wdio/utils/-/utils-5.18.6.tgz#f46c91a3f5dda5cf20cc4dae2f15b336e0834dc3" - integrity sha512-OVdK7P9Gne9tR6dl1GEKucwX4mtS47F26g4lH8r0HURvMegZLGtcchI1cqF6hjK7EpP737b+C3q4ooZSBdH9XQ== - dependencies: - "@wdio/logger" "5.16.10" - deepmerge "^4.0.0" - -"@zeit/schemas@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.6.0.tgz#004e8e553b4cd53d538bd38eac7bcbf58a867fe3" - integrity sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg== - -"@zkochan/cmd-shim@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" - integrity sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg== - dependencies: - is-windows "^1.0.0" - mkdirp-promise "^5.0.1" - mz "^2.5.0" - -JSONStream@^1.0.4, JSONStream@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abab@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" - integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -acorn-globals@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-jsx@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" - integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== - -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - -acorn@^5.7.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== - -acorn@^6.0.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== - -acorn@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" - integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== - -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= - -adm-zip@~0.4.3: - version "0.4.14" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.14.tgz#2cf312bcc9f8875df835b0f6040bd89be0a727a9" - integrity sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g== - -agent-base@4, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - dependencies: - es6-promisify "^5.0.0" - -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== - dependencies: - es6-promisify "^5.0.0" - -agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== - dependencies: - humanize-ms "^1.2.1" - -ajv@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.3.tgz#71a569d189ecf4f4f321224fecb166f071dd90f9" - integrity sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: - version "6.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" - integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" - -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== - dependencies: - type-fest "^0.11.0" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3, anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -arch@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" - integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== - -archiver-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" - integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== - dependencies: - glob "^7.1.4" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^2.0.0" - -archiver@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-3.1.1.tgz#9db7819d4daf60aec10fe86b16cb9258ced66ea0" - integrity sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg== - dependencies: - archiver-utils "^2.1.0" - async "^2.6.3" - buffer-crc32 "^0.2.1" - glob "^7.1.4" - readable-stream "^3.4.0" - tar-stream "^2.1.0" - zip-stream "^2.1.2" - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -arg@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arg/-/arg-2.0.0.tgz#c06e7ff69ab05b3a4a03ebe0407fac4cba657545" - integrity sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w== - -arg@4.1.3, arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7, argparse@~1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-differ@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" - integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= - -array-includes@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0" - is-string "^1.0.5" - -array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -array.prototype.flat@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" - integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -array.prototype.flatmap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" - integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-exit-hook@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" - integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== - -async@0.9.x: - version "0.9.2" - resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" - integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= - -async@^2.1.2, async@^2.6.2, async@^2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" - integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== - -axios@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" - integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== - dependencies: - follow-redirects "1.5.10" - is-buffer "^2.0.2" - -axios@^0.19.0: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== - dependencies: - follow-redirects "1.5.10" - -babel-jest@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.1.0.tgz#206093ac380a4b78c4404a05b3277391278f80fb" - integrity sha512-tz0VxUhhOE2y+g8R2oFrO/2VtVjA1lkJeavlhExuRBg3LdNJY9gwQ+Vcvqt9+cqy71MCTJhewvTB7Qtnnr9SWg== - dependencies: - "@jest/transform" "^25.1.0" - "@jest/types" "^25.1.0" - "@types/babel__core" "^7.1.0" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^25.1.0" - chalk "^3.0.0" - slash "^3.0.0" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.1.0.tgz#fb62d7b3b53eb36c97d1bc7fec2072f9bd115981" - integrity sha512-oIsopO41vW4YFZ9yNYoLQATnnN46lp+MZ6H4VvPKFkcc2/fkl3CfE/NZZSmnEIEsJRmJAgkVEK0R7Zbl50CpTw== - dependencies: - "@types/babel__traverse" "^7.0.6" - -babel-preset-jest@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.1.0.tgz#d0aebfebb2177a21cde710996fce8486d34f1d33" - integrity sha512-eCGn64olaqwUMaugXsTtGAM2I0QTahjEtnRu0ql8Ie+gDWAc1N6wqN0k2NilnyTunM69Pad7gJY7LOtwLimoFQ== - dependencies: - "@babel/plugin-syntax-bigint" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^25.1.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -barrelsby@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/barrelsby/-/barrelsby-2.2.0.tgz#df5ae16539bc7fdbe196e50f36e50a0c3cae07a4" - integrity sha512-tv8q7cPd7eu5C0nv9ibqjyypYReMHTIZCJz7wWNiwmLzsSOSJgwhafJKhQmampK/IjpuQSbcDdPTXM2zceskfw== - dependencies: - "@types/yargs" "^13.0.3" - yargs "^14.2.0" - -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -basic-auth@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" - integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== - dependencies: - safe-buffer "5.1.2" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -before-after-hook@^2.0.0, before-after-hook@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" - integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.0.tgz#e1a574cdf528e4053019bb800b041c0ac88da493" - integrity sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - -bl@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.1.tgz#8c9b4fb754e80cc86463077722be7b88b4af3f42" - integrity sha512-FL/TdvchukRCuWVxT0YMO/7+L5TNeNrVFvRU2IY63aUyv9mpt8splf2NEr6qXtPo5fya5a66YohQKvGNmLrWNA== - dependencies: - readable-stream "^3.4.0" - -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -boxen@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - -boxen@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brotli-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-0.1.0.tgz#a2c518096c7c1a75e9e66908a42cd9dc77d2b69f" - integrity sha512-5ny7BNvpe2TSmdafF1T9dnFYp3AIrJ8qJt29K0DQJzORlK38LBim/CmlY26JtreV6SWmXza7Oa+9m61SzvxR0Q== - dependencies: - duplexer "^0.1.1" - iltorb "^2.4.3" - -brotli-size@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-4.0.0.tgz#a05ee3faad3c0e700a2f2da826ba6b4d76e69e5e" - integrity sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA== - dependencies: - duplexer "0.1.1" - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - -browserslist@^4.12.0, browserslist@^4.8.5: - version "4.14.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" - integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== - dependencies: - caniuse-lite "^1.0.30001125" - electron-to-chromium "^1.3.564" - escalade "^3.0.2" - node-releases "^1.1.61" - -browserslist@^4.8.3: - version "4.9.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.9.1.tgz#01ffb9ca31a1aef7678128fc6a2253316aa7287c" - integrity sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw== - dependencies: - caniuse-lite "^1.0.30001030" - electron-to-chromium "^1.3.363" - node-releases "^1.1.50" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= - -buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-es6@^4.9.3: - version "4.9.3" - resolved "https://registry.yarnpkg.com/buffer-es6/-/buffer-es6-4.9.3.tgz#f26347b82df76fd37e18bcb5288c4970cfd5c404" - integrity sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ= - -buffer-from@1.x, buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer@^5.1.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.5.0.tgz#9c3caa3d623c33dd1c7ef584b89b88bf9c9bc1ce" - integrity sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -builtin-modules@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" - integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== - -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= - -bundlesize@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/bundlesize/-/bundlesize-0.18.0.tgz#3625520f984f503df8c3d57dd9be2b9c0df40092" - integrity sha512-GZURr25umfYxZYZUyOlOtJRbYjAn0VfbjbnS0NBcOiF8VcjmhoEhmx8Gw4va8HeQb8j7Ra0ZltY/IeHgSHFXFw== - dependencies: - axios "^0.19.0" - brotli-size "0.1.0" - bytes "^3.1.0" - ci-env "^1.4.0" - commander "^2.20.0" - cosmiconfig "^5.2.1" - github-build "^1.2.0" - glob "^7.1.4" - gzip-size "^4.0.0" - prettycli "^1.4.3" - -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= - -byte-size@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" - integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.0, bytes@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cac@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/cac/-/cac-3.0.4.tgz#6d24ceec372efe5c9b798808bc7f49b47242a4ef" - integrity sha1-bSTO7Dcu/lybeYgIvH9JtHJCpO8= - dependencies: - camelcase-keys "^3.0.0" - chalk "^1.1.3" - indent-string "^3.0.0" - minimist "^1.2.0" - read-pkg-up "^1.0.1" - suffix "^0.1.0" - text-table "^0.2.0" - -cacache@^12.0.0, cacache@^12.0.3: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camel-case@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" - integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== - dependencies: - pascal-case "^3.1.1" - tslib "^1.10.0" - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-3.0.0.tgz#fc0c6c360363f7377e3793b9a16bccf1070c1ca4" - integrity sha1-/AxsNgNj9zd+N5O5oWvM8QcMHKQ= - dependencies: - camelcase "^3.0.0" - map-obj "^1.0.0" - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - -camelcase@^4.0.0, camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30001030: - version "1.0.30001033" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001033.tgz#60c328fb56860de60f9a2cb419c31fb80587cba0" - integrity sha512-8Ibzxee6ibc5q88cM1usPsMpJOG5CTq0s/dKOmlekPbDGKt+UrnOOTPSjQz3kVo6yL7N4SB5xd+FGLHQmbzh6A== - -caniuse-lite@^1.0.30001125: - version "1.0.30001129" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001129.tgz#e6514b94c0ef50f98cf7476daa91228ddd2ef7bc" - integrity sha512-9945fTVKS810DZITpsAbuhQG7Lam0tEfVbZlsBaCFZaszepbryrArS05PWmJSBQ6mta+v9iz0pUIAbW1eBILIg== - -capital-case@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.3.tgz#339bd77e8fab6cf75111d4fca509b3edf7c117c8" - integrity sha512-OlUSJpUr7SY0uZFOxcwnDOU7/MpHlKTZx2mqnDYQFrDudXLFm0JJ9wr/l4csB+rh2Ug0OPuoSO53PqiZBqno9A== - dependencies: - no-case "^3.0.3" - tslib "^1.10.0" - upper-case-first "^2.0.1" - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" - integrity sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ== - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - -chalk@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" - integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -change-case@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.1.tgz#d5005709275952e7963fed7b91e4f9fdb6180afa" - integrity sha512-qRlUWn/hXnX1R1LBDF/RelJLiqNjKjUqlmuBVSEIyye8kq49CXqkZWKmi8XeUAdDXWFOcGLUMZ+aHn3Q5lzUXw== - dependencies: - camel-case "^4.1.1" - capital-case "^1.0.3" - constant-case "^3.0.3" - dot-case "^3.0.3" - header-case "^2.0.3" - no-case "^3.0.3" - param-case "^3.0.3" - pascal-case "^3.1.1" - path-case "^3.0.3" - sentence-case "^3.0.3" - snake-case "^3.0.3" - tslib "^1.10.0" - -change-case@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.1.0.tgz#0e611b7edc9952df2e8513b27b42de72647dd17e" - integrity sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw== - dependencies: - camel-case "^3.0.0" - constant-case "^2.0.0" - dot-case "^2.1.0" - header-case "^1.0.0" - is-lower-case "^1.1.0" - is-upper-case "^1.1.0" - lower-case "^1.1.1" - lower-case-first "^1.0.0" - no-case "^2.3.2" - param-case "^2.1.0" - pascal-case "^2.0.0" - path-case "^2.1.0" - sentence-case "^2.1.0" - snake-case "^2.1.0" - swap-case "^1.1.0" - title-case "^2.1.0" - upper-case "^1.1.1" - upper-case-first "^1.1.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.0.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" - integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.3.0" - optionalDependencies: - fsevents "~2.1.2" - -chownr@^1.1.1, chownr@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -ci-env@^1.4.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/ci-env/-/ci-env-1.12.0.tgz#8b430c4c8fcfe730cb8ac330836bffaa6e5f2ab8" - integrity sha512-4dS9YjX4kpaFmkJWZPuDPK3WlPKdMjx/3JH39vyHj+G4/ED2DCgHQLbh9tKBQjwAwR/sGHOqIVMTlMUZcfJPWw== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= - -cli-boxes@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" - integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" - integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -clipboardy@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" - integrity sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA== - dependencies: - arch "^2.1.0" - execa "^0.8.0" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collect-v8-coverage@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz#150ee634ac3650b71d9c985eb7f608942334feb1" - integrity sha512-VKIhJgvk8E1W28m5avZ2Gv2Ruv5YiF56ug2oclvaG9md69BuZImMG2sk9g7QNKLUbtYAKQjXjYxbYZVUlMMKmQ== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colors@^1.3.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -colors@~1.2.1: - version "1.2.5" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.5.tgz#89c7ad9a374bc030df8013241f68136ed8835afc" - integrity sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg== - -columnify@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.19.0, commander@^2.20.0, commander@^2.7.1, commander@~2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -compare-func@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" - integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= - dependencies: - array-ify "^1.0.0" - dot-prop "^3.0.0" - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -compare-versions@^3.5.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" - integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compress-commons@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-2.1.1.tgz#9410d9a534cf8435e3fbbb7c6ce48de2dc2f0610" - integrity sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^3.0.1" - normalize-path "^3.0.0" - readable-stream "^2.3.6" - -compressible@~2.0.14: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" - integrity sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.14" - debug "2.6.9" - on-headers "~1.0.1" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -config-chain@^1.1.11: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -constant-case@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" - integrity sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY= - dependencies: - snake-case "^2.1.0" - upper-case "^1.1.1" - -constant-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.3.tgz#ac910a99caf3926ac5112f352e3af599d8c5fc0a" - integrity sha512-FXtsSnnrFYpzDmvwDGQW+l8XK3GV1coLyBN0eBz16ZUzGaZcT2ANVCJmLeuw2GQgxKHQIe9e0w2dzkSfaRlUmA== - dependencies: - no-case "^3.0.3" - tslib "^1.10.0" - upper-case "^2.0.1" - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -conventional-changelog-angular@^5.0.3: - version "5.0.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz#269540c624553aded809c29a3508fdc2b544c059" - integrity sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA== - dependencies: - compare-func "^1.3.1" - q "^1.5.1" - -conventional-changelog-angular@^5.0.6: - version "5.0.12" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" - integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-core@^3.1.6: - version "3.2.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz#b31410856f431c847086a7dcb4d2ca184a7d88fb" - integrity sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ== - dependencies: - conventional-changelog-writer "^4.0.6" - conventional-commits-parser "^3.0.3" - dateformat "^3.0.0" - get-pkg-repo "^1.0.0" - git-raw-commits "2.0.0" - git-remote-origin-url "^2.0.0" - git-semver-tags "^2.0.3" - lodash "^4.2.1" - normalize-package-data "^2.3.5" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^3.0.0" - -conventional-changelog-core@^4.1.4: - version "4.2.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.2.tgz#f0897df6d53b5d63dec36b9442bd45354f8b3ce5" - integrity sha512-7pDpRUiobQDNkwHyJG7k9f6maPo9tfPzkSWbRq97GGiZqisElhnvUZSvyQH20ogfOjntB5aadvv6NNcKL1sReg== - dependencies: - add-stream "^1.0.0" - conventional-changelog-writer "^4.0.18" - conventional-commits-parser "^3.2.0" - dateformat "^3.0.0" - get-pkg-repo "^1.0.0" - git-raw-commits "^2.0.8" - git-remote-origin-url "^2.0.0" - git-semver-tags "^4.1.1" - lodash "^4.17.15" - normalize-package-data "^3.0.0" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - shelljs "^0.8.3" - through2 "^4.0.0" - -conventional-changelog-preset-loader@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.0.tgz#580fa8ab02cef22c24294d25e52d7ccd247a9a6a" - integrity sha512-/rHb32J2EJnEXeK4NpDgMaAVTFZS3o1ExmjKMtYVgIC4MQn0vkNSbYpdGRotkfGGRWiqk3Ri3FBkiZGbAfIfOQ== - -conventional-changelog-preset-loader@^2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== - -conventional-changelog-writer@^4.0.18: - version "4.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz#1ca7880b75aa28695ad33312a1f2366f4b12659f" - integrity sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw== - dependencies: - compare-func "^2.0.0" - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" - handlebars "^4.7.6" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" - -conventional-changelog-writer@^4.0.6: - version "4.0.11" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.11.tgz#9f56d2122d20c96eb48baae0bf1deffaed1edba4" - integrity sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw== - dependencies: - compare-func "^1.3.1" - conventional-commits-filter "^2.0.2" - dateformat "^3.0.0" - handlebars "^4.4.0" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^5.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^3.0.0" - -conventional-commits-filter@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" - integrity sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.0.3: - version "3.0.8" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz#23310a9bda6c93c874224375e72b09fb275fe710" - integrity sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^5.0.0" - split2 "^2.0.0" - through2 "^3.0.0" - trim-off-newlines "^1.0.0" - -conventional-commits-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz#ba44f0b3b6588da2ee9fd8da508ebff50d116ce2" - integrity sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - trim-off-newlines "^1.0.0" - -conventional-recommended-bump@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" - integrity sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.1.1" - conventional-commits-filter "^2.0.2" - conventional-commits-parser "^3.0.3" - git-raw-commits "2.0.0" - git-semver-tags "^2.0.3" - meow "^4.0.0" - q "^1.5.1" - -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.6.2: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" - integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== - dependencies: - browserslist "^4.8.3" - semver "7.0.0" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^5.1.0, cosmiconfig@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - -crc32-stream@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" - integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w== - dependencies: - crc "^3.4.4" - readable-stream "^3.4.0" - -crc@^3.4.4: - version "3.8.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" - integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== - dependencies: - buffer "^5.1.0" - -cross-spawn@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" - integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" - integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -css-value@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/css-value/-/css-value-0.0.1.tgz#5efd6c2eea5ea1fd6b6ac57ec0427b18452424ea" - integrity sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo= - -cssom@^0.4.1: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.2.0.tgz#e4c44debccd6b7911ed617a4395e5754bba59992" - integrity sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA== - dependencies: - cssom "~0.3.6" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -dargs@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" - integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= - dependencies: - number-is-nan "^1.0.0" - -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.1.0, debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= - -decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -decompress-response@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" - integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== - dependencies: - mimic-response "^2.0.0" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepmerge@^4.0.0, deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - -detect-indent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" - integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== - -detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -detect-newline@3.1.0, detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -dezalgo@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= - dependencies: - asap "^2.0.0" - wrappy "1" - -diff-sequences@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.1.0.tgz#fd29a46f1c913fd66c22645dc75bffbe43051f32" - integrity sha512-nFIfVk5B/NStCsJ+zaPO4vYuLjlzQ6uFvPxzYyHlejNZ/UGa7G/n7peOXVrVNvRuyfstt+mZQYGpjxg9Z6N8Kw== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" - integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" - -dot-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee" - integrity sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4= - dependencies: - no-case "^2.2.0" - -dot-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" - integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== - dependencies: - no-case "^3.0.3" - tslib "^1.10.0" - -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" - integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= - dependencies: - is-obj "^1.0.0" - -dot-prop@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== - dependencies: - is-obj "^1.0.0" - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv@8.2.0, dotenv@^8.1.0, dotenv@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== - -duplexer@0.1.1, duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -easy-table@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.1.1.tgz#c1b9b9ad68a017091a1c235e4bcba277540e143f" - integrity sha512-C9Lvm0WFcn2RgxbMnTbXZenMIWcBtkzMr+dWqq/JsVoGFSVUVlPqeOa5LP5kM0I3zoOazFpckOEb2/0LDFfToQ== - dependencies: - ansi-regex "^3.0.0" - optionalDependencies: - wcwidth ">=1.0.1" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -ejs@^3.0.0: - version "3.1.5" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b" - integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w== - dependencies: - jake "^10.6.1" - -ejs@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.0.1.tgz#30c8f6ee9948502cc32e85c37a3f8b39b5a614a5" - integrity sha512-cuIMtJwxvzumSAkqaaoGY/L6Fc/t6YvoP9/VIaK0V/CyqKLEQ8sqODmYfy/cjXEdZ9+OOL8TecbJu+1RsofGDw== - -electron-to-chromium@^1.3.363: - version "1.3.372" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.372.tgz#fb61b6dfe06f3278a384d084ebef75d463ec7580" - integrity sha512-77a4jYC52OdisHM+Tne7dgWEvQT1FoNu/jYl279pP88ZtG4ZRIPyhQwAKxj6C2rzsyC1OwsOds9JlZtNncSz6g== - -electron-to-chromium@^1.3.564: - version "1.3.567" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.567.tgz#7a404288952ac990e447a7a86470d460ea953b8f" - integrity sha512-1aKkw0Hha1Bw9JA5K5PT5eFXC/TXbkJvUfNSNEciPUMgSIsRJZM1hF2GUEAGZpAbgvd8En21EA+Lv820KOhvqA== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= - dependencies: - iconv-lite "~0.4.13" - -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -env-paths@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" - integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== - -envinfo@^7.3.1: - version "7.5.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4" - integrity sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ== - -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: - version "1.17.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" - integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.1.5" - is-regex "^1.0.5" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - -escalade@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" - integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escodegen@^1.11.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" - integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-algolia@15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-algolia/-/eslint-config-algolia-15.0.0.tgz#3fe7de52d1f2d2d97333ade18327c738f72c0292" - integrity sha512-Lfl9Sy5fQJDTQPtsMQZR6nx6fnjc1Ot9SXxdx8AVMMP+nwu5ljtxcFCI1e2BeI6+6BHX9g5BFjnpE/S7HS/Eug== - -eslint-config-prettier@6.10.0: - version "6.10.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz#7b15e303bf9c956875c948f6b21500e48ded6a7f" - integrity sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg== - dependencies: - get-stdin "^6.0.0" - -eslint-import-resolver-alias@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz#297062890e31e4d6651eb5eba9534e1f6e68fc97" - integrity sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w== - -eslint-import-resolver-node@^0.3.2: - version "0.3.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" - integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== - dependencies: - debug "^2.6.9" - resolve "^1.13.1" - -eslint-module-utils@^2.4.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708" - integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q== - dependencies: - debug "^2.6.9" - pkg-dir "^2.0.0" - -eslint-plugin-eslint-comments@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.2.tgz#4ef6c488dbe06aa1627fea107b3e5d059fc8a395" - integrity sha512-QexaqrNeteFfRTad96W+Vi4Zj1KFbkHHNMMaHZEYcovKav6gdomyGzaxSDSL3GoIyUOo078wRAdYlu1caiauIQ== - dependencies: - escape-string-regexp "^1.0.5" - ignore "^5.0.5" - -eslint-plugin-functional@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-functional/-/eslint-plugin-functional-3.0.1.tgz#c0b43f6416f91b1debfd7f6bd5be00be1de69121" - integrity sha512-8IhtDsB8b+ungE0hVdd7Xp3u1YtL6SkTbtbpzbNBG8JrjPALKczZdbUazrYOJhVsjJJWgTEQTKM/1+ILzE/SDA== - dependencies: - "@typescript-eslint/experimental-utils" "^2.15.0" - array.prototype.flatmap "^1.2.3" - deepmerge "^4.2.2" - escape-string-regexp "^2.0.0" - -eslint-plugin-import@2.20.1: - version "2.20.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz#802423196dcb11d9ce8435a5fc02a6d3b46939b3" - integrity sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw== - dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.1" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.0" - read-pkg-up "^2.0.0" - resolve "^1.12.0" - -eslint-plugin-jest@23.8.2: - version "23.8.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.8.2.tgz#6f28b41c67ef635f803ebd9e168f6b73858eb8d4" - integrity sha512-xwbnvOsotSV27MtAe7s8uGWOori0nUsrXh2f1EnpmXua8sDfY6VZhHAhHg2sqK7HBNycRQExF074XSZ7DvfoFg== - dependencies: - "@typescript-eslint/experimental-utils" "^2.5.0" - -eslint-plugin-prettier@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba" - integrity sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-plugin-promise@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" - integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== - -eslint-plugin-simple-import-sort@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-5.0.1.tgz#fd47d3ed2af30db3dd2cadaed285ad510dde479b" - integrity sha512-s6Hjp9rcIDYT1h7tuTulblbY7+XQNZK+014uUkNJSKRXEHZO2i7CTr16HOpfgD9HDnUOpl0fwphPsr0oxZqgGg== - -eslint-plugin-sonarjs@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.5.0.tgz#ce17b2daba65a874c2862213a9e38e8986ad7d7d" - integrity sha512-XW5MnzlRjhXpIdbULC/qAdJYHWw3rRLws/DyawdlPU/IdVr9AmRK1r2LaCvabwKOAW2XYYSo3kDX58E4MrB7PQ== - -eslint-plugin-wdio@5.13.2: - version "5.13.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-wdio/-/eslint-plugin-wdio-5.13.2.tgz#cfe75ffaea954c49d1e089f5b3b388746012951b" - integrity sha512-C3q1aPOPAlfcc64qE9GFfGdT/H6aZwur5ugMzXtiGejiLP/omdY0XrU8wHaLJ1QpNr+/ohf/MIYVthFK0tr1Sw== - -eslint-scope@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== - -eslint@6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^7.0.0" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -esm@3.2.25: - version "3.2.25" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" - integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== - -espree@^6.1.2: - version "6.2.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.0.tgz#349fef01a202bbab047748300deb37fa44da79d7" - integrity sha512-Xs8airJ7RQolnDIbLtRutmfvSsAe0xqMMAantCN/GMoqf81TFbeI1T7Jpd56qYu1uuh32dOG5W/X9uO+ghPXzA== - dependencies: - acorn "^7.1.0" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48" - integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q== - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estree-walker@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" - integrity sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig== - -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -eventemitter3@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - -exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -expect@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-25.1.0.tgz#7e8d7b06a53f7d66ec927278db3304254ee683ee" - integrity sha512-wqHzuoapQkhc3OKPlrpetsfueuEiMf3iWh0R8+duCu9PIjXoP7HgD5aeypwTnXUAjC8aMsiVDaWwlbJ1RlQ38g== - dependencies: - "@jest/types" "^25.1.0" - ansi-styles "^4.0.0" - jest-get-type "^25.1.0" - jest-matcher-utils "^25.1.0" - jest-message-util "^25.1.0" - jest-regex-util "^25.1.0" - -express@^4.14.0: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - -fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-glob@^3.0.3: - version "3.2.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.2.tgz#ade1a9d91148965d4bf7c51f72e1ca662d32e63d" - integrity sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fast-url-parser@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" - integrity sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0= - dependencies: - punycode "^1.3.2" - -fastq@^1.6.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.1.tgz#4570c74f2ded173e71cf0beb08ac70bb85826791" - integrity sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - -figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filelist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.1.tgz#f10d1a3ae86c1694808e8f20906f43d4c9132dbb" - integrity sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ== - dependencies: - minimatch "^3.0.4" - -filesize@^4.1.2: - version "4.2.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-4.2.1.tgz#ab1cb2069db5d415911c1a13e144c0e743bc89bc" - integrity sha512-bP82Hi8VRZX/TUBKfE24iiUGsB/sfm2WUrwTQyAzQrhO3V9IhcBBNBXMyzLY5orACxRyYJ3d2HeRVX+eFv4lmA== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-cache-dir@^3.2.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-versions@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" - integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== - dependencies: - semver-regex "^2.0.0" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@8.1.0, fs-extra@^8.0.1, fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@~7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.11" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" - integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@^2.1.2, fsevents@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" - integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -gaze@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - -genfun@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" - integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== - -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-pkg-repo@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" - integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= - dependencies: - hosted-git-info "^2.1.4" - meow "^3.3.0" - normalize-package-data "^2.3.0" - parse-github-repo-url "^1.3.0" - through2 "^2.0.0" - -get-port@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" - integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0, get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" - integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -git-hooks-list@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/git-hooks-list/-/git-hooks-list-1.0.2.tgz#b023b76872f00d81b353efd1458fb4a165035575" - integrity sha512-C3c/FG6Pgh053+yK/CnNNYJo5mgCa3OeI+cPxPIl0tyMLm1mGfiV0NX0LrhnjVoX7dfkR78WyW2kvFVHvAlneg== - -git-raw-commits@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" - integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== - dependencies: - dargs "^4.0.1" - lodash.template "^4.0.2" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^2.0.0" - -git-raw-commits@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1" - integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ== - dependencies: - dargs "^7.0.0" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" - integrity sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA== - dependencies: - meow "^4.0.0" - semver "^6.0.0" - -git-semver-tags@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" - integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== - dependencies: - meow "^8.0.0" - semver "^6.0.0" - -git-up@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" - integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== - dependencies: - is-ssh "^1.3.0" - parse-url "^5.0.0" - -git-url-parse@^11.1.2: - version "11.1.2" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.2.tgz#aff1a897c36cc93699270587bea3dbcbbb95de67" - integrity sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ== - dependencies: - git-up "^4.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= - dependencies: - ini "^1.3.2" - -github-build@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/github-build/-/github-build-1.2.1.tgz#a00f03fb76e5fa01971ddff0e69b88978c6f2f3f" - integrity sha512-VAT4NFU8hm9Ks5yNKuuczD2zMbmouAKHtxtwvmCj34Q2DpZsjgp3LLjtrKlm/YvGSzSNGmj22ccJQQei+f/vIw== - dependencies: - axios "0.19.0" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" - integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - -glob@7.1.6, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global@^4.3.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -globby@10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" - integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -globby@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" - integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - -globule@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.1.tgz#90a25338f22b7fbeb527cee63c629aea754d33b9" - integrity sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g== - dependencies: - glob "~7.1.1" - lodash "~4.17.12" - minimatch "~3.0.2" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== - -grapheme-splitter@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -gzip-size@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-4.1.0.tgz#8ae096257eabe7d69c45be2b67c448124ffb517c" - integrity sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw= - dependencies: - duplexer "^0.1.1" - pify "^3.0.0" - -gzip-size@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== - dependencies: - duplexer "^0.1.1" - pify "^4.0.1" - -handlebars@^4.4.0: - version "4.7.3" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz#8ece2797826886cf8082d1726ff21d2a022550ee" - integrity sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - -handlebars@^4.7.6: - version "4.7.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" - integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.0, har-validator@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.0, has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has-unicode@^2.0.0, has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -header-case@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d" - integrity sha1-lTWXMZfBRLCWE81l0xfvGZY70C0= - dependencies: - no-case "^2.2.0" - upper-case "^1.1.3" - -header-case@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.3.tgz#8a7407d16edfd5c970f8ebb116e6383f855b5a72" - integrity sha512-LChe/V32mnUQnTwTxd3aAlNMk8ia9tjCDb/LjYtoMrdAPApxLB+azejUk5ERZIZdIqvinwv6BAUuFXH/tQPdZA== - dependencies: - capital-case "^1.0.3" - tslib "^1.10.0" - -hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== - -hosted-git-info@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" - integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== - dependencies: - lru-cache "^6.0.0" - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== - dependencies: - whatwg-encoding "^1.0.1" - -html-escaper@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491" - integrity sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig== - -http-cache-semantics@^3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== - dependencies: - agent-base "4" - debug "3.1.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-proxy-agent@^2.2.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - -https-proxy-agent@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" - integrity sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= - dependencies: - ms "^2.0.0" - -husky@4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-4.2.3.tgz#3b18d2ee5febe99e27f2983500202daffbc3151e" - integrity sha512-VxTsSTRwYveKXN4SaH1/FefRJYCtx+wx04sSVcOpD7N2zjoHxa+cEJ07Qg5NmV3HAK+IRKOyNVpi2YBIVccIfQ== - dependencies: - chalk "^3.0.0" - ci-info "^2.0.0" - compare-versions "^3.5.1" - cosmiconfig "^6.0.0" - find-versions "^3.2.0" - opencollective-postinstall "^2.0.2" - pkg-dir "^4.2.0" - please-upgrade-node "^3.2.0" - slash "^3.0.0" - which-pm-runs "^1.0.0" - -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - -ignore@^4.0.3, ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.0.5, ignore@^5.1.1: - version "5.1.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" - integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== - -iltorb@^2.4.3: - version "2.4.5" - resolved "https://registry.yarnpkg.com/iltorb/-/iltorb-2.4.5.tgz#d64434b527099125c6839ed48b666247a172ef87" - integrity sha512-EMCMl3LnnNSZJS5QrxyZmMTaAC4+TJkM5woD+xbpm9RB+mFYCr7C05GFE3TEGCsVQSVHmjX+3sf5AiwsylNInQ== - dependencies: - detect-libc "^1.0.3" - nan "^2.14.0" - npmlog "^4.1.2" - prebuild-install "^5.3.3" - which-pm-runs "^1.0.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0, import-fresh@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.3, infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== - dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - -inquirer@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" - integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.15" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.5.3" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -inquirer@^6.2.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -inquirer@^7.0.0: - version "7.0.6" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.6.tgz#ee4ff0ea7ecda5324656fe665878790f66df7d0c" - integrity sha512-7SVO4h+QIdMq6XcqIqrNte3gS5MzCCKZdsq9DO4PJziBFNYzP3PGFbDjgadDb//MCahzgjCxvQ/O2wa7kx9o4w== - dependencies: - ansi-escapes "^4.2.1" - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.15" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.5.3" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-buffer@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" - integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== - -is-callable@^1.1.4, is-callable@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" - integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-lower-case@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" - integrity sha1-fhR75HaNxGbbO/shzGCzHmrWk5M= - dependencies: - lower-case "^1.1.0" - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-plain-obj@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" - integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== - dependencies: - isobject "^4.0.0" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-regex@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== - dependencies: - has "^1.0.3" - -is-ssh@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" - integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== - dependencies: - protocols "^1.1.0" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= - dependencies: - text-extensions "^1.0.0" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-upper-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" - integrity sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8= - dependencies: - upper-case "^1.1.0" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-windows@^1.0.0, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" - integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== - -istanbul-lib-instrument@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6" - integrity sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg== - dependencies: - "@babel/core" "^7.7.5" - "@babel/parser" "^7.7.5" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.0.tgz#d4d16d035db99581b6194e119bbf36c963c5eb70" - integrity sha512-2osTcC8zcOSUkImzN2EWQta3Vdi4WjjKw99P2yWx5mLnigAM0Rd5uYFn1cf2i/Ois45GkNjaoTqc5CxgMSX80A== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jake@^10.6.1: - version "10.8.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" - integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== - dependencies: - async "0.9.x" - chalk "^2.4.2" - filelist "^1.0.1" - minimatch "^3.0.4" - -jasmine-core@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" - integrity sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA== - -jasmine@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.5.0.tgz#7101eabfd043a1fc82ac24e0ab6ec56081357f9e" - integrity sha512-DYypSryORqzsGoMazemIHUfMkXM7I7easFaxAvNM3Mr6Xz3Fy36TupTrAOxZWN8MVKEU5xECv22J4tUQf3uBzQ== - dependencies: - glob "^7.1.4" - jasmine-core "~3.5.0" - -jest-changed-files@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.1.0.tgz#73dae9a7d9949fdfa5c278438ce8f2ff3ec78131" - integrity sha512-bdL1aHjIVy3HaBO3eEQeemGttsq1BDlHgWcOjEOIAcga7OOEGWHD2WSu8HhL7I1F0mFFyci8VKU4tRNk+qtwDA== - dependencies: - "@jest/types" "^25.1.0" - execa "^3.2.0" - throat "^5.0.0" - -jest-cli@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.1.0.tgz#75f0b09cf6c4f39360906bf78d580be1048e4372" - integrity sha512-p+aOfczzzKdo3AsLJlhs8J5EW6ffVidfSZZxXedJ0mHPBOln1DccqFmGCoO8JWd4xRycfmwy1eoQkMsF8oekPg== - dependencies: - "@jest/core" "^25.1.0" - "@jest/test-result" "^25.1.0" - "@jest/types" "^25.1.0" - chalk "^3.0.0" - exit "^0.1.2" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^25.1.0" - jest-util "^25.1.0" - jest-validate "^25.1.0" - prompts "^2.0.1" - realpath-native "^1.1.0" - yargs "^15.0.0" - -jest-config@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.1.0.tgz#d114e4778c045d3ef239452213b7ad3ec1cbea90" - integrity sha512-tLmsg4SZ5H7tuhBC5bOja0HEblM0coS3Wy5LTCb2C8ZV6eWLewHyK+3qSq9Bi29zmWQ7ojdCd3pxpx4l4d2uGw== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^25.1.0" - "@jest/types" "^25.1.0" - babel-jest "^25.1.0" - chalk "^3.0.0" - glob "^7.1.1" - jest-environment-jsdom "^25.1.0" - jest-environment-node "^25.1.0" - jest-get-type "^25.1.0" - jest-jasmine2 "^25.1.0" - jest-regex-util "^25.1.0" - jest-resolve "^25.1.0" - jest-util "^25.1.0" - jest-validate "^25.1.0" - micromatch "^4.0.2" - pretty-format "^25.1.0" - realpath-native "^1.1.0" - -jest-diff@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.1.0.tgz#58b827e63edea1bc80c1de952b80cec9ac50e1ad" - integrity sha512-nepXgajT+h017APJTreSieh4zCqnSHEJ1iT8HDlewu630lSJ4Kjjr9KNzm+kzGwwcpsDE6Snx1GJGzzsefaEHw== - dependencies: - chalk "^3.0.0" - diff-sequences "^25.1.0" - jest-get-type "^25.1.0" - pretty-format "^25.1.0" - -jest-docblock@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.1.0.tgz#0f44bea3d6ca6dfc38373d465b347c8818eccb64" - integrity sha512-370P/mh1wzoef6hUKiaMcsPtIapY25suP6JqM70V9RJvdKLrV4GaGbfUseUVk4FZJw4oTZ1qSCJNdrClKt5JQA== - dependencies: - detect-newline "^3.0.0" - -jest-each@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.1.0.tgz#a6b260992bdf451c2d64a0ccbb3ac25e9b44c26a" - integrity sha512-R9EL8xWzoPySJ5wa0DXFTj7NrzKpRD40Jy+zQDp3Qr/2QmevJgkN9GqioCGtAJ2bW9P/MQRznQHQQhoeAyra7A== - dependencies: - "@jest/types" "^25.1.0" - chalk "^3.0.0" - jest-get-type "^25.1.0" - jest-util "^25.1.0" - pretty-format "^25.1.0" - -jest-environment-jsdom@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.1.0.tgz#6777ab8b3e90fd076801efd3bff8e98694ab43c3" - integrity sha512-ILb4wdrwPAOHX6W82GGDUiaXSSOE274ciuov0lztOIymTChKFtC02ddyicRRCdZlB5YSrv3vzr1Z5xjpEe1OHQ== - dependencies: - "@jest/environment" "^25.1.0" - "@jest/fake-timers" "^25.1.0" - "@jest/types" "^25.1.0" - jest-mock "^25.1.0" - jest-util "^25.1.0" - jsdom "^15.1.1" - -jest-environment-node@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.1.0.tgz#797bd89b378cf0bd794dc8e3dca6ef21126776db" - integrity sha512-U9kFWTtAPvhgYY5upnH9rq8qZkj6mYLup5l1caAjjx9uNnkLHN2xgZy5mo4SyLdmrh/EtB9UPpKFShvfQHD0Iw== - dependencies: - "@jest/environment" "^25.1.0" - "@jest/fake-timers" "^25.1.0" - "@jest/types" "^25.1.0" - jest-mock "^25.1.0" - jest-util "^25.1.0" - -jest-get-type@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.1.0.tgz#1cfe5fc34f148dc3a8a3b7275f6b9ce9e2e8a876" - integrity sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw== - -jest-haste-map@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.1.0.tgz#ae12163d284f19906260aa51fd405b5b2e5a4ad3" - integrity sha512-/2oYINIdnQZAqyWSn1GTku571aAfs8NxzSErGek65Iu5o8JYb+113bZysRMcC/pjE5v9w0Yz+ldbj9NxrFyPyw== - dependencies: - "@jest/types" "^25.1.0" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.3" - jest-serializer "^25.1.0" - jest-util "^25.1.0" - jest-worker "^25.1.0" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.1.0.tgz#681b59158a430f08d5d0c1cce4f01353e4b48137" - integrity sha512-GdncRq7jJ7sNIQ+dnXvpKO2MyP6j3naNK41DTTjEAhLEdpImaDA9zSAZwDhijjSF/D7cf4O5fdyUApGBZleaEg== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^25.1.0" - "@jest/source-map" "^25.1.0" - "@jest/test-result" "^25.1.0" - "@jest/types" "^25.1.0" - chalk "^3.0.0" - co "^4.6.0" - expect "^25.1.0" - is-generator-fn "^2.0.0" - jest-each "^25.1.0" - jest-matcher-utils "^25.1.0" - jest-message-util "^25.1.0" - jest-runtime "^25.1.0" - jest-snapshot "^25.1.0" - jest-util "^25.1.0" - pretty-format "^25.1.0" - throat "^5.0.0" - -jest-leak-detector@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.1.0.tgz#ed6872d15aa1c72c0732d01bd073dacc7c38b5c6" - integrity sha512-3xRI264dnhGaMHRvkFyEKpDeaRzcEBhyNrOG5oT8xPxOyUAblIAQnpiR3QXu4wDor47MDTiHbiFcbypdLcLW5w== - dependencies: - jest-get-type "^25.1.0" - pretty-format "^25.1.0" - -jest-matcher-utils@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.1.0.tgz#fa5996c45c7193a3c24e73066fc14acdee020220" - integrity sha512-KGOAFcSFbclXIFE7bS4C53iYobKI20ZWleAdAFun4W1Wz1Kkej8Ng6RRbhL8leaEvIOjGXhGf/a1JjO8bkxIWQ== - dependencies: - chalk "^3.0.0" - jest-diff "^25.1.0" - jest-get-type "^25.1.0" - pretty-format "^25.1.0" - -jest-message-util@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.1.0.tgz#702a9a5cb05c144b9aa73f06e17faa219389845e" - integrity sha512-Nr/Iwar2COfN22aCqX0kCVbXgn8IBm9nWf4xwGr5Olv/KZh0CZ32RKgZWMVDXGdOahicM10/fgjdimGNX/ttCQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^25.1.0" - "@jest/types" "^25.1.0" - "@types/stack-utils" "^1.0.1" - chalk "^3.0.0" - micromatch "^4.0.2" - slash "^3.0.0" - stack-utils "^1.0.1" - -jest-mock-console@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jest-mock-console/-/jest-mock-console-1.0.0.tgz#0ca2cbea3aa0af4893c8c5f3c2de45c3d4d15629" - integrity sha512-bN9UjH+Jd/5Gs+p9Xt9Mai4SoUQRFd3f+ZOSCjlcbuVRUhNvl1y9jvys6L7BUx+1Uz+3jOoaq1O+C6j3sSu7SQ== - -jest-mock@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.1.0.tgz#411d549e1b326b7350b2e97303a64715c28615fd" - integrity sha512-28/u0sqS+42vIfcd1mlcg4ZVDmSUYuNvImP4X2lX5hRMLW+CN0BeiKVD4p+ujKKbSPKd3rg/zuhCF+QBLJ4vag== - dependencies: - "@jest/types" "^25.1.0" - -jest-pnp-resolver@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" - integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== - -jest-regex-util@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.1.0.tgz#efaf75914267741838e01de24da07b2192d16d87" - integrity sha512-9lShaDmDpqwg+xAd73zHydKrBbbrIi08Kk9YryBEBybQFg/lBWR/2BDjjiSE7KIppM9C5+c03XiDaZ+m4Pgs1w== - -jest-resolve-dependencies@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.1.0.tgz#8a1789ec64eb6aaa77fd579a1066a783437e70d2" - integrity sha512-Cu/Je38GSsccNy4I2vL12ZnBlD170x2Oh1devzuM9TLH5rrnLW1x51lN8kpZLYTvzx9j+77Y5pqBaTqfdzVzrw== - dependencies: - "@jest/types" "^25.1.0" - jest-regex-util "^25.1.0" - jest-snapshot "^25.1.0" - -jest-resolve@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.1.0.tgz#23d8b6a4892362baf2662877c66aa241fa2eaea3" - integrity sha512-XkBQaU1SRCHj2Evz2Lu4Czs+uIgJXWypfO57L7JYccmAXv4slXA6hzNblmcRmf7P3cQ1mE7fL3ABV6jAwk4foQ== - dependencies: - "@jest/types" "^25.1.0" - browser-resolve "^1.11.3" - chalk "^3.0.0" - jest-pnp-resolver "^1.2.1" - realpath-native "^1.1.0" - -jest-runner@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.1.0.tgz#fef433a4d42c89ab0a6b6b268e4a4fbe6b26e812" - integrity sha512-su3O5fy0ehwgt+e8Wy7A8CaxxAOCMzL4gUBftSs0Ip32S0epxyZPDov9Znvkl1nhVOJNf4UwAsnqfc3plfQH9w== - dependencies: - "@jest/console" "^25.1.0" - "@jest/environment" "^25.1.0" - "@jest/test-result" "^25.1.0" - "@jest/types" "^25.1.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.3" - jest-config "^25.1.0" - jest-docblock "^25.1.0" - jest-haste-map "^25.1.0" - jest-jasmine2 "^25.1.0" - jest-leak-detector "^25.1.0" - jest-message-util "^25.1.0" - jest-resolve "^25.1.0" - jest-runtime "^25.1.0" - jest-util "^25.1.0" - jest-worker "^25.1.0" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.1.0.tgz#02683218f2f95aad0f2ec1c9cdb28c1dc0ec0314" - integrity sha512-mpPYYEdbExKBIBB16ryF6FLZTc1Rbk9Nx0ryIpIMiDDkOeGa0jQOKVI/QeGvVGlunKKm62ywcioeFVzIbK03bA== - dependencies: - "@jest/console" "^25.1.0" - "@jest/environment" "^25.1.0" - "@jest/source-map" "^25.1.0" - "@jest/test-result" "^25.1.0" - "@jest/transform" "^25.1.0" - "@jest/types" "^25.1.0" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.3" - jest-config "^25.1.0" - jest-haste-map "^25.1.0" - jest-message-util "^25.1.0" - jest-mock "^25.1.0" - jest-regex-util "^25.1.0" - jest-resolve "^25.1.0" - jest-snapshot "^25.1.0" - jest-util "^25.1.0" - jest-validate "^25.1.0" - realpath-native "^1.1.0" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.0.0" - -jest-serializer@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.1.0.tgz#73096ba90e07d19dec4a0c1dd89c355e2f129e5d" - integrity sha512-20Wkq5j7o84kssBwvyuJ7Xhn7hdPeTXndnwIblKDR2/sy1SUm6rWWiG9kSCgJPIfkDScJCIsTtOKdlzfIHOfKA== - -jest-snapshot@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.1.0.tgz#d5880bd4b31faea100454608e15f8d77b9d221d9" - integrity sha512-xZ73dFYN8b/+X2hKLXz4VpBZGIAn7muD/DAg+pXtDzDGw3iIV10jM7WiHqhCcpDZfGiKEj7/2HXAEPtHTj0P2A== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^25.1.0" - chalk "^3.0.0" - expect "^25.1.0" - jest-diff "^25.1.0" - jest-get-type "^25.1.0" - jest-matcher-utils "^25.1.0" - jest-message-util "^25.1.0" - jest-resolve "^25.1.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^25.1.0" - semver "^7.1.1" - -jest-util@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.1.0.tgz#7bc56f7b2abd534910e9fa252692f50624c897d9" - integrity sha512-7did6pLQ++87Qsj26Fs/TIwZMUFBXQ+4XXSodRNy3luch2DnRXsSnmpVtxxQ0Yd6WTipGpbhh2IFP1mq6/fQGw== - dependencies: - "@jest/types" "^25.1.0" - chalk "^3.0.0" - is-ci "^2.0.0" - mkdirp "^0.5.1" - -jest-validate@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.1.0.tgz#1469fa19f627bb0a9a98e289f3e9ab6a668c732a" - integrity sha512-kGbZq1f02/zVO2+t1KQGSVoCTERc5XeObLwITqC6BTRH3Adv7NZdYqCpKIZLUgpLXf2yISzQ465qOZpul8abXA== - dependencies: - "@jest/types" "^25.1.0" - camelcase "^5.3.1" - chalk "^3.0.0" - jest-get-type "^25.1.0" - leven "^3.1.0" - pretty-format "^25.1.0" - -jest-watcher@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.1.0.tgz#97cb4a937f676f64c9fad2d07b824c56808e9806" - integrity sha512-Q9eZ7pyaIr6xfU24OeTg4z1fUqBF/4MP6J801lyQfg7CsnZ/TCzAPvCfckKdL5dlBBEKBeHV0AdyjFZ5eWj4ig== - dependencies: - "@jest/test-result" "^25.1.0" - "@jest/types" "^25.1.0" - ansi-escapes "^4.2.1" - chalk "^3.0.0" - jest-util "^25.1.0" - string-length "^3.1.0" - -jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== - dependencies: - merge-stream "^2.0.0" - supports-color "^6.1.0" - -jest-worker@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.1.0.tgz#75d038bad6fdf58eba0d2ec1835856c497e3907a" - integrity sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg== - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest@25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-25.1.0.tgz#b85ef1ddba2fdb00d295deebbd13567106d35be9" - integrity sha512-FV6jEruneBhokkt9MQk0WUFoNTwnF76CLXtwNMfsc0um0TlB/LG2yxUd0KqaFjEJ9laQmVWQWS0sG/t2GsuI0w== - dependencies: - "@jest/core" "^25.1.0" - import-local "^3.0.2" - jest-cli "^25.1.0" - -jju@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" - integrity sha1-o6vicYryQaKykE+EpiWXDzia4yo= - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^15.1.1: - version "15.2.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" - integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== - dependencies: - abab "^2.0.0" - acorn "^7.1.0" - acorn-globals "^4.3.2" - array-equal "^1.0.0" - cssom "^0.4.1" - cssstyle "^2.0.0" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.1" - html-encoding-sniffer "^1.0.2" - nwsapi "^2.2.0" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.7" - saxes "^3.1.9" - symbol-tree "^3.2.2" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.1.2" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^7.0.0" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@2.x, json5@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" - integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== - dependencies: - minimist "^1.2.0" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= - optionalDependencies: - graceful-fs "^4.1.9" - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - -lerna@3.20.2: - version "3.20.2" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.20.2.tgz#abf84e73055fe84ee21b46e64baf37b496c24864" - integrity sha512-bjdL7hPLpU3Y8CBnw/1ys3ynQMUjiK6l9iDWnEGwFtDy48Xh5JboR9ZJwmKGCz9A/sarVVIGwf1tlRNKUG9etA== - dependencies: - "@lerna/add" "3.20.0" - "@lerna/bootstrap" "3.20.0" - "@lerna/changed" "3.20.0" - "@lerna/clean" "3.20.0" - "@lerna/cli" "3.18.5" - "@lerna/create" "3.18.5" - "@lerna/diff" "3.18.5" - "@lerna/exec" "3.20.0" - "@lerna/import" "3.18.5" - "@lerna/info" "3.20.0" - "@lerna/init" "3.18.5" - "@lerna/link" "3.18.5" - "@lerna/list" "3.20.0" - "@lerna/publish" "3.20.2" - "@lerna/run" "3.20.0" - "@lerna/version" "3.20.2" - import-local "^2.0.0" - npmlog "^4.1.2" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levenary@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" - integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== - dependencies: - leven "^3.1.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-json-file@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" - integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== - dependencies: - graceful-fs "^4.1.15" - parse-json "^4.0.0" - pify "^4.0.1" - strip-bom "^3.0.0" - type-fest "^0.3.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= - -lodash.get@^4.0.0, lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - -lodash.isequal@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= - -lodash.isobject@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" - integrity sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.merge@^4.6.1, lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.pickby@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" - integrity sha1-feoh2MGNdwOifHBMFdO4SmfjOv8= - -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - -lodash.template@^4.0.2, lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash.zip@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" - integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= - -lodash@^4.16.6, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5, lodash@^4.2.1, lodash@~4.17.12, lodash@~4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -lodash@^4.17.19: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -log-update@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-3.4.0.tgz#3b9a71e00ac5b1185cc193a36d654581c48f97b9" - integrity sha512-ILKe88NeMt4gmDvk/eb615U/IVn7K9KWGkoYbdatQ69Z65nj1ZzjM6fHXfcs0Uge+e+EGnMW7DY4T9yko8vWFg== - dependencies: - ansi-escapes "^3.2.0" - cli-cursor "^2.1.0" - wrap-ansi "^5.0.0" - -loglevel-plugin-prefix@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz#2fe0e05f1a820317d98d8c123e634c1bd84ff644" - integrity sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g== - -loglevel@^1.6.0: - version "1.6.7" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56" - integrity sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A== - -lolex@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" - integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== - dependencies: - "@sinonjs/commons" "^1.7.0" - -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lower-case-first@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" - integrity sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E= - dependencies: - lower-case "^1.1.2" - -lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - -lower-case@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" - integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== - dependencies: - tslib "^1.10.0" - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -macos-release@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" - integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA== - -magic-string@^0.22.5: - version "0.22.5" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" - integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== - dependencies: - vlq "^0.2.2" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0, make-dir@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" - integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== - dependencies: - semver "^6.0.0" - -make-error@1.x, make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" - integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== - dependencies: - agentkeepalive "^3.4.1" - cacache "^12.0.0" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - -map-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" - integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -meow@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" - integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist "^1.1.3" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - -meow@^8.0.0: - version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.2.3, merge2@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" - integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== - -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" - integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== - -mime-types@2.1.18: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" - integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== - dependencies: - mime-db "~1.33.0" - -mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== - dependencies: - mime-db "1.43.0" - -mime-types@^2.1.25: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" - integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= - dependencies: - dom-walk "^0.1.0" - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - -minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= - dependencies: - mkdirp "*" - -mkdirp@*: - version "1.0.3" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" - integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== - -mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -mkdirp@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -morgan@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" - integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== - dependencies: - basic-auth "~2.0.0" - debug "2.6.9" - depd "~1.1.2" - on-finished "~2.3.0" - on-headers "~1.0.1" - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@^2.0.0, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -multimatch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" - integrity sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA== - dependencies: - array-differ "^2.0.3" - array-union "^1.0.2" - arrify "^1.0.1" - minimatch "^3.0.4" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -mute-stream@0.0.8, mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mz@^2.5.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nan@^2.12.1, nan@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -neo-async@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -no-case@^2.2.0, no-case@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -no-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" - integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== - dependencies: - lower-case "^2.0.1" - tslib "^1.10.0" - -nock@12.0.2: - version "12.0.2" - resolved "https://registry.yarnpkg.com/nock/-/nock-12.0.2.tgz#47617b34738e026b29d2294b4579e35b27e6a4d3" - integrity sha512-pTckyfP8QHvwXP/oX+zQuSIL3S/mWTd84ba4pOGZlS/FgRZyljv4C3ZyOjgMilvkydSaERML/aJEF13EBUuDTQ== - dependencies: - debug "^4.1.0" - json-stringify-safe "^5.0.1" - lodash "^4.17.13" - propagate "^2.0.0" - -node-abi@^2.7.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.15.0.tgz#51d55cc711bd9e4a24a572ace13b9231945ccb10" - integrity sha512-FeLpTS0F39U7hHZU1srAK4Vx+5AHNVOTP+hxBNQknR/54laTHSFIJkDWDqiquY1LeLUgTfPN7sLPhMubx0PLAg== - dependencies: - semver "^5.4.1" - -node-fetch-npm@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" - integrity sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw== - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" - -node-fetch@^2.3.0, node-fetch@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== - -node-fetch@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-gyp@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.0.tgz#8e31260a7af4a2e2f994b0673d4e0b3866156332" - integrity sha512-OUTryc5bt/P8zVgNUmC6xdXiDJxLMAW8cF5tLQOT9E5sOQj+UeQxnnPy74K3CLCa/SOjjBlbuzDLR8ANwA+wmw== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.1.2" - request "^2.88.0" - rimraf "^2.6.3" - semver "^5.7.1" - tar "^4.4.12" - which "^1.3.1" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" - integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== - dependencies: - growly "^1.3.0" - is-wsl "^2.1.1" - semver "^6.3.0" - shellwords "^0.1.1" - which "^1.3.1" - -node-releases@^1.1.50: - version "1.1.51" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.51.tgz#70d0e054221343d2966006bfbd4d98622cc00bd0" - integrity sha512-1eQEs6HFYY1kMXQPOLzCf7HdjReErmvn85tZESMczdCNVWP3Y7URYLBAyYynuI7yef1zj4HN5q+oB2x67QU0lw== - dependencies: - semver "^6.3.0" - -node-releases@^1.1.61: - version "1.1.61" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" - integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== - -noop-logger@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" - integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= - -nopt@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.2.tgz#cae5c410ae2434f9a6c1baa65d5bc3b9366c8699" - integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg== - dependencies: - hosted-git-info "^4.0.1" - resolve "^1.20.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-lifecycle@^3.1.2: - version "3.1.4" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" - integrity sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A== - dependencies: - byline "^5.0.0" - graceful-fs "^4.1.15" - node-gyp "^5.0.2" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" - -npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" - integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== - dependencies: - hosted-git-info "^2.7.1" - osenv "^0.1.5" - semver "^5.6.0" - validate-npm-package-name "^3.0.0" - -npm-packlist@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - -npm-pick-manifest@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" - integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== - dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^6.0.0" - semver "^5.4.1" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^4.0.1, npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" - integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -octokit-pagination-methods@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" - integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== - dependencies: - mimic-fn "^2.1.0" - -open@^7.0.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/open/-/open-7.2.1.tgz#07b0ade11a43f2a8ce718480bdf3d7563a095195" - integrity sha512-xbYCJib4spUdmcs0g/2mK1nKo/jO2T7INClWd/beL7PFkXRWgr8B23ssDHX/USPn2M2IjDR5UdpYs6I67SnTSA== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - -opencollective-postinstall@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" - integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1, optionator@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4, osenv@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-each-series@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" - integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" - integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" - integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= - dependencies: - p-reduce "^1.0.0" - -p-map@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-pipe@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" - integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= - -p-queue@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346" - integrity sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg== - dependencies: - eventemitter3 "^3.1.0" - -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -p-waterfall@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" - integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= - dependencies: - p-reduce "^1.0.0" - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= - dependencies: - no-case "^2.2.0" - -param-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" - integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== - dependencies: - dot-case "^3.0.3" - tslib "^1.10.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-github-repo-url@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" - integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= - -parse-github-url@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395" - integrity sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw== - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" - integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - lines-and-columns "^1.1.6" - -parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - -parse-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" - integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== - dependencies: - is-ssh "^1.3.0" - protocols "^1.4.0" - -parse-url@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" - integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== - dependencies: - is-ssh "^1.3.0" - normalize-url "^3.3.0" - parse-path "^4.0.0" - protocols "^1.4.0" - -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e" - integrity sha1-LVeNNFX2YNpl7KGO+VtODekSdh4= - dependencies: - camel-case "^3.0.0" - upper-case-first "^1.1.0" - -pascal-case@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" - integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== - dependencies: - no-case "^3.0.3" - tslib "^1.10.0" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5" - integrity sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU= - dependencies: - no-case "^2.2.0" - -path-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.3.tgz#d48119aed52c4712e036ca40c6b15984f909554f" - integrity sha512-UMFU6UETFpCNWbIWNczshPrnK/7JAXBP2NYw80ojElbQ2+JYxdqWDBkvvqM93u4u6oLmuJ/tPOf2tM8KtXv4eg== - dependencies: - dot-case "^3.0.3" - tslib "^1.10.0" - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.5, path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-to-regexp@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" - integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7, picomatch@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" - integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== - -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -please-upgrade-node@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== - dependencies: - semver-compare "^1.0.0" - -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -prebuild-install@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.3.tgz#ef4052baac60d465f5ba6bf003c9c1de79b9da8e" - integrity sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g== - dependencies: - detect-libc "^1.0.3" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.0" - mkdirp "^0.5.1" - napi-build-utils "^1.0.1" - node-abi "^2.7.0" - noop-logger "^0.1.1" - npmlog "^4.0.1" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^3.0.3" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - which-pm-runs "^1.0.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - -prettier@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" - integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg== - -pretty-format@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.1.0.tgz#ed869bdaec1356fc5ae45de045e2c8ec7b07b0c8" - integrity sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ== - dependencies: - "@jest/types" "^25.1.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.0" - -pretty-ms@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-6.0.1.tgz#03ec6cfee20329f142645e63efad96bb775d3da4" - integrity sha512-ke4njoVmlotekHlHyCZ3wI/c5AMT8peuHs8rKJqekj/oR5G8lND2dVpicFlUz5cbZgE290vvkMuDwfj/OcW1kw== - dependencies: - parse-ms "^2.1.0" - -prettycli@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/prettycli/-/prettycli-1.4.3.tgz#b28ec2aad9de07ae1fd75ef294fb54cbdee07ed5" - integrity sha512-KLiwAXXfSWXZqGmZlnKPuGMTFp+0QbcySplL1ft9gfteT/BNsG64Xo8u2Qr9r+qnsIZWBQ66Zs8tg+8s2fmzvw== - dependencies: - chalk "2.1.0" - -private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -process-es6@^0.11.6: - version "0.11.6" - resolved "https://registry.yarnpkg.com/process-es6/-/process-es6-0.11.6.tgz#c6bb389f9a951f82bd4eb169600105bd2ff9c778" - integrity sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g= - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress@2.0.3, progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= - dependencies: - err-code "^1.0.0" - retry "^0.10.0" - -prompts@^2.0.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.1.tgz#b63a9ce2809f106fa9ae1277c275b167af46ea05" - integrity sha512-qIP2lQyCwYbdzcqHIUi2HAxiWixhoM9OdLCWf8txXsapC/X9YdsCoeyRIXE/GP+Q0J37Q7+XN/MFqbUa7IzXNA== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.4" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= - dependencies: - read "1" - -propagate@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" - integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -protocols@^1.1.0, protocols@^1.4.0: - version "1.4.7" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" - integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== - -protoduck@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" - integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== - dependencies: - genfun "^5.0.0" - -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.1" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.24, psl@^1.1.28: - version "1.7.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" - integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.3.2, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-is@^16.12.0: - version "16.13.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.0.tgz#0f37c3613c34fe6b37cd7f763a0d6293ab15c527" - integrity sha512-GFMtL0vHkiBv9HluwNZTggSn/sCyEt9n02aM0dSAjGGyqyNlAyftYm4phPxdvCigG15JreC5biwxCgTAJZ7yAA== - -read-cmd-shim@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" - integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== - dependencies: - graceful-fs "^4.1.2" - -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: - version "2.1.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" - integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== - dependencies: - glob "^7.1.1" - json-parse-better-errors "^1.0.1" - normalize-package-data "^2.0.0" - npm-normalize-package-bin "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" - -read-package-tree@^5.1.6: - version "5.3.1" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" - integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== - dependencies: - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - util-promisify "^2.1.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -read@1, read@~1.0.1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= - dependencies: - mute-stream "~0.0.4" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -"readable-stream@2 || 3", readable-stream@3, readable-stream@3.6.0, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdir-scoped-modules@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" - integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== - dependencies: - picomatch "^2.0.7" - -realpath-native@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" - integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== - dependencies: - util.promisify "^1.0.0" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== - -regenerator-runtime@^0.13.4: - version "0.13.4" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz#e96bf612a3362d12bb69f7e8f74ffeab25c7ac91" - integrity sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g== - -regenerator-transform@^0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.2.tgz#949d9d87468ff88d5a7e4734ebb994a892de1ff2" - integrity sha512-V4+lGplCM/ikqi5/mkkpJ06e9Bujq1NFmNLvsCs56zg3ZbzrnUzAtizZ24TXxtRX/W2jcdScwQCnbL0CICTFkQ== - dependencies: - "@babel/runtime" "^7.8.4" - private "^0.1.8" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpp@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" - integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== - -regexpu-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -registry-auth-token@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" - integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ== - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-url@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -request-promise-core@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" - integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== - dependencies: - lodash "^4.17.15" - -request-promise-native@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" - integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== - dependencies: - request-promise-core "1.1.3" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -request@^2.83.0, request@^2.88.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@1.15.1, resolve@1.x, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.3.2: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== - dependencies: - path-parse "^1.0.6" - -resolve@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== - dependencies: - path-parse "^1.0.5" - -resolve@^1.1.6: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.20.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -resq@^1.6.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/resq/-/resq-1.7.1.tgz#7e9f63b48e001190be7ffdaa2d5b25b334268780" - integrity sha512-09u9Q5SAuJfAW5UoVAmvRtLvCOMaKP+djiixTXsZvPaojGKhuvc0Nfvp84U1rIfopJWEOXi5ywpCFwCk7mj8Xw== - dependencies: - fast-deep-equal "^2.0.1" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rgb2hex@^0.1.0: - version "0.1.10" - resolved "https://registry.yarnpkg.com/rgb2hex/-/rgb2hex-0.1.10.tgz#4fdd432665273e2d5900434940ceba0a04c8a8a8" - integrity sha512-vKz+kzolWbL3rke/xeTE2+6vHmZnNxGyDnaVW4OckntAIcc7DcZzWkQSfxMDwqHS8vhgySnIFyBUH7lIk6PxvQ== - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-babel@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" - integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - rollup-pluginutils "^2.8.1" - -rollup-plugin-filesize@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-filesize/-/rollup-plugin-filesize-6.2.1.tgz#552eebc88dd69db3321d99c27dbd49e550812e54" - integrity sha512-JQ2+NMoka81lCR2caGWyngqMKpvJCl7EkFYU7A+T0dA7U1Aml13FW5Ky0aiZIeU3/13cjsKQLRr35SQVmk6i/A== - dependencies: - boxen "^4.1.0" - brotli-size "4.0.0" - colors "^1.3.3" - filesize "^4.1.2" - gzip-size "^5.1.1" - lodash.merge "^4.6.2" - terser "^4.1.3" - -rollup-plugin-ignore@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/rollup-plugin-ignore/-/rollup-plugin-ignore-1.0.5.tgz#fc16b321b29d054d728dafde808a8a52ec39f024" - integrity sha512-fGDl4eRMpEeSNqZ9WFR3piK47rrFgVzAIFRsJhTc9/P5t1qsScuFeEBfbXbHDnv6yh5OUth8dti+f+dswebV+Q== - -rollup-plugin-node-globals@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz#5e1f24a9bb97c0ef51249f625e16c7e61b7c020b" - integrity sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g== - dependencies: - acorn "^5.7.3" - buffer-es6 "^4.9.3" - estree-walker "^0.5.2" - magic-string "^0.22.5" - process-es6 "^0.11.6" - rollup-pluginutils "^2.3.1" - -rollup-plugin-terser@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.2.0.tgz#ba758adf769347b7f1eaf9ef35978d2e207dccc7" - integrity sha512-jQI+nYhtDBc9HFRBz8iGttQg7li9klmzR62RG2W2nN6hJ/FI2K2ItYQ7kJ7/zn+vs+BP1AEccmVRjRN989I+Nw== - dependencies: - "@babel/code-frame" "^7.5.5" - jest-worker "^24.9.0" - rollup-pluginutils "^2.8.2" - serialize-javascript "^2.1.2" - terser "^4.6.2" - -rollup-plugin-typescript2@0.26.0: - version "0.26.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.26.0.tgz#cee2b44d51d9623686656d76dc30a73c4de91672" - integrity sha512-lUK7XZVG77tu8dmv1L/0LZFlavED/5Yo6e4iMMl6fdox/yKdj4IFRRPPJEXNdmEaT1nDQQeCi7b5IwKHffMNeg== - dependencies: - find-cache-dir "^3.2.0" - fs-extra "8.1.0" - resolve "1.15.1" - rollup-pluginutils "2.8.2" - tslib "1.10.0" - -rollup-pluginutils@2.8.2, rollup-pluginutils@^2.3.1, rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@1.32.1: - version "1.32.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" - integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== - dependencies: - "@types/estree" "*" - "@types/node" "*" - acorn "^7.1.0" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.2.0, run-async@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" - integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== - dependencies: - is-promise "^2.1.0" - -run-parallel@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rxjs@^6.4.0, rxjs@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" - integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== - -safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sauce-connect-launcher@^1.2.3: - version "1.3.1" - resolved "https://registry.yarnpkg.com/sauce-connect-launcher/-/sauce-connect-launcher-1.3.1.tgz#31137f57b0f7176e1c0525b7fb09c6da746647cf" - integrity sha512-vIf9qDol3q2FlYzrKt0dr3kvec6LSjX2WS+/mVnAJIhqh1evSkPKCR2AzcJrnSmx9Xt9PtV0tLY7jYh0wsQi8A== - dependencies: - adm-zip "~0.4.3" - async "^2.1.2" - https-proxy-agent "^3.0.0" - lodash "^4.16.6" - rimraf "^2.5.4" - -saucelabs@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-3.0.1.tgz#ea53c0202cc728455ac4e7049ed3e466667d3645" - integrity sha512-yjfwBWaF0y318hDPZpXV6poqrKpV7sStl5iqalIj5cEStmWxnovRn0EzHpXIeqg8Twm2v1Z8FAHgbK75+eDeEg== - dependencies: - change-case "^3.1.0" - hash.js "^1.1.7" - request "^2.88.0" - yargs "^13.2.2" - -saxes@^3.1.9: - version "3.1.11" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" - integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== - dependencies: - xmlchars "^2.1.1" - -selenium-standalone@^6.15.1: - version "6.17.0" - resolved "https://registry.yarnpkg.com/selenium-standalone/-/selenium-standalone-6.17.0.tgz#0f24b691836205ee9bc3d7a6f207ebcb28170cd9" - integrity sha512-5PSnDHwMiq+OCiAGlhwQ8BM9xuwFfvBOZ7Tfbw+ifkTnOy0PWbZmI1B9gPGuyGHpbQ/3J3CzIK7BYwrQ7EjtWQ== - dependencies: - async "^2.6.2" - commander "^2.19.0" - cross-spawn "^6.0.5" - debug "^4.1.1" - lodash "^4.17.11" - minimist "^1.2.0" - mkdirp "^0.5.1" - progress "2.0.3" - request "2.88.0" - tar-stream "2.0.0" - urijs "^1.19.1" - which "^1.3.1" - yauzl "^2.10.0" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= - -semver-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" - integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== - -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@6.3.0, semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^7.1.1: - version "7.1.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" - integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== - -semver@^7.3.4: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -sentence-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4" - integrity sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ= - dependencies: - no-case "^2.2.0" - upper-case-first "^1.1.2" - -sentence-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.3.tgz#47576e4adff7abf42c63c815b0543c9d2f85a930" - integrity sha512-ZPr4dgTcNkEfcGOMFQyDdJrTU9uQO1nb1cjf+nuzb6FxgMDgKddZOM29qEsB7jvsZSMruLRcL2KfM4ypKpa0LA== - dependencies: - no-case "^3.0.3" - tslib "^1.10.0" - upper-case-first "^2.0.1" - -serialize-error@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-5.0.0.tgz#a7ebbcdb03a5d71a6ed8461ffe0fc1a1afed62ac" - integrity sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA== - dependencies: - type-fest "^0.8.0" - -serialize-javascript@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" - integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== - -serialize-javascript@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" - integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== - dependencies: - randombytes "^2.1.0" - -serve-handler@6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.2.tgz#f05b0421a313fff2d257838cba00cbcc512cd2b6" - integrity sha512-RFh49wX7zJmmOVDcIjiDSJnMH+ItQEvyuYLYuDBVoA/xmQSCuj+uRmk1cmBB5QQlI3qOiWKp6p4DUGY+Z5AB2A== - dependencies: - bytes "3.0.0" - content-disposition "0.5.2" - fast-url-parser "1.1.3" - mime-types "2.1.18" - minimatch "3.0.4" - path-is-inside "1.0.2" - path-to-regexp "2.2.1" - range-parser "1.2.0" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -serve@11.3.0: - version "11.3.0" - resolved "https://registry.yarnpkg.com/serve/-/serve-11.3.0.tgz#1d342e13e310501ecf17b6602f1f35da640d6448" - integrity sha512-AU0g50Q1y5EVFX56bl0YX5OtVjUX1N737/Htj93dQGKuHiuLvVB45PD8Muar70W6Kpdlz8aNJfoUqTyAq9EE/A== - dependencies: - "@zeit/schemas" "2.6.0" - ajv "6.5.3" - arg "2.0.0" - boxen "1.3.0" - chalk "2.4.1" - clipboardy "1.2.3" - compression "1.7.3" - serve-handler "6.1.2" - update-check "1.5.2" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== - -shelljs@0.8.4, shelljs@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -shipjs-lib@0.23.3: - version "0.23.3" - resolved "https://registry.yarnpkg.com/shipjs-lib/-/shipjs-lib-0.23.3.tgz#25cc73544f99480fb66f10428d252b8292d355c7" - integrity sha512-ZyKAKI/d6fBw25XTK1zxRcJyPlQECvzNZar/N9iS7CZF6qs9yyUnxeHlB4FuF4rIvdPSdz0ePjQGhkvYnwFeEQ== - dependencies: - deepmerge "^4.2.2" - dotenv "^8.1.0" - parse-github-url "1.0.2" - semver "6.3.0" - shelljs "0.8.4" - -shipjs@0.23.3: - version "0.23.3" - resolved "https://registry.yarnpkg.com/shipjs/-/shipjs-0.23.3.tgz#f302852ee8deebd21b497eb6da52fed19df12f3d" - integrity sha512-3DZMQ5VVVj2d3bkeF5Tk0U2j/IpZUm/Evk/coRvvRA4cu8bcm9eXh6zcSpJVwMUWloL7SmxK/Y/GbCMb60+qDw== - dependencies: - "@babel/runtime" "^7.6.3" - "@octokit/rest" "^17.0.0" - "@slack/webhook" "^5.0.1" - add-stream "^1.0.0" - arg "4.1.3" - chalk "4.0.0" - change-case "4.1.1" - conventional-changelog-angular "^5.0.6" - conventional-changelog-core "^4.1.4" - conventional-changelog-preset-loader "^2.3.0" - deepmerge "^4.2.2" - dotenv "^8.2.0" - ejs "^3.0.0" - esm "3.2.25" - globby "^10.0.1" - inquirer "7.1.0" - mime-types "^2.1.25" - mkdirp "^1.0.0" - open "^7.0.0" - prettier "^2.0.0" - serialize-javascript "^3.0.0" - shell-quote "^1.7.2" - shipjs-lib "0.23.3" - temp-write "4.0.0" - tempfile "^3.0.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -simple-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" - integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= - -simple-get@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" - integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== - dependencies: - decompress-response "^4.2.0" - once "^1.3.1" - simple-concat "^1.0.0" - -sisteransi@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" - integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig== - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -slide@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= - -smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== - -snake-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" - integrity sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8= - dependencies: - no-case "^2.2.0" - -snake-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.3.tgz#c598b822ab443fcbb145ae8a82c5e43526d5bbee" - integrity sha512-WM1sIXEO+rsAHBKjGf/6R1HBBcgbncKS08d2Aqec/mrDSpU80SiOU41hO7ny6DToHSyrlwTYzQBIK1FPSx4Y3Q== - dependencies: - dot-case "^3.0.3" - tslib "^1.10.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socks-proxy-agent@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - -socks@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" - integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== - dependencies: - ip "1.1.5" - smart-buffer "^4.1.0" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= - dependencies: - is-plain-obj "^1.0.0" - -sort-object-keys@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45" - integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg== - -sort-package-json@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.40.0.tgz#81ad8c2bd7dd21b6a127ab4a26186a160f07a157" - integrity sha512-3Uc1kjmQ3SYuKziKghZvA23SihOqGxEjK2QPfFPmd7BMo9rWiJdC2FJWvAZbfhLWapuJrdmkUf6Kp0G4Wtuv5w== - dependencies: - detect-indent "^6.0.0" - detect-newline "3.1.0" - git-hooks-list "1.0.2" - globby "10.0.1" - is-plain-obj "2.1.0" - sort-object-keys "^1.1.3" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.6, source-map-support@~0.5.12: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split2@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" - integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== - dependencies: - through2 "^2.0.2" - -split2@^3.0.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^6.0.0, ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== - dependencies: - figgy-pudding "^3.5.1" - -stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -stream-buffers@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-3.0.2.tgz#5249005a8d5c2d00b3a32e6e0a6ea209dc4f3521" - integrity sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ== - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -string-length@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" - integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== - dependencies: - astral-regex "^1.0.0" - strip-ansi "^5.2.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.trimleft@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" - integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - -string.prototype.trimright@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" - integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -strong-log-transformer@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" - -suffix@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/suffix/-/suffix-0.1.1.tgz#cc58231646a0ef1102f79478ef3a9248fd9c842f" - integrity sha1-zFgjFkag7xEC95R47zqSSP2chC8= - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= - dependencies: - has-flag "^2.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -swap-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" - integrity sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM= - dependencies: - lower-case "^1.1.1" - upper-case "^1.1.1" - -symbol-tree@^3.2.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -tar-fs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad" - integrity sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA== - dependencies: - chownr "^1.1.1" - mkdirp "^0.5.1" - pump "^3.0.0" - tar-stream "^2.0.0" - -tar-stream@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.0.0.tgz#8829bbf83067bc0288a9089db49c56be395b6aea" - integrity sha512-n2vtsWshZOVr/SY4KtslPoUlyNh06I2SGgAOCZmquCEjlbV/LjY2CY80rDtdQRHFOYXNlgBDo6Fr3ww2CWPOtA== - dependencies: - bl "^2.2.0" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar-stream@^2.0.0, tar-stream@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.1.tgz#e188b1dd74b940b9efc4a832a9a2dc957845937c" - integrity sha512-GZjLk64XcE/58qwIc1ZfXGqTSE4OutPMEkfBE/oh9eJ4x1eMRjYkgrLrav7PzddpvIpSJSGi8FgNNYXdB9Vumg== - dependencies: - bl "^4.0.1" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -temp-write@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-4.0.0.tgz#cd2e0825fc826ae72d201dc26eef3bf7e6fc9320" - integrity sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw== - dependencies: - graceful-fs "^4.1.15" - is-stream "^2.0.0" - make-dir "^3.0.0" - temp-dir "^1.0.0" - uuid "^3.3.2" - -temp-write@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" - integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= - dependencies: - graceful-fs "^4.1.2" - is-stream "^1.1.0" - make-dir "^1.0.0" - pify "^3.0.0" - temp-dir "^1.0.0" - uuid "^3.0.1" - -tempfile@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-3.0.0.tgz#5376a3492de7c54150d0cc0612c3f00e2cdaf76c" - integrity sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw== - dependencies: - temp-dir "^2.0.0" - uuid "^3.3.2" - -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - -term-size@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" - integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -terser@^4.1.3, terser@^4.6.2: - version "4.6.6" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.6.tgz#da2382e6cafbdf86205e82fb9a115bd664d54863" - integrity sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.0" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" - integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= - dependencies: - any-promise "^1.0.0" - -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - -through2@^2.0.0, through2@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" - integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== - dependencies: - readable-stream "2 || 3" - -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -timsort@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - -title-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" - integrity sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o= - dependencies: - no-case "^2.2.0" - upper-case "^1.0.3" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== - dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= - -trim-newlines@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" - integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== - -trim-off-newlines@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" - integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= - -ts-jest@25.2.1: - version "25.2.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.2.1.tgz#49bf05da26a8b7fbfbc36b4ae2fcdc2fef35c85d" - integrity sha512-TnntkEEjuXq/Gxpw7xToarmHbAafgCaAzOpnajnFC6jI7oo1trMzAHA04eWpc3MhV6+yvhE8uUBAmN+teRJh0A== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - mkdirp "0.x" - resolve "1.x" - semver "^5.5" - yargs-parser "^16.1.0" - -ts-mockito@2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/ts-mockito/-/ts-mockito-2.5.0.tgz#ad853051f2d116dfcaf6de6b0a1df2c82eda2d1f" - integrity sha512-b3qUeMfghRq5k5jw3xNJcnU9RKhqKnRn0k9v9QkN+YpuawrFuMIiGwzFZCpdi5MHy26o7YPnK8gag2awURl3nA== - dependencies: - lodash "^4.17.5" - -ts-node@8.6.2: - version "8.6.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.6.2.tgz#7419a01391a818fbafa6f826a33c1a13e9464e35" - integrity sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg== - dependencies: - arg "^4.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.6" - yn "3.1.1" - -tslib@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== - -tslib@^1.10.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== - -tslib@^1.8.1, tslib@^1.9.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" - integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== - -tsutils@^3.17.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.0, type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" - integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== - -typescript@~3.7.2: - version "3.7.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" - integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== - -uglify-js@^3.1.4: - version "3.8.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805" - integrity sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ== - dependencies: - commander "~2.20.3" - source-map "~0.6.1" - -uid-number@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= - -umask@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -universal-user-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" - integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== - dependencies: - os-name "^3.1.0" - -universal-user-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-5.0.0.tgz#a3182aa758069bf0e79952570ca757de3579c1d9" - integrity sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q== - dependencies: - os-name "^3.1.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1, upath@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -update-check@1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/update-check/-/update-check-1.5.2.tgz#2fe09f725c543440b3d7dabe8971f2d5caaedc28" - integrity sha512-1TrmYLuLj/5ZovwUS7fFd1jMH3NnFDN1y1A8dboedIDt7zs/zJMo6TwwlhYKkSeEwzleeiSBV5/3c9ufAQWDaQ== - dependencies: - registry-auth-token "3.3.2" - registry-url "3.1.0" - -upper-case-first@^1.1.0, upper-case-first@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" - integrity sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU= - dependencies: - upper-case "^1.1.1" - -upper-case-first@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.1.tgz#32ab436747d891cc20ab1e43d601cb4d0a7fbf4a" - integrity sha512-105J8XqQ+9RxW3l9gHZtgve5oaiR9TIwvmZAMAIZWRHe00T21cdvewKORTlOJf/zXW6VukuTshM+HXZNWz7N5w== - dependencies: - tslib "^1.10.0" - -upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - -upper-case@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.1.tgz#6214d05e235dc817822464ccbae85822b3d8665f" - integrity sha512-laAsbea9SY5osxrv7S99vH9xAaJKrw5Qpdh4ENRLcaxipjKsiaBwiAsxfa8X5mObKNTQPsupSq0J/VIxsSJe3A== - dependencies: - tslib "^1.10.0" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -urijs@^1.19.1: - version "1.19.2" - resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.2.tgz#f9be09f00c4c5134b7cb3cf475c1dd394526265a" - integrity sha512-s/UIq9ap4JPZ7H1EB5ULo/aOUbWqfDi7FKzMC2Nz+0Si8GiT1rIEaprt8hy3Vy2Ex2aJPpOQv4P4DuOZ+K1c6w== - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util-promisify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" - integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= - dependencies: - object.getownpropertydescriptors "^2.0.3" - -util.promisify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^3.0.1, uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -v8-compile-cache@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" - integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== - -v8-to-istanbul@^4.0.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.2.tgz#387d173be5383dbec209d21af033dcb892e3ac82" - integrity sha512-G9R+Hpw0ITAmPSr47lSlc5A1uekSYzXxTMlFxso2xoffwo4jQnzbv1p9yXIinO8UMZKfAFewaCHwWvnH4Jb4Ug== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= - dependencies: - builtins "^1.0.3" - -validator@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-8.2.0.tgz#3c1237290e37092355344fef78c231249dab77b9" - integrity sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vlq@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" - integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== - -w3c-hr-time@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" - integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== - dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" - xml-name-validator "^3.0.0" - -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -wcwidth@>=1.0.1, wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -webdriver@5.18.7: - version "5.18.7" - resolved "https://registry.yarnpkg.com/webdriver/-/webdriver-5.18.7.tgz#78fd17228bb2668800d26bc60bc92c1c1eb194b4" - integrity sha512-KmivyLYCuFyEruCNloDjIQl05i/fybTwp4HNdSnxjPi0K0TIhWZ35sg6tQTgEyRIEgmLOnlhoY1WciuWm5Lr8Q== - dependencies: - "@wdio/config" "5.18.4" - "@wdio/logger" "5.16.10" - "@wdio/protocols" "5.18.7" - "@wdio/utils" "5.18.6" - lodash.merge "^4.6.1" - request "^2.83.0" - -webdriverio@5.18.7: - version "5.18.7" - resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-5.18.7.tgz#ccfd39f511c32a975a84d2ba977d61c82869eadc" - integrity sha512-VZJ4e4oqoqud3Ytwf5TBtRQOeMkxFHnIke3Tt0/bcgLb6dFgQ29v38syZKbyHRlTO2RGKQ+/qvfdDYpAW2O0OQ== - dependencies: - "@wdio/config" "5.18.4" - "@wdio/logger" "5.16.10" - "@wdio/repl" "5.18.6" - "@wdio/utils" "5.18.6" - archiver "^3.0.0" - css-value "^0.0.1" - grapheme-splitter "^1.0.2" - lodash.clonedeep "^4.5.0" - lodash.isobject "^3.0.2" - lodash.isplainobject "^4.0.6" - lodash.zip "^4.2.0" - resq "^1.6.0" - rgb2hex "^0.1.0" - serialize-error "^5.0.0" - webdriver "5.18.7" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which-pm-runs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" - integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= - -which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -windows-release@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" - integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA== - dependencies: - execa "^1.0.0" - -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - -wrap-ansi@^5.0.0, wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-json-file@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" - integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - pify "^3.0.0" - sort-keys "^2.0.0" - write-file-atomic "^2.0.0" - -write-json-file@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" - integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.15" - make-dir "^2.1.0" - pify "^4.0.1" - sort-keys "^2.0.0" - write-file-atomic "^2.4.2" - -write-pkg@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" - integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== - dependencies: - sort-keys "^2.0.0" - write-json-file "^2.2.0" - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -ws@^7.0.0: - version "7.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.2.tgz#36df62f68f0d1a6ec66d3f880a02476f3a81f24f" - integrity sha512-2qj/tYkDPDSVf7JiHanwEBwkhxi7DchFewIsSnR33MQtG3O/BPAJjqs4g6XEuayuRqIExSQMHZlmyDLbuSrXYw== - -xhr-mock@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/xhr-mock/-/xhr-mock-2.5.1.tgz#c591498a8269cc1ce5fefac20d590357affd348b" - integrity sha512-UKOjItqjFgPUwQGPmRAzNBn8eTfIhcGjBVGvKYAWxUQPQsXNGD6KEckGTiHwyaAUp9C9igQlnN1Mp79KWCg7CQ== - dependencies: - global "^4.3.0" - url "^0.11.0" - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.7.2: - version "1.8.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.8.0.tgz#169fbcfa2081302dc9441d02b0b6fe667e4f74c9" - integrity sha512-6qI/tTx7OVtA4qNqD0OyutbM6Z9EKu4rxWm/2Y3FDEBQ4/2X2XAnyuRXMzAE2+1BPyqzksJZtrIwblOHg0IEzA== - dependencies: - "@babel/runtime" "^7.8.7" - -yargs-parser@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== - dependencies: - camelcase "^4.1.0" - -yargs-parser@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.0.tgz#cdd7a97490ec836195f59f3f4dbe5ea9e8f75f08" - integrity sha512-xLTUnCMc4JhxrPEPUYD5IBR1mWCK/aT6+RJ/K29JY2y1vD+FhtgKK0AXRWvI262q3QSffAQuTouFIKUuHX89wQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^16.1.0: - version "16.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1" - integrity sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^18.1.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.0.tgz#1b0ab1118ebd41f68bb30e729f4c83df36ae84c3" - integrity sha512-o/Jr6JBOv6Yx3pL+5naWSoIA2jJ+ZkMYQG/ie9qFbukBe4uzmBatlXFOiu/tNKRWEtyf+n5w7jc/O16ufqOTdQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@^13.2.2: - version "13.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" - integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.1" - -yargs@^14.2.0, yargs@^14.2.2: - version "14.2.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5" - integrity sha512-/4ld+4VV5RnrynMhPZJ/ZpOCGSCeghMykZ3BhdFBDa9Wy/RH6uEGNWDJog+aUlq+9OM1CFTgtYRW5Is1Po9NOA== - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.0" - -yargs@^15.0.0, yargs@^15.0.1: - version "15.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.0.tgz#403af6edc75b3ae04bf66c94202228ba119f0976" - integrity sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.0" - -yarn-install@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yarn-install/-/yarn-install-1.0.0.tgz#57f45050b82efd57182b3973c54aa05cb5d25230" - integrity sha1-V/RQULgu/VcYKzlzxUqgXLXSUjA= - dependencies: - cac "^3.0.3" - chalk "^1.1.3" - cross-spawn "^4.0.2" - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -z-schema@~3.18.3: - version "3.18.4" - resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-3.18.4.tgz#ea8132b279533ee60be2485a02f7e3e42541a9a2" - integrity sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw== - dependencies: - lodash.get "^4.0.0" - lodash.isequal "^4.0.0" - validator "^8.0.0" - optionalDependencies: - commander "^2.7.1" - -zip-stream@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.1.3.tgz#26cc4bdb93641a8590dd07112e1f77af1758865b" - integrity sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^2.1.1" - readable-stream "^3.4.0" +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10 + +"@algolia/client-abtesting@npm:5.23.3, @algolia/client-abtesting@workspace:packages/client-abtesting": + version: 0.0.0-use.local + resolution: "@algolia/client-abtesting@workspace:packages/client-abtesting" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@algolia/requester-browser-xhr": "npm:5.23.3" + "@algolia/requester-fetch": "npm:5.23.3" + "@algolia/requester-node-http": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + publint: "npm:0.3.10" + rollup: "npm:4.39.0" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + +"@algolia/client-analytics@npm:5.23.3, @algolia/client-analytics@workspace:packages/client-analytics": + version: 0.0.0-use.local + resolution: "@algolia/client-analytics@workspace:packages/client-analytics" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@algolia/requester-browser-xhr": "npm:5.23.3" + "@algolia/requester-fetch": "npm:5.23.3" + "@algolia/requester-node-http": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + publint: "npm:0.3.10" + rollup: "npm:4.39.0" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + +"@algolia/client-common@npm:5.23.3, @algolia/client-common@workspace:packages/client-common": + version: 0.0.0-use.local + resolution: "@algolia/client-common@workspace:packages/client-common" + dependencies: + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + jsdom: "npm:26.0.0" + publint: "npm:0.3.10" + ts-node: "npm:10.9.2" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + vitest: "npm:3.1.1" + languageName: unknown + linkType: soft + +"@algolia/client-composition@workspace:packages/client-composition": + version: 0.0.0-use.local + resolution: "@algolia/client-composition@workspace:packages/client-composition" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@algolia/requester-browser-xhr": "npm:5.23.3" + "@algolia/requester-fetch": "npm:5.23.3" + "@algolia/requester-node-http": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + publint: "npm:0.3.10" + rollup: "npm:4.39.0" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + +"@algolia/client-insights@npm:5.23.3, @algolia/client-insights@workspace:packages/client-insights": + version: 0.0.0-use.local + resolution: "@algolia/client-insights@workspace:packages/client-insights" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@algolia/requester-browser-xhr": "npm:5.23.3" + "@algolia/requester-fetch": "npm:5.23.3" + "@algolia/requester-node-http": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + publint: "npm:0.3.10" + rollup: "npm:4.39.0" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + +"@algolia/client-personalization@npm:5.23.3, @algolia/client-personalization@workspace:packages/client-personalization": + version: 0.0.0-use.local + resolution: "@algolia/client-personalization@workspace:packages/client-personalization" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@algolia/requester-browser-xhr": "npm:5.23.3" + "@algolia/requester-fetch": "npm:5.23.3" + "@algolia/requester-node-http": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + publint: "npm:0.3.10" + rollup: "npm:4.39.0" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + +"@algolia/client-query-suggestions@npm:5.23.3, @algolia/client-query-suggestions@workspace:packages/client-query-suggestions": + version: 0.0.0-use.local + resolution: "@algolia/client-query-suggestions@workspace:packages/client-query-suggestions" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@algolia/requester-browser-xhr": "npm:5.23.3" + "@algolia/requester-fetch": "npm:5.23.3" + "@algolia/requester-node-http": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + publint: "npm:0.3.10" + rollup: "npm:4.39.0" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + +"@algolia/client-search@npm:5.23.3, @algolia/client-search@workspace:packages/client-search": + version: 0.0.0-use.local + resolution: "@algolia/client-search@workspace:packages/client-search" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@algolia/requester-browser-xhr": "npm:5.23.3" + "@algolia/requester-fetch": "npm:5.23.3" + "@algolia/requester-node-http": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + publint: "npm:0.3.10" + rollup: "npm:4.39.0" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + +"@algolia/composition@workspace:packages/composition": + version: 0.0.0-use.local + resolution: "@algolia/composition@workspace:packages/composition" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@algolia/requester-browser-xhr": "npm:5.23.3" + "@algolia/requester-fetch": "npm:5.23.3" + "@algolia/requester-node-http": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + publint: "npm:0.3.10" + rollup: "npm:4.39.0" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + +"@algolia/ingestion@npm:1.23.3, @algolia/ingestion@workspace:packages/ingestion": + version: 0.0.0-use.local + resolution: "@algolia/ingestion@workspace:packages/ingestion" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@algolia/requester-browser-xhr": "npm:5.23.3" + "@algolia/requester-fetch": "npm:5.23.3" + "@algolia/requester-node-http": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + publint: "npm:0.3.10" + rollup: "npm:4.39.0" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + +"@algolia/logger-console@workspace:packages/logger-console": + version: 0.0.0-use.local + resolution: "@algolia/logger-console@workspace:packages/logger-console" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + jsdom: "npm:26.0.0" + publint: "npm:0.3.10" + ts-node: "npm:10.9.2" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + vitest: "npm:3.1.1" + languageName: unknown + linkType: soft + +"@algolia/monitoring@npm:1.23.3, @algolia/monitoring@workspace:packages/monitoring": + version: 0.0.0-use.local + resolution: "@algolia/monitoring@workspace:packages/monitoring" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@algolia/requester-browser-xhr": "npm:5.23.3" + "@algolia/requester-fetch": "npm:5.23.3" + "@algolia/requester-node-http": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + publint: "npm:0.3.10" + rollup: "npm:4.39.0" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + +"@algolia/recommend@npm:5.23.3, @algolia/recommend@workspace:packages/recommend": + version: 0.0.0-use.local + resolution: "@algolia/recommend@workspace:packages/recommend" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@algolia/requester-browser-xhr": "npm:5.23.3" + "@algolia/requester-fetch": "npm:5.23.3" + "@algolia/requester-node-http": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + publint: "npm:0.3.10" + rollup: "npm:4.39.0" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + +"@algolia/requester-browser-xhr@npm:5.23.3, @algolia/requester-browser-xhr@workspace:packages/requester-browser-xhr": + version: 0.0.0-use.local + resolution: "@algolia/requester-browser-xhr@workspace:packages/requester-browser-xhr" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + jsdom: "npm:26.0.0" + publint: "npm:0.3.10" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + vitest: "npm:3.1.1" + xhr-mock: "npm:2.5.1" + languageName: unknown + linkType: soft + +"@algolia/requester-fetch@npm:5.23.3, @algolia/requester-fetch@workspace:packages/requester-fetch": + version: 0.0.0-use.local + resolution: "@algolia/requester-fetch@workspace:packages/requester-fetch" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + cross-fetch: "npm:4.1.0" + nock: "npm:14.0.3" + publint: "npm:0.3.10" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + vitest: "npm:3.1.1" + languageName: unknown + linkType: soft + +"@algolia/requester-node-http@npm:5.23.3, @algolia/requester-node-http@workspace:packages/requester-node-http": + version: 0.0.0-use.local + resolution: "@algolia/requester-node-http@workspace:packages/requester-node-http" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + nock: "npm:14.0.3" + publint: "npm:0.3.10" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + vitest: "npm:3.1.1" + languageName: unknown + linkType: soft + +"@algolia/requester-testing@npm:5.23.3, @algolia/requester-testing@workspace:packages/requester-testing": + version: 0.0.0-use.local + resolution: "@algolia/requester-testing@workspace:packages/requester-testing" + dependencies: + "@algolia/client-common": "npm:5.23.3" + "@algolia/requester-browser-xhr": "npm:5.23.3" + "@algolia/requester-fetch": "npm:5.23.3" + "@algolia/requester-node-http": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@types/node": "npm:22.14.0" + publint: "npm:0.3.10" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + +"@andrewbranch/untar.js@npm:^1.0.3": + version: 1.0.3 + resolution: "@andrewbranch/untar.js@npm:1.0.3" + checksum: 10/a32de53839fc61af90a394cf93d4368aacd167c9c80f0b3ba0c268460942a6ce2bfe257b6d3f03986b9dcb7368f10b9dc7f66c2f94254d2662da8278454e7d12 + languageName: node + linkType: hard + +"@arethetypeswrong/cli@npm:0.17.4": + version: 0.17.4 + resolution: "@arethetypeswrong/cli@npm:0.17.4" + dependencies: + "@arethetypeswrong/core": "npm:0.17.4" + chalk: "npm:^4.1.2" + cli-table3: "npm:^0.6.3" + commander: "npm:^10.0.1" + marked: "npm:^9.1.2" + marked-terminal: "npm:^7.1.0" + semver: "npm:^7.5.4" + bin: + attw: dist/index.js + checksum: 10/5309b7f0a35d8d9118f0bc658448112bfcc76e36a5bf1f237acc492cab56446902b3bdbb2f7b37506521edc722ac2a3c4e16227c8e4eece7c837573122f6c4bb + languageName: node + linkType: hard + +"@arethetypeswrong/core@npm:0.17.4": + version: 0.17.4 + resolution: "@arethetypeswrong/core@npm:0.17.4" + dependencies: + "@andrewbranch/untar.js": "npm:^1.0.3" + "@loaderkit/resolve": "npm:^1.0.2" + cjs-module-lexer: "npm:^1.2.3" + fflate: "npm:^0.8.2" + lru-cache: "npm:^10.4.3" + semver: "npm:^7.5.4" + typescript: "npm:5.6.1-rc" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10/0aa5d8c21de977fdca3b79d25b07e9346b4b8f45ea95146c2b08961c8e0842326fb8879e9e1f001fadf132d9bede78a13df7974ca15cfb0a2e08000369b75c43 + languageName: node + linkType: hard + +"@asamuzakjp/css-color@npm:^3.1.1": + version: 3.1.1 + resolution: "@asamuzakjp/css-color@npm:3.1.1" + dependencies: + "@csstools/css-calc": "npm:^2.1.2" + "@csstools/css-color-parser": "npm:^3.0.8" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + lru-cache: "npm:^10.4.3" + checksum: 10/42dd131c3f6297259b353b6a226e782800babe64003e41f3598e3fe98543eecea2a5d9c1869ed1c853b639ed9e259c685c6b7c96d1e0b5c0d154f874a8a8c3d9 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10/db2c2122af79d31ca916755331bb4bac96feb2b334cdaca5097a6b467fdd41963b89b14b6836a14f083de7ff887fc78fa1b3c10b14e743d33e12dbfe5ee3d223 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10/3f9b649be0c2fd457fa1957b694b4e69532a668866b8a0d81eabfa34ba16dbf3107b39e0e7144c55c3c652bf773ec816af8df4a61273a2bb4eb3145ca9cf478e + languageName: node + linkType: hard + +"@braidai/lang@npm:^1.0.0": + version: 1.1.0 + resolution: "@braidai/lang@npm:1.1.0" + checksum: 10/e6fde83701da73aefadf2a7a5d1906348203ae6a913764f72895d0f98093da2a58ac4b9a71d0058c38869f9ce630e362168b8a6708da051a9b92f80ca7b0b686 + languageName: node + linkType: hard + +"@cloudflare/kv-asset-handler@npm:0.4.0": + version: 0.4.0 + resolution: "@cloudflare/kv-asset-handler@npm:0.4.0" + dependencies: + mime: "npm:^3.0.0" + checksum: 10/83e3c41ba2b2542c6f59cd2222bf8bc24b22b2f457fb8ed7115f69f2708c21bb411d2fd6837e0493368d694bdf40cde20ff077021550d207b9848eaad1805114 + languageName: node + linkType: hard + +"@cloudflare/unenv-preset@npm:2.3.1": + version: 2.3.1 + resolution: "@cloudflare/unenv-preset@npm:2.3.1" + peerDependencies: + unenv: 2.0.0-rc.15 + workerd: ^1.20250320.0 + peerDependenciesMeta: + workerd: + optional: true + checksum: 10/a1094f5e379acc70f5d1e2495671c5fc448a32c6c301a1a02fa41cc29b7eb9de023881ba895aaf1c1cd74bb538af7380bbc4da423e55e7f421042d78682f7709 + languageName: node + linkType: hard + +"@cloudflare/vitest-pool-workers@npm:0.8.11": + version: 0.8.11 + resolution: "@cloudflare/vitest-pool-workers@npm:0.8.11" + dependencies: + birpc: "npm:0.2.14" + cjs-module-lexer: "npm:^1.2.3" + devalue: "npm:^4.3.0" + esbuild: "npm:0.24.2" + miniflare: "npm:4.20250404.0" + semver: "npm:^7.7.1" + wrangler: "npm:4.7.2" + zod: "npm:^3.22.3" + peerDependencies: + "@vitest/runner": 2.0.x - 3.0.x + "@vitest/snapshot": 2.0.x - 3.0.x + vitest: 2.0.x - 3.0.x + checksum: 10/39dc7344f549657b67c8b1591c91d1d06f0cbb5bf1f52884c93bdf84615f60a7a471316031136a6f9b8d6f66fb86d95531cf9cb8048ac7e5ad5e1f7cb14846c1 + languageName: node + linkType: hard + +"@cloudflare/workerd-darwin-64@npm:1.20250404.0": + version: 1.20250404.0 + resolution: "@cloudflare/workerd-darwin-64@npm:1.20250404.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@cloudflare/workerd-darwin-arm64@npm:1.20250404.0": + version: 1.20250404.0 + resolution: "@cloudflare/workerd-darwin-arm64@npm:1.20250404.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@cloudflare/workerd-linux-64@npm:1.20250404.0": + version: 1.20250404.0 + resolution: "@cloudflare/workerd-linux-64@npm:1.20250404.0" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@cloudflare/workerd-linux-arm64@npm:1.20250404.0": + version: 1.20250404.0 + resolution: "@cloudflare/workerd-linux-arm64@npm:1.20250404.0" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@cloudflare/workerd-windows-64@npm:1.20250404.0": + version: 1.20250404.0 + resolution: "@cloudflare/workerd-windows-64@npm:1.20250404.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@cloudflare/workers-types@npm:4.20250407.0": + version: 4.20250407.0 + resolution: "@cloudflare/workers-types@npm:4.20250407.0" + checksum: 10/69bd877874b0068a5e6e6e2f71410751dd6bbc2dc25bcdd0b664d7859d613cc9b1f75481a072885bd137a0cc5c325df83b7330b40c03c5dc4bf4aa89b85dee94 + languageName: node + linkType: hard + +"@colors/colors@npm:1.5.0": + version: 1.5.0 + resolution: "@colors/colors@npm:1.5.0" + checksum: 10/9d226461c1e91e95f067be2bdc5e6f99cfe55a721f45afb44122e23e4b8602eeac4ff7325af6b5a369f36396ee1514d3809af3f57769066d80d83790d8e53339 + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:0.8.1, @cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": "npm:0.3.9" + checksum: 10/b6e38a1712fab242c86a241c229cf562195aad985d0564bd352ac404be583029e89e93028ffd2c251d2c407ecac5fb0cbdca94a2d5c10f29ac806ede0508b3ff + languageName: node + linkType: hard + +"@csstools/color-helpers@npm:^5.0.2": + version: 5.0.2 + resolution: "@csstools/color-helpers@npm:5.0.2" + checksum: 10/8763079c54578bd2215c68de0795edb9cfa29bffa29625bff89f3c47d9df420d86296ff3a6fa8c29ca037bbaa64dc10a963461233341de0516a3161a3b549e7b + languageName: node + linkType: hard + +"@csstools/css-calc@npm:^2.1.2": + version: 2.1.2 + resolution: "@csstools/css-calc@npm:2.1.2" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10/23ba633b15ba733f9da6d65e6a97a34116d10add7df15f6b05df93f00bb47b335a2268fcfd93c442da5d4678706f7bb26ffcc26a74621e34fe0d399bb27e53d3 + languageName: node + linkType: hard + +"@csstools/css-color-parser@npm:^3.0.8": + version: 3.0.8 + resolution: "@csstools/css-color-parser@npm:3.0.8" + dependencies: + "@csstools/color-helpers": "npm:^5.0.2" + "@csstools/css-calc": "npm:^2.1.2" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10/935d0d6b484ee3b38390c765c66b0bb6632ca4172f211ef87f259a193bdae7f818732e8ef214fcce06016d5cf8fa1d917c24e4ff42f7359f589a979acc7e4511 + languageName: node + linkType: hard + +"@csstools/css-parser-algorithms@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/css-parser-algorithms@npm:3.0.4" + peerDependencies: + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10/dfb6926218d9f8ba25d8b43ea46c03863c819481f8c55e4de4925780eaab9e6bcd6bead1d56b4ef82d09fcd9d69a7db2750fa9db08eece9470fd499dc76d0edb + languageName: node + linkType: hard + +"@csstools/css-tokenizer@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/css-tokenizer@npm:3.0.3" + checksum: 10/6baa3160e426e1f177b8f10d54ec7a4a596090f65a05f16d7e9e4da049962a404eabc5f885f4867093702c259cd4080ac92a438326e22dea015201b3e71f5bbb + languageName: node + linkType: hard + +"@emnapi/core@npm:^1.1.0": + version: 1.4.0 + resolution: "@emnapi/core@npm:1.4.0" + dependencies: + "@emnapi/wasi-threads": "npm:1.0.1" + tslib: "npm:^2.4.0" + checksum: 10/728eb47408c121286484047915f991ce1383bcf58fd46443202620f7c4f72294aafff85bf40621b9ee37b7a417497a92af5c8881b0cc6dc83a6375231cef2c33 + languageName: node + linkType: hard + +"@emnapi/runtime@npm:^1.1.0, @emnapi/runtime@npm:^1.2.0": + version: 1.4.0 + resolution: "@emnapi/runtime@npm:1.4.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/38098887d0cb7189f37a020c194725f0b6900f56df146e4002f83a82a0add20db745cf85e4d49c215fd5de1e57e360d1bceb9ca27c8bb3c8445ee77c315f8732 + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.0.1": + version: 1.0.1 + resolution: "@emnapi/wasi-threads@npm:1.0.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/949f8bdcb11153d530652516b11d4b11d8c6ed48a692b4a59cbaa4305327aed59a61f0d87c366085c20ad0b0336c3b50eaddbddeeb3e8c55e7e82b583b9d98fb + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/aix-ppc64@npm:0.24.2" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/aix-ppc64@npm:0.25.2" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-arm64@npm:0.24.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/android-arm64@npm:0.25.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-arm@npm:0.24.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/android-arm@npm:0.25.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-x64@npm:0.24.2" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/android-x64@npm:0.25.2" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/darwin-arm64@npm:0.24.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/darwin-arm64@npm:0.25.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/darwin-x64@npm:0.24.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/darwin-x64@npm:0.25.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/freebsd-arm64@npm:0.24.2" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/freebsd-arm64@npm:0.25.2" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/freebsd-x64@npm:0.24.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/freebsd-x64@npm:0.25.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-arm64@npm:0.24.2" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/linux-arm64@npm:0.25.2" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-arm@npm:0.24.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/linux-arm@npm:0.25.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-ia32@npm:0.24.2" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/linux-ia32@npm:0.25.2" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-loong64@npm:0.24.2" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/linux-loong64@npm:0.25.2" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-mips64el@npm:0.24.2" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/linux-mips64el@npm:0.25.2" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-ppc64@npm:0.24.2" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/linux-ppc64@npm:0.25.2" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-riscv64@npm:0.24.2" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/linux-riscv64@npm:0.25.2" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-s390x@npm:0.24.2" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/linux-s390x@npm:0.25.2" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-x64@npm:0.24.2" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/linux-x64@npm:0.25.2" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/netbsd-arm64@npm:0.24.2" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/netbsd-arm64@npm:0.25.2" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/netbsd-x64@npm:0.24.2" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/netbsd-x64@npm:0.25.2" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/openbsd-arm64@npm:0.24.2" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/openbsd-arm64@npm:0.25.2" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/openbsd-x64@npm:0.24.2" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/openbsd-x64@npm:0.25.2" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/sunos-x64@npm:0.24.2" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/sunos-x64@npm:0.25.2" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-arm64@npm:0.24.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/win32-arm64@npm:0.25.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-ia32@npm:0.24.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/win32-ia32@npm:0.25.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-x64@npm:0.24.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.25.2": + version: 0.25.2 + resolution: "@esbuild/win32-x64@npm:0.25.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^2.0.0": + version: 2.1.1 + resolution: "@fastify/busboy@npm:2.1.1" + checksum: 10/2bb8a7eca8289ed14c9eb15239bc1019797454624e769b39a0b90ed204d032403adc0f8ed0d2aef8a18c772205fa7808cf5a1b91f21c7bfc7b6032150b1062c5 + languageName: node + linkType: hard + +"@hutson/parse-repository-url@npm:^3.0.0": + version: 3.0.2 + resolution: "@hutson/parse-repository-url@npm:3.0.2" + checksum: 10/dae0656f2e77315a3027ab9ca438ed344bf78a5fda7b145f65a1fface20dfb17e94e1d31e146c8b76de4657c21020aabc72dc53b53941c9f5fe2c27416559283 + languageName: node + linkType: hard + +"@img/sharp-darwin-arm64@npm:0.33.5": + version: 0.33.5 + resolution: "@img/sharp-darwin-arm64@npm:0.33.5" + dependencies: + "@img/sharp-libvips-darwin-arm64": "npm:1.0.4" + dependenciesMeta: + "@img/sharp-libvips-darwin-arm64": + optional: true + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@img/sharp-darwin-x64@npm:0.33.5": + version: 0.33.5 + resolution: "@img/sharp-darwin-x64@npm:0.33.5" + dependencies: + "@img/sharp-libvips-darwin-x64": "npm:1.0.4" + dependenciesMeta: + "@img/sharp-libvips-darwin-x64": + optional: true + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@img/sharp-libvips-darwin-arm64@npm:1.0.4": + version: 1.0.4 + resolution: "@img/sharp-libvips-darwin-arm64@npm:1.0.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@img/sharp-libvips-darwin-x64@npm:1.0.4": + version: 1.0.4 + resolution: "@img/sharp-libvips-darwin-x64@npm:1.0.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@img/sharp-libvips-linux-arm64@npm:1.0.4": + version: 1.0.4 + resolution: "@img/sharp-libvips-linux-arm64@npm:1.0.4" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-libvips-linux-arm@npm:1.0.5": + version: 1.0.5 + resolution: "@img/sharp-libvips-linux-arm@npm:1.0.5" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-libvips-linux-s390x@npm:1.0.4": + version: 1.0.4 + resolution: "@img/sharp-libvips-linux-s390x@npm:1.0.4" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-libvips-linux-x64@npm:1.0.4": + version: 1.0.4 + resolution: "@img/sharp-libvips-linux-x64@npm:1.0.4" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-libvips-linuxmusl-arm64@npm:1.0.4": + version: 1.0.4 + resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.0.4" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@img/sharp-libvips-linuxmusl-x64@npm:1.0.4": + version: 1.0.4 + resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.0.4" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@img/sharp-linux-arm64@npm:0.33.5": + version: 0.33.5 + resolution: "@img/sharp-linux-arm64@npm:0.33.5" + dependencies: + "@img/sharp-libvips-linux-arm64": "npm:1.0.4" + dependenciesMeta: + "@img/sharp-libvips-linux-arm64": + optional: true + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-linux-arm@npm:0.33.5": + version: 0.33.5 + resolution: "@img/sharp-linux-arm@npm:0.33.5" + dependencies: + "@img/sharp-libvips-linux-arm": "npm:1.0.5" + dependenciesMeta: + "@img/sharp-libvips-linux-arm": + optional: true + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-linux-s390x@npm:0.33.5": + version: 0.33.5 + resolution: "@img/sharp-linux-s390x@npm:0.33.5" + dependencies: + "@img/sharp-libvips-linux-s390x": "npm:1.0.4" + dependenciesMeta: + "@img/sharp-libvips-linux-s390x": + optional: true + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-linux-x64@npm:0.33.5": + version: 0.33.5 + resolution: "@img/sharp-linux-x64@npm:0.33.5" + dependencies: + "@img/sharp-libvips-linux-x64": "npm:1.0.4" + dependenciesMeta: + "@img/sharp-libvips-linux-x64": + optional: true + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-linuxmusl-arm64@npm:0.33.5": + version: 0.33.5 + resolution: "@img/sharp-linuxmusl-arm64@npm:0.33.5" + dependencies: + "@img/sharp-libvips-linuxmusl-arm64": "npm:1.0.4" + dependenciesMeta: + "@img/sharp-libvips-linuxmusl-arm64": + optional: true + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@img/sharp-linuxmusl-x64@npm:0.33.5": + version: 0.33.5 + resolution: "@img/sharp-linuxmusl-x64@npm:0.33.5" + dependencies: + "@img/sharp-libvips-linuxmusl-x64": "npm:1.0.4" + dependenciesMeta: + "@img/sharp-libvips-linuxmusl-x64": + optional: true + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@img/sharp-wasm32@npm:0.33.5": + version: 0.33.5 + resolution: "@img/sharp-wasm32@npm:0.33.5" + dependencies: + "@emnapi/runtime": "npm:^1.2.0" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@img/sharp-win32-ia32@npm:0.33.5": + version: 0.33.5 + resolution: "@img/sharp-win32-ia32@npm:0.33.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@img/sharp-win32-x64@npm:0.33.5": + version: 0.33.5 + resolution: "@img/sharp-win32-x64@npm:0.33.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10/e9ed5fd27c3aec1095e3a16e0c0cf148d1fee55a38665c35f7b3f86a9b5d00d042ddaabc98e8a1cb7463b9378c15f22a94eb35e99469c201453eb8375191f243 + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10/4412e9e6713c89c1e66d80bb0bb5a2a93192f10477623a27d08f228ba0316bb880affabc5bfe7f838f58a34d26c2c190da726e576cdfc18c49a72e89adabdcf5 + languageName: node + linkType: hard + +"@isaacs/string-locale-compare@npm:^1.1.0": + version: 1.1.0 + resolution: "@isaacs/string-locale-compare@npm:1.1.0" + checksum: 10/85682b14602f32023e487f62bc4076fe13cd3e887df9cca36acc0d41ea99b403100d586acb9367331526f3ee737d802ecaa582f59020998d75991e62a7ef0db5 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": "npm:^0.27.8" + checksum: 10/910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10/9d3a56ab3612ab9b85d38b2a93b87f3324f11c5130859957f6500e4ac8ce35f299d5ccc3ecd1ae87597601ecf83cee29e9afd04c18777c24011073992ff946df + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10/97106439d750a409c22c8bff822d648f6a71f3aa9bc8e5129efdc36343cd3096ddc4eeb1c62d2fe48e9bdd4db37b05d4646a17114ecebd3bbcacfa2de51c3c1d + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10/832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10/4ed6123217569a1484419ac53f6ea0d9f3b57e5b57ab30d7c267bdb27792a27eb0e4b08e84a2680aa55cc2f2b411ffd6ec3db01c44fdc6dc43aca4b55f8374fd + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.0.3" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + checksum: 10/83deafb8e7a5ca98993c2c6eeaa93c270f6f647a4c0dc00deb38c9cf9b2d3b7bf15e8839540155247ef034a052c0ec4466f980bf0c9e2ab63b97d16c0cedd3ff + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.24": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10/dced32160a44b49d531b80a4a2159dceab6b3ddf0c8e95a0deae4b0e894b172defa63d5ac52a19c2068e1fe7d31ea4ba931fbeec103233ecb4208953967120fc + languageName: node + linkType: hard + +"@lerna/create@npm:8.2.1": + version: 8.2.1 + resolution: "@lerna/create@npm:8.2.1" + dependencies: + "@npmcli/arborist": "npm:7.5.4" + "@npmcli/package-json": "npm:5.2.0" + "@npmcli/run-script": "npm:8.1.0" + "@nx/devkit": "npm:>=17.1.2 < 21" + "@octokit/plugin-enterprise-rest": "npm:6.0.1" + "@octokit/rest": "npm:20.1.2" + aproba: "npm:2.0.0" + byte-size: "npm:8.1.1" + chalk: "npm:4.1.0" + clone-deep: "npm:4.0.1" + cmd-shim: "npm:6.0.3" + color-support: "npm:1.1.3" + columnify: "npm:1.6.0" + console-control-strings: "npm:^1.1.0" + conventional-changelog-core: "npm:5.0.1" + conventional-recommended-bump: "npm:7.0.1" + cosmiconfig: "npm:9.0.0" + dedent: "npm:1.5.3" + execa: "npm:5.0.0" + fs-extra: "npm:^11.2.0" + get-stream: "npm:6.0.0" + git-url-parse: "npm:14.0.0" + glob-parent: "npm:6.0.2" + globby: "npm:11.1.0" + graceful-fs: "npm:4.2.11" + has-unicode: "npm:2.0.1" + ini: "npm:^1.3.8" + init-package-json: "npm:6.0.3" + inquirer: "npm:^8.2.4" + is-ci: "npm:3.0.1" + is-stream: "npm:2.0.0" + js-yaml: "npm:4.1.0" + libnpmpublish: "npm:9.0.9" + load-json-file: "npm:6.2.0" + lodash: "npm:^4.17.21" + make-dir: "npm:4.0.0" + minimatch: "npm:3.0.5" + multimatch: "npm:5.0.0" + node-fetch: "npm:2.6.7" + npm-package-arg: "npm:11.0.2" + npm-packlist: "npm:8.0.2" + npm-registry-fetch: "npm:^17.1.0" + nx: "npm:>=17.1.2 < 21" + p-map: "npm:4.0.0" + p-map-series: "npm:2.1.0" + p-queue: "npm:6.6.2" + p-reduce: "npm:^2.1.0" + pacote: "npm:^18.0.6" + pify: "npm:5.0.0" + read-cmd-shim: "npm:4.0.0" + resolve-from: "npm:5.0.0" + rimraf: "npm:^4.4.1" + semver: "npm:^7.3.4" + set-blocking: "npm:^2.0.0" + signal-exit: "npm:3.0.7" + slash: "npm:^3.0.0" + ssri: "npm:^10.0.6" + string-width: "npm:^4.2.3" + strong-log-transformer: "npm:2.1.0" + tar: "npm:6.2.1" + temp-dir: "npm:1.0.0" + upath: "npm:2.0.1" + uuid: "npm:^10.0.0" + validate-npm-package-license: "npm:^3.0.4" + validate-npm-package-name: "npm:5.0.1" + wide-align: "npm:1.1.5" + write-file-atomic: "npm:5.0.1" + write-pkg: "npm:4.0.0" + yargs: "npm:17.7.2" + yargs-parser: "npm:21.1.1" + checksum: 10/802db88edad8967afcbf499f68491139965209137ec92f402ac838452079f143701d6f9abd9832b3506a7e1c56e01ea9c09ffd6f8782b1d9202413756fcfd708 + languageName: node + linkType: hard + +"@loaderkit/resolve@npm:^1.0.2": + version: 1.0.4 + resolution: "@loaderkit/resolve@npm:1.0.4" + dependencies: + "@braidai/lang": "npm:^1.0.0" + checksum: 10/e999f0fc289c2e3f9f80ec92db69c123a5a74b5db7c4bc10292658fc9ef2e1afe6430346ca6cd52d941d7fc407bf28188c95bbbe0aa212c02c8716b5c4b03316 + languageName: node + linkType: hard + +"@mswjs/interceptors@npm:^0.38.1": + version: 0.38.1 + resolution: "@mswjs/interceptors@npm:0.38.1" + dependencies: + "@open-draft/deferred-promise": "npm:^2.2.0" + "@open-draft/logger": "npm:^0.3.0" + "@open-draft/until": "npm:^2.0.0" + is-node-process: "npm:^1.2.0" + jsdom: "npm:^26.0.0" + outvariant: "npm:^1.4.3" + strict-event-emitter: "npm:^0.5.1" + checksum: 10/8bffe0b98c97d564d60049e7f541d5920a05ebac4982d79b5a0361fce2260a41fe39a230d97abb8bc9500504e17f9e3ef40403856d791b8ba50ca6af1ea3d48f + languageName: node + linkType: hard + +"@napi-rs/wasm-runtime@npm:0.2.4": + version: 0.2.4 + resolution: "@napi-rs/wasm-runtime@npm:0.2.4" + dependencies: + "@emnapi/core": "npm:^1.1.0" + "@emnapi/runtime": "npm:^1.1.0" + "@tybys/wasm-util": "npm:^0.9.0" + checksum: 10/af335867eca9696b0dbb1b8439878e0408a853c42419cd71d2c5dcf9f7c9f6a8549ea88b3a31b9544bb3a9376e5742f3268e58ee066925d3726bd76a121eb8a6 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10/6ab2a9b8a1d67b067922c36f259e3b3dfd6b97b219c540877a4944549a4d49ea5ceba5663905ab5289682f1f3c15ff441d02f0447f620a42e1cb5e1937174d4b + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10/012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10/40033e33e96e97d77fba5a238e4bba4487b8284678906a9f616b5579ddaf868a18874c0054a75402c9fbaaa033a25ceae093af58c9c30278e35c23c9479e79b0 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10/96fc0036b101bae5032dc2a4cd832efb815ce9b33f9ee2f29909ee49d96a0026b3565f73c507a69eb8603f5cb32e0ae45a70cab1e2655990a4e06ae99f7f572a + languageName: node + linkType: hard + +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10/775c9a7eb1f88c195dfb3bce70c31d0fe2a12b28b754e25c08a3edb4bc4816bfedb7ac64ef1e730579d078ca19dacf11630e99f8f3c3e0fd7b23caa5fd6d30a6 + languageName: node + linkType: hard + +"@npmcli/arborist@npm:7.5.4": + version: 7.5.4 + resolution: "@npmcli/arborist@npm:7.5.4" + dependencies: + "@isaacs/string-locale-compare": "npm:^1.1.0" + "@npmcli/fs": "npm:^3.1.1" + "@npmcli/installed-package-contents": "npm:^2.1.0" + "@npmcli/map-workspaces": "npm:^3.0.2" + "@npmcli/metavuln-calculator": "npm:^7.1.1" + "@npmcli/name-from-folder": "npm:^2.0.0" + "@npmcli/node-gyp": "npm:^3.0.0" + "@npmcli/package-json": "npm:^5.1.0" + "@npmcli/query": "npm:^3.1.0" + "@npmcli/redact": "npm:^2.0.0" + "@npmcli/run-script": "npm:^8.1.0" + bin-links: "npm:^4.0.4" + cacache: "npm:^18.0.3" + common-ancestor-path: "npm:^1.0.1" + hosted-git-info: "npm:^7.0.2" + json-parse-even-better-errors: "npm:^3.0.2" + json-stringify-nice: "npm:^1.1.4" + lru-cache: "npm:^10.2.2" + minimatch: "npm:^9.0.4" + nopt: "npm:^7.2.1" + npm-install-checks: "npm:^6.2.0" + npm-package-arg: "npm:^11.0.2" + npm-pick-manifest: "npm:^9.0.1" + npm-registry-fetch: "npm:^17.0.1" + pacote: "npm:^18.0.6" + parse-conflict-json: "npm:^3.0.0" + proc-log: "npm:^4.2.0" + proggy: "npm:^2.0.0" + promise-all-reject-late: "npm:^1.0.0" + promise-call-limit: "npm:^3.0.1" + read-package-json-fast: "npm:^3.0.2" + semver: "npm:^7.3.7" + ssri: "npm:^10.0.6" + treeverse: "npm:^3.0.0" + walk-up-path: "npm:^3.0.1" + bin: + arborist: bin/index.js + checksum: 10/b77170754f419171e5ca2abfb679a9c811443e2b67036916a62eda81fd069f12c98186941cd73a0d36c2ec76cda638b43ceeb4c5fae39de1bb9df825432f3ef7 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0, @npmcli/fs@npm:^3.1.1": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: "npm:^7.3.5" + checksum: 10/1e0e04087049b24b38bc0b30d87a9388ee3ca1d3fdfc347c2f77d84fcfe6a51f250bc57ba2c1f614d7e4285c6c62bf8c769bc19aa0949ea39e5b043ee023b0bd + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10/405c4490e1ff11cf299775449a3c254a366a4b1ffc79d87159b0ee7d5558ac9f6a2f8c0735fd6ff3873cef014cb1a44a5f9127cb6a1b2dbc408718cca9365b5a + languageName: node + linkType: hard + +"@npmcli/git@npm:^5.0.0": + version: 5.0.8 + resolution: "@npmcli/git@npm:5.0.8" + dependencies: + "@npmcli/promise-spawn": "npm:^7.0.0" + ini: "npm:^4.1.3" + lru-cache: "npm:^10.0.1" + npm-pick-manifest: "npm:^9.0.0" + proc-log: "npm:^4.0.0" + promise-inflight: "npm:^1.0.1" + promise-retry: "npm:^2.0.1" + semver: "npm:^7.3.5" + which: "npm:^4.0.0" + checksum: 10/e6f94175fb9dde13d84849b29b32ffb4c4df968822cc85df2aebfca13bf8ca76f33b1d281911f5bcddc95bccba2f9e795669c736a38de4d9c76efb5047ffb4fb + languageName: node + linkType: hard + +"@npmcli/installed-package-contents@npm:^2.0.1, @npmcli/installed-package-contents@npm:^2.1.0": + version: 2.1.0 + resolution: "@npmcli/installed-package-contents@npm:2.1.0" + dependencies: + npm-bundled: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + bin: + installed-package-contents: bin/index.js + checksum: 10/68ab3ea2994f5ea21c61940de94ec4f2755fe569ef0b86e22db0695d651a3c88915c5eab61d634cfa203b9c801ee307c8aa134c2c4bd2e4fe1aa8d295ce8a163 + languageName: node + linkType: hard + +"@npmcli/map-workspaces@npm:^3.0.2": + version: 3.0.6 + resolution: "@npmcli/map-workspaces@npm:3.0.6" + dependencies: + "@npmcli/name-from-folder": "npm:^2.0.0" + glob: "npm:^10.2.2" + minimatch: "npm:^9.0.0" + read-package-json-fast: "npm:^3.0.0" + checksum: 10/b364b155991a4ff85db5ea5b9f809ab65936350fc36fe1e51d5ab8cd479bba57e69f02e17215c0e2126e383074c2987c268d8e589aacd26c9962e028f4da98f2 + languageName: node + linkType: hard + +"@npmcli/metavuln-calculator@npm:^7.1.1": + version: 7.1.1 + resolution: "@npmcli/metavuln-calculator@npm:7.1.1" + dependencies: + cacache: "npm:^18.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + pacote: "npm:^18.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + checksum: 10/57163b4bde4af3f5badb0c9b0c868f9539e2a112ee73c606680b7548b148bf58e793952d74eb1e581c9cc2e630bc03bc60adc04b3f1e7960482f97af817f28d2 + languageName: node + linkType: hard + +"@npmcli/name-from-folder@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/name-from-folder@npm:2.0.0" + checksum: 10/75beb40373f916cfcf7327958b3ab920ab4e32d24217197927dd1c76a325c7645695011fce9cb2a8f93616f8b74946e84eebe3830303e11ed9d400dae623a99b + languageName: node + linkType: hard + +"@npmcli/node-gyp@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/node-gyp@npm:3.0.0" + checksum: 10/dd9fed3e80df8fbb20443f28651a8ed7235f2c15286ecc010e2d3cd392c85912e59ef29218c0b02f098defb4cbc8cdf045aab1d32d5cef6ace289913196ed5df + languageName: node + linkType: hard + +"@npmcli/package-json@npm:5.2.0": + version: 5.2.0 + resolution: "@npmcli/package-json@npm:5.2.0" + dependencies: + "@npmcli/git": "npm:^5.0.0" + glob: "npm:^10.2.2" + hosted-git-info: "npm:^7.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + normalize-package-data: "npm:^6.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.5.3" + checksum: 10/c3d2218877bfc005bca3b7a11f53825bf16a68811b8e8ed0c9b219cceb8e8e646d70efab8c5d6decbd8007f286076468b3f456dab4d41d648aff73a5f3a6fce2 + languageName: node + linkType: hard + +"@npmcli/package-json@npm:^5.0.0, @npmcli/package-json@npm:^5.1.0": + version: 5.2.1 + resolution: "@npmcli/package-json@npm:5.2.1" + dependencies: + "@npmcli/git": "npm:^5.0.0" + glob: "npm:^10.2.2" + hosted-git-info: "npm:^7.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + normalize-package-data: "npm:^6.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.5.3" + checksum: 10/304a819b93f79a6e0e56cb371961a66d2db72142e310d545ecbbbe4d917025a30601aa8e63a5f0cc28f0fe281c116bdaf79b334619b105a1d027a2b769ecd137 + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^7.0.0": + version: 7.0.2 + resolution: "@npmcli/promise-spawn@npm:7.0.2" + dependencies: + which: "npm:^4.0.0" + checksum: 10/94cbbbeeb20342026c3b68fc8eb09e1600b7645d4e509f2588ef5ea7cff977eb01e628cc8e014595d04a6af4b4bc5c467c950a8135920f39f7c7b57fba43f4e9 + languageName: node + linkType: hard + +"@npmcli/query@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/query@npm:3.1.0" + dependencies: + postcss-selector-parser: "npm:^6.0.10" + checksum: 10/fa79ae317934c95d14b89cb149cb8eb0b2a4e611acf0661681cfa964bf9af6740f60efe095c8bb7e880398e0955666408cc8a3ffede90e87922cb81cce1efcdb + languageName: node + linkType: hard + +"@npmcli/redact@npm:^2.0.0": + version: 2.0.1 + resolution: "@npmcli/redact@npm:2.0.1" + checksum: 10/f19a521fa71b539707eee69106ed3d97e3047712d4f279c80007a8d0aef63d137e3062941f11e19d6cec03812eaa0872891ae20c84f603d9e021dfb93cc9d6e5 + languageName: node + linkType: hard + +"@npmcli/run-script@npm:8.1.0, @npmcli/run-script@npm:^8.0.0, @npmcli/run-script@npm:^8.1.0": + version: 8.1.0 + resolution: "@npmcli/run-script@npm:8.1.0" + dependencies: + "@npmcli/node-gyp": "npm:^3.0.0" + "@npmcli/package-json": "npm:^5.0.0" + "@npmcli/promise-spawn": "npm:^7.0.0" + node-gyp: "npm:^10.0.0" + proc-log: "npm:^4.0.0" + which: "npm:^4.0.0" + checksum: 10/256bd580f82b98db93e54065bf9bcc94946be4f2d668a062cf756cb8ea091f58ef7154b3d2450d79738081a150f25cc48f6075351911e672f24ffd34350f02f2 + languageName: node + linkType: hard + +"@nx/devkit@npm:>=17.1.2 < 21": + version: 20.7.1 + resolution: "@nx/devkit@npm:20.7.1" + dependencies: + ejs: "npm:^3.1.7" + enquirer: "npm:~2.3.6" + ignore: "npm:^5.0.4" + minimatch: "npm:9.0.3" + semver: "npm:^7.5.3" + tmp: "npm:~0.2.1" + tslib: "npm:^2.3.0" + yargs-parser: "npm:21.1.1" + peerDependencies: + nx: ">= 19 <= 21" + checksum: 10/10e0c210c6f9ef5a7fe2eb84e49cbc534f8f72c49fe3f4c94d52b3be3cd5a04f707690f9ec39f5434562e7a990dbb62985cbece19a3bcfceb7a20c9345526001 + languageName: node + linkType: hard + +"@nx/nx-darwin-arm64@npm:20.7.1": + version: 20.7.1 + resolution: "@nx/nx-darwin-arm64@npm:20.7.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@nx/nx-darwin-x64@npm:20.7.1": + version: 20.7.1 + resolution: "@nx/nx-darwin-x64@npm:20.7.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-freebsd-x64@npm:20.7.1": + version: 20.7.1 + resolution: "@nx/nx-freebsd-x64@npm:20.7.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@nx/nx-linux-arm-gnueabihf@npm:20.7.1": + version: 20.7.1 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:20.7.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@nx/nx-linux-arm64-gnu@npm:20.7.1": + version: 20.7.1 + resolution: "@nx/nx-linux-arm64-gnu@npm:20.7.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@nx/nx-linux-arm64-musl@npm:20.7.1": + version: 20.7.1 + resolution: "@nx/nx-linux-arm64-musl@npm:20.7.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@nx/nx-linux-x64-gnu@npm:20.7.1": + version: 20.7.1 + resolution: "@nx/nx-linux-x64-gnu@npm:20.7.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@nx/nx-linux-x64-musl@npm:20.7.1": + version: 20.7.1 + resolution: "@nx/nx-linux-x64-musl@npm:20.7.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@nx/nx-win32-arm64-msvc@npm:20.7.1": + version: 20.7.1 + resolution: "@nx/nx-win32-arm64-msvc@npm:20.7.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@nx/nx-win32-x64-msvc@npm:20.7.1": + version: 20.7.1 + resolution: "@nx/nx-win32-x64-msvc@npm:20.7.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@octokit/auth-token@npm:^4.0.0": + version: 4.0.0 + resolution: "@octokit/auth-token@npm:4.0.0" + checksum: 10/60e42701e341d700f73c518c7a35675d36d79fa9d5e838cc3ade96d147e49f5ba74db2e07b2337c2b95aaa540aa42088116df2122daa25633f9e70a2c8785c44 + languageName: node + linkType: hard + +"@octokit/core@npm:^5.0.2": + version: 5.2.1 + resolution: "@octokit/core@npm:5.2.1" + dependencies: + "@octokit/auth-token": "npm:^4.0.0" + "@octokit/graphql": "npm:^7.1.0" + "@octokit/request": "npm:^8.4.1" + "@octokit/request-error": "npm:^5.1.1" + "@octokit/types": "npm:^13.0.0" + before-after-hook: "npm:^2.2.0" + universal-user-agent: "npm:^6.0.0" + checksum: 10/9d95da740f350811dc5aadbf6670f3ddb8735f7c80029add497311ca0b13c4919fea473110e3fd9e85929e51ee64797fad8732e2f31703d55d80bdab1fdc846b + languageName: node + linkType: hard + +"@octokit/endpoint@npm:^9.0.6": + version: 9.0.6 + resolution: "@octokit/endpoint@npm:9.0.6" + dependencies: + "@octokit/types": "npm:^13.1.0" + universal-user-agent: "npm:^6.0.0" + checksum: 10/2bf776423365ee926bf3f722a664e52f1070758eff4a176279fb132103fd0c76e3541f83ace49bbad9a64f9c9b8de453be565ca8d6136989e9514dea65380ecf + languageName: node + linkType: hard + +"@octokit/graphql@npm:^7.1.0": + version: 7.1.1 + resolution: "@octokit/graphql@npm:7.1.1" + dependencies: + "@octokit/request": "npm:^8.4.1" + "@octokit/types": "npm:^13.0.0" + universal-user-agent: "npm:^6.0.0" + checksum: 10/9a7a65fa84df795b0acb5315dae5a4a5a042a01dde0c88974df180a1c02b9b8e61cae013be32461b11ee1d507a8f778f3b7f37dfa3b371771332cb8efcd01f29 + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^24.2.0": + version: 24.2.0 + resolution: "@octokit/openapi-types@npm:24.2.0" + checksum: 10/000897ebc6e247c2591049d6081e95eb5636f73798dadd695ee6048496772b58065df88823e74a760201828545a7ac601dd3c1bcd2e00079a62a9ee9d389409c + languageName: node + linkType: hard + +"@octokit/plugin-enterprise-rest@npm:6.0.1": + version: 6.0.1 + resolution: "@octokit/plugin-enterprise-rest@npm:6.0.1" + checksum: 10/2ea8aca141a0329479cfaf9425f7bc226fe6aa0064fd6e7798b565aa962a5a757a89a03e78b956909e767aa86cd28e1346bf82908dfdf614af921d175a6a95e1 + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:11.4.4-cjs.2": + version: 11.4.4-cjs.2 + resolution: "@octokit/plugin-paginate-rest@npm:11.4.4-cjs.2" + dependencies: + "@octokit/types": "npm:^13.7.0" + peerDependencies: + "@octokit/core": 5 + checksum: 10/e0f696b3b69febe4e7c736d909065871f38bb8346a07f19a9c83246a02972568ac672667db472f846baef20a9611adf26ce8f0f189a11004c4b6618765078e19 + languageName: node + linkType: hard + +"@octokit/plugin-request-log@npm:^4.0.0": + version: 4.0.1 + resolution: "@octokit/plugin-request-log@npm:4.0.1" + peerDependencies: + "@octokit/core": 5 + checksum: 10/fd8c0a201490cba00084689a0d1d54fc7b5ab5b6bdb7e447056b947b1754f78526e9685400eab10d3522bfa7b5bc49c555f41ec412c788610b96500b168f3789 + languageName: node + linkType: hard + +"@octokit/plugin-rest-endpoint-methods@npm:13.3.2-cjs.1": + version: 13.3.2-cjs.1 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:13.3.2-cjs.1" + dependencies: + "@octokit/types": "npm:^13.8.0" + peerDependencies: + "@octokit/core": ^5 + checksum: 10/479827e62466e55bc1a50129d51597807bddc6c909e56be9e8dd9c1a91efa0f466a2f56b7d80438649e21ab0a3a195f840b3fccf2ae7f11fb0a919db8e62bc62 + languageName: node + linkType: hard + +"@octokit/request-error@npm:^5.1.1": + version: 5.1.1 + resolution: "@octokit/request-error@npm:5.1.1" + dependencies: + "@octokit/types": "npm:^13.1.0" + deprecation: "npm:^2.0.0" + once: "npm:^1.4.0" + checksum: 10/6ad98626407ba57bb33fa197611be74bee1dd9abc8d5d845648d6a2a04aa6840c0eb7f4be341d55dfcab5bc19181ad5fd25194869a7aaac6245f74b3a14d9662 + languageName: node + linkType: hard + +"@octokit/request@npm:^8.4.1": + version: 8.4.1 + resolution: "@octokit/request@npm:8.4.1" + dependencies: + "@octokit/endpoint": "npm:^9.0.6" + "@octokit/request-error": "npm:^5.1.1" + "@octokit/types": "npm:^13.1.0" + universal-user-agent: "npm:^6.0.0" + checksum: 10/2b2c9131cc9b608baeeef8ce2943768cc9db5fbe36a665f734a099bd921561c760e4391fbdf39d5aefb725db26742db1488c65624940ef7cec522e10863caa5e + languageName: node + linkType: hard + +"@octokit/rest@npm:20.1.2": + version: 20.1.2 + resolution: "@octokit/rest@npm:20.1.2" + dependencies: + "@octokit/core": "npm:^5.0.2" + "@octokit/plugin-paginate-rest": "npm:11.4.4-cjs.2" + "@octokit/plugin-request-log": "npm:^4.0.0" + "@octokit/plugin-rest-endpoint-methods": "npm:13.3.2-cjs.1" + checksum: 10/e0759fdbf18bc96f68299b4ca04d7102ce861e8508f01e9e580ed9c1e19d4cc20d150635161e360375f1c52c95e54bf6b56aaae16f943a93d6dcb38a51d8a23e + languageName: node + linkType: hard + +"@octokit/types@npm:^13.0.0, @octokit/types@npm:^13.1.0, @octokit/types@npm:^13.7.0, @octokit/types@npm:^13.8.0": + version: 13.10.0 + resolution: "@octokit/types@npm:13.10.0" + dependencies: + "@octokit/openapi-types": "npm:^24.2.0" + checksum: 10/32f8f5010d7faae128b0cdd0c221f0ca8c3781fe44483ecd87162b3da507db667f7369acda81340f6e2c9c374d9a938803409c6085c2c01d98210b6c58efb99a + languageName: node + linkType: hard + +"@open-draft/deferred-promise@npm:^2.2.0": + version: 2.2.0 + resolution: "@open-draft/deferred-promise@npm:2.2.0" + checksum: 10/bc3bb1668a555bb87b33383cafcf207d9561e17d2ca0d9e61b7ce88e82b66e36a333d3676c1d39eb5848022c03c8145331fcdc828ba297f88cb1de9c5cef6c19 + languageName: node + linkType: hard + +"@open-draft/logger@npm:^0.3.0": + version: 0.3.0 + resolution: "@open-draft/logger@npm:0.3.0" + dependencies: + is-node-process: "npm:^1.2.0" + outvariant: "npm:^1.4.0" + checksum: 10/7a280f170bcd4e91d3eedbefe628efd10c3bd06dd2461d06a7fdbced89ef457a38785847f88cc630fb4fd7dfa176d6f77aed17e5a9b08000baff647433b5ff78 + languageName: node + linkType: hard + +"@open-draft/until@npm:^2.0.0": + version: 2.1.0 + resolution: "@open-draft/until@npm:2.1.0" + checksum: 10/622be42950afc8e89715d0fd6d56cbdcd13e36625e23b174bd3d9f06f80e25f9adf75d6698af93bca1e1bf465b9ce00ec05214a12189b671fb9da0f58215b6f4 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10/115e8ceeec6bc69dff2048b35c0ab4f8bbee12d8bb6c1f4af758604586d802b6e669dcb02dda61d078de42c2b4ddce41b3d9e726d7daa6b4b850f4adbf7333ff + languageName: node + linkType: hard + +"@publint/pack@npm:^0.1.2": + version: 0.1.2 + resolution: "@publint/pack@npm:0.1.2" + checksum: 10/83e1de31ae29a0e651f7f91ebe6ad1fdf8cbb61d1eb056476586a234d05fa6fde9f34d3a0e36fbf18a2e9affa1082f758833242fd285637d303130f1a286b928 + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.39.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-android-arm64@npm:4.39.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.39.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.39.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.39.0" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-freebsd-x64@npm:4.39.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.39.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.39.0" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.39.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.39.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loongarch64-gnu@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.39.0" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.39.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.39.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.39.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.39.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.39.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.39.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.39.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.39.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.39.0": + version: 4.39.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.39.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@sec-ant/readable-stream@npm:^0.4.1": + version: 0.4.1 + resolution: "@sec-ant/readable-stream@npm:0.4.1" + checksum: 10/aac89581652ac85debe7c5303451c2ebf8bf25ca25db680e4b9b73168f6940616d9a4bbe3348981827b1159b14e2f2e6af4b7bd5735cac898c12d5c51909c102 + languageName: node + linkType: hard + +"@sigstore/bundle@npm:^2.3.2": + version: 2.3.2 + resolution: "@sigstore/bundle@npm:2.3.2" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.3.2" + checksum: 10/16c2dd624612171acf40c0daf6ca8f43332abfab3ea522e6fcff70df70207061f8a9faa43e10f8b5d0006ff1edebe5179101f4ba566ff6d271099158d3ae9503 + languageName: node + linkType: hard + +"@sigstore/core@npm:^1.0.0, @sigstore/core@npm:^1.1.0": + version: 1.1.0 + resolution: "@sigstore/core@npm:1.1.0" + checksum: 10/4149572091d61c246dd2ff636ff9a31441877db78cc3afe25fd0b28ece87f0094576f8b9077d1dc7c1c959ac4b000d407595becb6cd784c3664e9dd7cb6da36a + languageName: node + linkType: hard + +"@sigstore/protobuf-specs@npm:^0.3.2": + version: 0.3.3 + resolution: "@sigstore/protobuf-specs@npm:0.3.3" + checksum: 10/8de4a6f2fc5034b35e9d6e570fdb4dfa21d10cf544e68597276eba4991636a8fb0a399e2aba0ad68f86a3589e7ec8a28395e7e6bc08085237f81dec5640a310a + languageName: node + linkType: hard + +"@sigstore/sign@npm:^2.3.2": + version: 2.3.2 + resolution: "@sigstore/sign@npm:2.3.2" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.0.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + make-fetch-happen: "npm:^13.0.1" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + checksum: 10/3b0198fb8f8c6fe1c7fd34e9be25484d4472cd93ec3709c68f4cf45a07a0a90ebceb2193e77dfe780bb0a3effa31152a7f9d01497010bde9d9ab4e85873e2843 + languageName: node + linkType: hard + +"@sigstore/tuf@npm:^2.3.4": + version: 2.3.4 + resolution: "@sigstore/tuf@npm:2.3.4" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.3.2" + tuf-js: "npm:^2.2.1" + checksum: 10/4ef978a0b29e1bdf4a8ac48580ff68bc7a3f10db7b301d033f212cc42b1ee58bf555ac77f67b21b44e8315de38640f23f24c7022fe46f66c236e0c0293d23b00 + languageName: node + linkType: hard + +"@sigstore/verify@npm:^1.2.1": + version: 1.2.1 + resolution: "@sigstore/verify@npm:1.2.1" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.1.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + checksum: 10/68a1bb341e93a86f738b4e55be8812034df398bdae1746b5f8c7e49d35c6a223ff634fa70b55152de5db992e8356cfaeae5779d6d805ecf4dd18caf167de8b95 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 10/297f95ff77c82c54de8c9907f186076e715ff2621c5222ba50b8d40a170661c0c5242c763cba2a4791f0f91cb1d8ffa53ea1d7294570cf8cd4694c0e383e484d + languageName: node + linkType: hard + +"@sindresorhus/is@npm:^4.6.0": + version: 4.6.0 + resolution: "@sindresorhus/is@npm:4.6.0" + checksum: 10/e7f36ed72abfcd5e0355f7423a72918b9748bb1ef370a59f3e5ad8d40b728b85d63b272f65f63eec1faf417cda89dcb0aeebe94015647b6054659c1442fe5ce0 + languageName: node + linkType: hard + +"@sindresorhus/merge-streams@npm:^4.0.0": + version: 4.0.0 + resolution: "@sindresorhus/merge-streams@npm:4.0.0" + checksum: 10/16551c787f5328c8ef05fd9831ade64369ccc992df78deb635ec6c44af217d2f1b43f8728c348cdc4e00585ff2fad6e00d8155199cbf6b154acc45fe65cbf0aa + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 10/51fe47d55fe1b80ec35e6e5ed30a13665fd3a531945350aa74a14a1e82875fb60b350c2f2a5e72a64831b1b6bc02acb6760c30b3738b54954ec2dea82db7a267 + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 10/5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 10/19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 10/202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + languageName: node + linkType: hard + +"@tufjs/canonical-json@npm:2.0.0": + version: 2.0.0 + resolution: "@tufjs/canonical-json@npm:2.0.0" + checksum: 10/cc719a1d0d0ae1aa1ba551a82c87dcbefac088e433c03a3d8a1d547ea721350e47dab4ab5b0fca40d5c7ab1f4882e72edc39c9eae15bf47c45c43bcb6ee39f4f + languageName: node + linkType: hard + +"@tufjs/models@npm:2.0.1": + version: 2.0.1 + resolution: "@tufjs/models@npm:2.0.1" + dependencies: + "@tufjs/canonical-json": "npm:2.0.0" + minimatch: "npm:^9.0.4" + checksum: 10/7c5d2b8194195cecddc92ae37523c1375e7aaf2e554941c0f9b71db93bbef4f0af8190438dd321e8f9dfd4ce2a9b582e35a4c4c04bec87e25a289c9c8bedcd4e + languageName: node + linkType: hard + +"@tybys/wasm-util@npm:^0.9.0": + version: 0.9.0 + resolution: "@tybys/wasm-util@npm:0.9.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/aa58e64753a420ad1eefaf7bacef3dda61d74f9336925943d9244132d5b48d9242f734f1e707fd5ccfa6dd1d8ec8e6debc234b4dedb3a5b0d8486d1f373350b2 + languageName: node + linkType: hard + +"@types/estree@npm:1.0.7, @types/estree@npm:^1.0.0": + version: 1.0.7 + resolution: "@types/estree@npm:1.0.7" + checksum: 10/419c845ece767ad4b21171e6e5b63dabb2eb46b9c0d97361edcd9cabbf6a95fcadb91d89b5fa098d1336fa0b8fceaea82fca97a2ef3971f5c86e53031e157b21 + languageName: node + linkType: hard + +"@types/minimatch@npm:^3.0.3": + version: 3.0.5 + resolution: "@types/minimatch@npm:3.0.5" + checksum: 10/c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 + languageName: node + linkType: hard + +"@types/minimist@npm:^1.2.0": + version: 1.2.5 + resolution: "@types/minimist@npm:1.2.5" + checksum: 10/477047b606005058ab0263c4f58097136268007f320003c348794f74adedc3166ffc47c80ec3e94687787f2ab7f4e72c468223946e79892cf0fd9e25e9970a90 + languageName: node + linkType: hard + +"@types/node@npm:22.14.0": + version: 22.14.0 + resolution: "@types/node@npm:22.14.0" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10/d0669a8a37a18532c886ccfa51eb3fe1e46088deb4d3d27ebcd5d7d68bd6343ad1c7a3fcb85164780a57629359c33a6c917ecff748ea232bceac7692acc96537 + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.0": + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: 10/65dff72b543997b7be8b0265eca7ace0e34b75c3e5fee31de11179d08fa7124a7a5587265d53d0409532ecb7f7fba662c2012807963e1f9b059653ec2c83ee05 + languageName: node + linkType: hard + +"@vitest/expect@npm:3.1.1": + version: 3.1.1 + resolution: "@vitest/expect@npm:3.1.1" + dependencies: + "@vitest/spy": "npm:3.1.1" + "@vitest/utils": "npm:3.1.1" + chai: "npm:^5.2.0" + tinyrainbow: "npm:^2.0.0" + checksum: 10/79754e35fb505f6ee9636e49f78961299b99b12cebf6fd7ea6455a05d9a9589a65fa5d4537a7b4f6b837a41988ab629a6ff76252a4a5accf77f9462dbf3570c8 + languageName: node + linkType: hard + +"@vitest/mocker@npm:3.1.1": + version: 3.1.1 + resolution: "@vitest/mocker@npm:3.1.1" + dependencies: + "@vitest/spy": "npm:3.1.1" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.17" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10/18b72593071b4416b096c2c09899e9213804ec5e0fc90f6c5464ebd9645f34de9c2d0ecb09cbc7f3d44fbcf897fca2921ba114b185fc86a70050ccee1c6d6cc8 + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:3.1.1, @vitest/pretty-format@npm:^3.1.1": + version: 3.1.1 + resolution: "@vitest/pretty-format@npm:3.1.1" + dependencies: + tinyrainbow: "npm:^2.0.0" + checksum: 10/d1bc6a6c687d686194ef19ebc748894c543bc520d79db5e86d53ac97f004d13d5b364592a21e151031bf76bf8865ce25e60fc71cc02ca0d513d20bc0c600a63f + languageName: node + linkType: hard + +"@vitest/runner@npm:3.1.1": + version: 3.1.1 + resolution: "@vitest/runner@npm:3.1.1" + dependencies: + "@vitest/utils": "npm:3.1.1" + pathe: "npm:^2.0.3" + checksum: 10/652a351e59d2f615f3b3de0bb47bfb7875117dd3e57a62c031d8f385614513dbe77847a39037aedb79818a3fde1d957bb82e2f3a5c74651d27721553ed8b4668 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:3.1.1": + version: 3.1.1 + resolution: "@vitest/snapshot@npm:3.1.1" + dependencies: + "@vitest/pretty-format": "npm:3.1.1" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + checksum: 10/517ad76c35bd55d2908349a9a5749f874927971c2d6f4ffb3a6f6345acb7a393fac4cc9778119a215caf9ee0c96c75dc27c9f9227a51bd3907c36da946652d43 + languageName: node + linkType: hard + +"@vitest/spy@npm:3.1.1": + version: 3.1.1 + resolution: "@vitest/spy@npm:3.1.1" + dependencies: + tinyspy: "npm:^3.0.2" + checksum: 10/2b2c8cb2f13fe4ea48779b91c69140c596c8fe3a3ef283ef8b19c025cfdb59a60db7c65a320c84fa28b26655877570860bb44bc2d0e99639d097a7e042e3c604 + languageName: node + linkType: hard + +"@vitest/utils@npm:3.1.1": + version: 3.1.1 + resolution: "@vitest/utils@npm:3.1.1" + dependencies: + "@vitest/pretty-format": "npm:3.1.1" + loupe: "npm:^3.1.3" + tinyrainbow: "npm:^2.0.0" + checksum: 10/05f28d3e6636966803d60d4867200d6a3a5b7bc2ebaf1583bc3d5a2fc024e024c4958237eca73e420349faf326a8f62c3ae00b2cc2edb42d601b79a759f21b8f + languageName: node + linkType: hard + +"@yarnpkg/lockfile@npm:^1.1.0": + version: 1.1.0 + resolution: "@yarnpkg/lockfile@npm:1.1.0" + checksum: 10/cd19e1114aaf10a05126aeea8833ef4ca8af8a46e88e12884f8359d19333fd19711036dbc2698dbe937f81f037070cf9a8da45c2e8c6ca19cafd7d15659094ed + languageName: node + linkType: hard + +"@yarnpkg/parsers@npm:3.0.2": + version: 3.0.2 + resolution: "@yarnpkg/parsers@npm:3.0.2" + dependencies: + js-yaml: "npm:^3.10.0" + tslib: "npm:^2.4.0" + checksum: 10/87506f140d6c401bdd89ff22073c3dd3ec7b6858e7f576e63ec1aea1b0b8a8ec241eb46ca5582dc2071098a86d6a55c3b0628da5eeff91d33afb4fa7cac0cf65 + languageName: node + linkType: hard + +"@zkochan/js-yaml@npm:0.0.7": + version: 0.0.7 + resolution: "@zkochan/js-yaml@npm:0.0.7" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10/83642debff31400764e8721ba8f386e0f5444b118c7a6c17dbdcb316b56fefa061ea0587af47de75e04d60059215a703a1ca8bbc479149581cd57d752cb3d4e0 + languageName: node + linkType: hard + +"JSONStream@npm:^1.3.5": + version: 1.3.5 + resolution: "JSONStream@npm:1.3.5" + dependencies: + jsonparse: "npm:^1.2.0" + through: "npm:>=2.2.7 <3" + bin: + JSONStream: ./bin.js + checksum: 10/e30daf7b9b2da23076181d9a0e4bec33bc1d97e8c0385b949f1b16ba3366a1d241ec6f077850c01fe32379b5ebb8b96b65496984bc1545a93a5150bf4c267439 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10/ca0a54e35bea4ece0ecb68a47b312e1a9a6f772408d5bcb9051230aaa94b0460671c5b5c9cb3240eb5b7bc94c52476550eb221f65a0bbd0145bdc9f3113a6707 + languageName: node + linkType: hard + +"abbrev@npm:^3.0.0": + version: 3.0.0 + resolution: "abbrev@npm:3.0.0" + checksum: 10/2ceee14efdeda42ef7355178c1069499f183546ff7112b3efe79c1edef09d20ad9c17939752215fb8f7fcf48d10e6a7c0aa00136dc9cf4d293d963718bb1d200 + languageName: node + linkType: hard + +"acorn-walk@npm:8.3.2": + version: 8.3.2 + resolution: "acorn-walk@npm:8.3.2" + checksum: 10/57dbe2fd8cf744f562431775741c5c087196cd7a65ce4ccb3f3981cdfad25cd24ad2bad404997b88464ac01e789a0a61e5e355b2a84876f13deef39fb39686ca + languageName: node + linkType: hard + +"acorn-walk@npm:^8.1.1": + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10/871386764e1451c637bb8ab9f76f4995d408057e9909be6fb5ad68537ae3375d85e6a6f170b98989f44ab3ff6c74ad120bc2779a3d577606e7a0cd2b4efcaf77 + languageName: node + linkType: hard + +"acorn@npm:8.14.0": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" + bin: + acorn: bin/acorn + checksum: 10/6df29c35556782ca9e632db461a7f97947772c6c1d5438a81f0c873a3da3a792487e83e404d1c6c25f70513e91aa18745f6eafb1fcc3a43ecd1920b21dd173d2 + languageName: node + linkType: hard + +"acorn@npm:^8.11.0, acorn@npm:^8.4.1": + version: 8.14.1 + resolution: "acorn@npm:8.14.1" + bin: + acorn: bin/acorn + checksum: 10/d1379bbee224e8d44c3c3946e6ba6973e999fbdd4e22e41c3455d7f9b6f72f7ce18d3dc218002e1e48eea789539cf1cb6d1430c81838c6744799c712fb557d92 + languageName: node + linkType: hard + +"add-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "add-stream@npm:1.0.0" + checksum: 10/3e9e8b0b8f0170406d7c3a9a39bfbdf419ccccb0fd2a396338c0fda0a339af73bf738ad414fc520741de74517acf0dd92b4a36fd3298a47fd5371eee8f2c5a06 + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10/3db6d8d4651f2aa1a9e4af35b96ab11a7607af57a24f3bc721a387eaa3b5f674e901f0a648b0caefd48f3fd117c7761b79a3b55854e2aebaa96c3f32cf76af84 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10/1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"algoliasearch-client-javascript@workspace:.": + version: 0.0.0-use.local + resolution: "algoliasearch-client-javascript@workspace:." + dependencies: + "@types/node": "npm:22.14.0" + bundlewatch: "npm:0.4.0" + execa: "npm:9.5.2" + lerna: "npm:8.2.1" + rollup: "npm:4.39.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + +"algoliasearch@workspace:packages/algoliasearch": + version: 0.0.0-use.local + resolution: "algoliasearch@workspace:packages/algoliasearch" + dependencies: + "@algolia/client-abtesting": "npm:5.23.3" + "@algolia/client-analytics": "npm:5.23.3" + "@algolia/client-common": "npm:5.23.3" + "@algolia/client-insights": "npm:5.23.3" + "@algolia/client-personalization": "npm:5.23.3" + "@algolia/client-query-suggestions": "npm:5.23.3" + "@algolia/client-search": "npm:5.23.3" + "@algolia/ingestion": "npm:1.23.3" + "@algolia/monitoring": "npm:1.23.3" + "@algolia/recommend": "npm:5.23.3" + "@algolia/requester-browser-xhr": "npm:5.23.3" + "@algolia/requester-fetch": "npm:5.23.3" + "@algolia/requester-node-http": "npm:5.23.3" + "@algolia/requester-testing": "npm:5.23.3" + "@arethetypeswrong/cli": "npm:0.17.4" + "@cloudflare/vitest-pool-workers": "npm:0.8.11" + "@cloudflare/workers-types": "npm:4.20250407.0" + "@types/node": "npm:22.14.0" + jsdom: "npm:26.0.0" + publint: "npm:0.3.10" + rollup: "npm:4.39.0" + tsup: "npm:8.4.0" + typescript: "npm:5.8.3" + vitest: "npm:3.1.1" + languageName: unknown + linkType: soft + +"ansi-colors@npm:^4.1.1": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: 10/43d6e2fc7b1c6e4dc373de708ee76311ec2e0433e7e8bd3194e7ff123ea6a747428fc61afdcf5969da5be3a5f0fd054602bec56fc0ebe249ce2fcde6e649e3c2 + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: 10/8661034456193ffeda0c15c8c564a9636b0c04094b7f78bd01517929c17c504090a60f7a75f949f5af91289c264d3e1001d91492c1bd58efc8e100500ce04de2 + languageName: node + linkType: hard + +"ansi-escapes@npm:^7.0.0": + version: 7.0.0 + resolution: "ansi-escapes@npm:7.0.0" + dependencies: + environment: "npm:^1.0.0" + checksum: 10/2d0e2345087bd7ae6bf122b9cc05ee35560d40dcc061146edcdc02bc2d7c7c50143cd12a22e69a0b5c0f62b948b7bc9a4539ee888b80f5bd33cdfd82d01a70ab + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10/2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1, ansi-regex@npm:^6.1.0": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10/495834a53b0856c02acd40446f7130cb0f8284f4a39afdab20d5dc42b2e198b1196119fe887beed8f9055c4ff2055e3b2f6d4641d0be018cdfb64fedf6fc1aac + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10/b4494dfbfc7e4591b4711a396bd27e540f8153914123dccb4cdbbcb514015ada63a3809f362b9d8d4f6b17a706f1d7bea3c6f974b15fa5ae76b5b502070889ff + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: 10/d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10/70fdf883b704d17a5dfc9cde206e698c16bcd74e7f196ab821511651aee4f9f76c9514bdfa6ca3a27b5e49138b89cb222a28caf3afe4567570139577f991df32 + languageName: node + linkType: hard + +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 10/6737469ba353b5becf29e4dc3680736b9caa06d300bda6548812a8fee63ae7d336d756f88572fa6b5219aed36698d808fa55f62af3e7e6845c7a1dc77d240edb + languageName: node + linkType: hard + +"aproba@npm:2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 10/c2b9a631298e8d6f3797547e866db642f68493808f5b37cd61da778d5f6ada890d16f668285f7d60bd4fc3b03889bd590ffe62cf81b700e9bb353431238a0a7b + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 10/969b491082f20cad166649fa4d2073ea9e974a4e5ac36247ca23d2e5a8b3cb12d60e9ff70a8acfe26d76566c71fd351ee5e6a9a6595157eb36f92b1fd64e1599 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: 10/c6a621343a553ff3779390bb5ee9c2263d6643ebcd7843227bdde6cc7adbed796eb5540ca98db19e3fd7b4714e1faa51551f8849b268bb62df27ddb15cbcd91e + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10/18640244e641a417ec75a9bd38b0b2b6b95af5199aa241b131d4b2fb206f334d7ecc600bd194861610a5579084978bfcbb02baa399dbe442d56d0ae5e60dbaef + languageName: node + linkType: hard + +"array-differ@npm:^3.0.0": + version: 3.0.0 + resolution: "array-differ@npm:3.0.0" + checksum: 10/117edd9df5c1530bd116c6e8eea891d4bd02850fd89b1b36e532b6540e47ca620a373b81feca1c62d1395d9ae601516ba538abe5e8172d41091da2c546b05fb7 + languageName: node + linkType: hard + +"array-ify@npm:^1.0.0": + version: 1.0.0 + resolution: "array-ify@npm:1.0.0" + checksum: 10/c0502015b319c93dd4484f18036bcc4b654eb76a4aa1f04afbcef11ac918859bb1f5d71ba1f0f1141770db9eef1a4f40f1761753650873068010bbf7bcdae4a4 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10/5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: 10/745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 + languageName: node + linkType: hard + +"arrify@npm:^2.0.1": + version: 2.0.1 + resolution: "arrify@npm:2.0.1" + checksum: 10/067c4c1afd182806a82e4c1cb8acee16ab8b5284fbca1ce29408e6e91281c36bb5b612f6ddfbd40a0f7a7e0c75bf2696eb94c027f6e328d6e9c52465c98e4209 + languageName: node + linkType: hard + +"as-table@npm:^1.0.36": + version: 1.0.55 + resolution: "as-table@npm:1.0.55" + dependencies: + printable-characters: "npm:^1.0.42" + checksum: 10/8bbfbd7b6f240efb22f6553f756e89d1cae074e9f7a24580282e9d247c1bd9cf1fd9fb49056202a78a5e69907209d8bf032d8b6c3eaaab5fb6ad92da64a7894a + languageName: node + linkType: hard + +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10/a0789dd882211b87116e81e2648ccb7f60340b34f19877dd020b39ebb4714e475eb943e14ba3e22201c221ef6645b7bfe10297e76b6ac95b48a9898c1211ce66 + languageName: node + linkType: hard + +"async@npm:^3.2.3": + version: 3.2.6 + resolution: "async@npm:3.2.6" + checksum: 10/cb6e0561a3c01c4b56a799cc8bab6ea5fef45f069ab32500b6e19508db270ef2dffa55e5aed5865c5526e9907b1f8be61b27530823b411ffafb5e1538c86c368 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10/3ce727cbc78f69d6a4722517a58ee926c8c21083633b1d3fdf66fd688f6c127a53a592141bd4866f9b63240a86e9d8e974b13919450bd17fa33c2d22c4558ad8 + languageName: node + linkType: hard + +"axios@npm:^0.28.0": + version: 0.28.1 + resolution: "axios@npm:0.28.1" + dependencies: + follow-redirects: "npm:^1.15.0" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10/3eb6799ce716de877c3015ddc2cbb5d5176c914d777c36076e097157792f2bc6d0a491156a9239bf32e8dfe1c138ec008d6bd31f4c5602d8e7b915111c10b635 + languageName: node + linkType: hard + +"axios@npm:^1.8.3": + version: 1.8.4 + resolution: "axios@npm:1.8.4" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10/a10f0dd836613924e48cf03dc2eff3fd21b14f764807aedaee4880a70c0f142aaebdb21da7ce27104d4c16ca00d0e452a20a20851f60e385a8d5bad1ae909d46 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10/9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10/669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"before-after-hook@npm:^2.2.0": + version: 2.2.3 + resolution: "before-after-hook@npm:2.2.3" + checksum: 10/e676f769dbc4abcf4b3317db2fd2badb4a92c0710e0a7da12cf14b59c3482d4febf835ad7de7874499060fd4e13adf0191628e504728b3c5bb4ec7a878c09940 + languageName: node + linkType: hard + +"bin-links@npm:^4.0.4": + version: 4.0.4 + resolution: "bin-links@npm:4.0.4" + dependencies: + cmd-shim: "npm:^6.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + read-cmd-shim: "npm:^4.0.0" + write-file-atomic: "npm:^5.0.0" + checksum: 10/58d62143aacdbb783b076e9bdd970d8470f2750e1076d6fd1ae559fa532c4647478dd2550a911ba22d4c9e6339881451046e2fbc4b8958f4bf3bf8e5144d1e4d + languageName: node + linkType: hard + +"birpc@npm:0.2.14": + version: 0.2.14 + resolution: "birpc@npm:0.2.14" + checksum: 10/4c6329a05f6fc27ac524d3b94f44c3532ee9be75e8a773db950f8ad7a64962905cbe589873cb390294d770e67fd1a1fe4df98f1eab59874aa62d6dd07abe163b + languageName: node + linkType: hard + +"bl@npm:^4.0.3, bl@npm:^4.1.0": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: "npm:^5.5.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 10/b7904e66ed0bdfc813c06ea6c3e35eafecb104369dbf5356d0f416af90c1546de3b74e5b63506f0629acf5e16a6f87c3798f16233dcff086e9129383aa02ab55 + languageName: node + linkType: hard + +"blake3-wasm@npm:2.1.5": + version: 2.1.5 + resolution: "blake3-wasm@npm:2.1.5" + checksum: 10/7138aa209ac8411755ba07df7d035974886aac1fb4bb8cf710d354732037069bacc9984c19b3bc68bf5e17cc203f454cc9cfcb7115393aaf21ce865630dbf920 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10/faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10/a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10/fad11a0d4697a27162840b02b1fad249c1683cbc510cd5bf1a471f2f8085c046d41094308c577a50a03a579dd99d5a6b3724c4b5e8b14df2c4443844cfcda2c6 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10/0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 10/997434d3c6e3b39e0be479a80288875f71cd1c07d75a3855e6f08ef848a3c966023f79534e22e415ff3a5112708ce06127277ab20e527146d55c84566405c7c6 + languageName: node + linkType: hard + +"bundle-require@npm:^5.1.0": + version: 5.1.0 + resolution: "bundle-require@npm:5.1.0" + dependencies: + load-tsconfig: "npm:^0.2.3" + peerDependencies: + esbuild: ">=0.18" + checksum: 10/735e0220055b9bdac20bea48ec1e10dc3a205232c889ef54767900bebdc721959c4ccb221e4ea434d7ddcd693a8a4445c3d0598e4040ee313ce0ac3aae3e6178 + languageName: node + linkType: hard + +"bundlewatch@npm:0.4.0": + version: 0.4.0 + resolution: "bundlewatch@npm:0.4.0" + dependencies: + axios: "npm:^0.28.0" + bytes: "npm:^3.1.1" + chalk: "npm:^4.0.0" + ci-env: "npm:^1.17.0" + commander: "npm:^5.0.0" + glob: "npm:^7.1.2" + gzip-size: "npm:^6.0.0" + jsonpack: "npm:^1.1.5" + lodash.merge: "npm:^4.6.1" + read-pkg-up: "npm:^7.0.1" + bin: + bundlewatch: lib/bin/index.js + checksum: 10/e206f2413110d667e072a5ef6cf253d1696e633da70d3cdd2fda78634f78744e94308d8bbd2d3c2c3a7e9391b3f05d2f07b93199bbec72d7a77ef4144738b06f + languageName: node + linkType: hard + +"byte-size@npm:8.1.1": + version: 8.1.1 + resolution: "byte-size@npm:8.1.1" + checksum: 10/eacd83b5f39b4b35115160201553150c3c085473ddb1e788d0f4ee22a2f3461470de5732eef8d7874efbbd883b7ae1277190b579128060e616d606ff419fe1e0 + languageName: node + linkType: hard + +"bytes@npm:^3.1.1": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: 10/a10abf2ba70c784471d6b4f58778c0beeb2b5d405148e66affa91f23a9f13d07603d0a0354667310ae1d6dc141474ffd44e2a074be0f6e2254edb8fc21445388 + languageName: node + linkType: hard + +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10/002769a0fbfc51c062acd2a59df465a2a947916b02ac50b56c69ec6c018ee99ac3e7f4dd7366334ea847f1ecacf4defaa61bcd2ac283db50156ce1f1d8c8ad42 + languageName: node + linkType: hard + +"cacache@npm:^18.0.0, cacache@npm:^18.0.3": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10/ca2f7b2d3003f84d362da9580b5561058ccaecd46cba661cbcff0375c90734b610520d46b472a339fd032d91597ad6ed12dde8af81571197f3c9772b5d35b104 + languageName: node + linkType: hard + +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" + dependencies: + "@npmcli/fs": "npm:^4.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10/ea026b27b13656330c2bbaa462a88181dcaa0435c1c2e705db89b31d9bdf7126049d6d0445ba746dca21454a0cfdf1d6f47fd39d34c8c8435296b30bc5738a13 + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10/00482c1f6aa7cfb30fb1dbeb13873edf81cfac7c29ed67a5957d60635a56b2a4a480f1016ddbdb3395cc37900d46037fb965043a51c5c789ffeab4fc535d18b5 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + get-intrinsic: "npm:^1.3.0" + checksum: 10/ef2b96e126ec0e58a7ff694db43f4d0d44f80e641370c21549ed911fecbdbc2df3ebc9bddad918d6bbdefeafb60bb3337902006d5176d72bcd2da74820991af7 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10/072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"camelcase-keys@npm:^6.2.2": + version: 6.2.2 + resolution: "camelcase-keys@npm:6.2.2" + dependencies: + camelcase: "npm:^5.3.1" + map-obj: "npm:^4.0.0" + quick-lru: "npm:^4.0.1" + checksum: 10/c1999f5b6d03bee7be9a36e48eef3da9e93e51b000677348ec8d15d51fc4418375890fb6c7155e387322d2ebb2a2cdebf9cd96607a6753d1d6c170d9b1e2eed5 + languageName: node + linkType: hard + +"camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: 10/e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + languageName: node + linkType: hard + +"chai@npm:^5.2.0": + version: 5.2.0 + resolution: "chai@npm:5.2.0" + dependencies: + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.1.1" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.1.0" + pathval: "npm:^2.0.0" + checksum: 10/2ce03671c159c6a567bf1912756daabdbb7c075f3c0078f1b59d61da8d276936367ee696dfe093b49e1479d9ba93a6074c8e55d49791dddd8061728cdcad249e + languageName: node + linkType: hard + +"chalk@npm:4.1.0": + version: 4.1.0 + resolution: "chalk@npm:4.1.0" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10/e8d2b9b9abe5aee78caae44e2fd86ade56e440df5822006d702ce18771c00418b6f2c0eb294093d5486b852c83f021e409205d0ee07095fb14f5c8f9db9e7f80 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10/cb3f3e594913d63b1814d7ca7c9bafbf895f75fbf93b92991980610dfd7b48500af4e3a5d4e3a8f337990a96b168d7eb84ee55efdce965e2ee8efc20f8c8f139 + languageName: node + linkType: hard + +"chalk@npm:^5.4.1": + version: 5.4.1 + resolution: "chalk@npm:5.4.1" + checksum: 10/29df3ffcdf25656fed6e95962e2ef86d14dfe03cd50e7074b06bad9ffbbf6089adbb40f75c00744d843685c8d008adaf3aed31476780312553caf07fa86e5bc7 + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: 10/1ec5c2906adb9f84e7f6732a40baef05d7c85401b82ffcbc44b85fbd0f7a2b0c2a96f2eb9cf55cae3235dc12d4023003b88f09bcae8be9ae894f52ed746f4d48 + languageName: node + linkType: hard + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 10/b0ec668fba5eeec575ed2559a0917ba41a6481f49063c8445400e476754e0957ee09e44dc032310f526182b8f1bf25e9d4ed371f74050af7be1383e06bc44952 + languageName: node + linkType: hard + +"check-error@npm:^2.1.1": + version: 2.1.1 + resolution: "check-error@npm:2.1.1" + checksum: 10/d785ed17b1d4a4796b6e75c765a9a290098cf52ff9728ce0756e8ffd4293d2e419dd30c67200aee34202463b474306913f2fcfaf1890641026d9fc6966fea27a + languageName: node + linkType: hard + +"chokidar@npm:^4.0.3": + version: 4.0.3 + resolution: "chokidar@npm:4.0.3" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10/bf2a575ea5596000e88f5db95461a9d59ad2047e939d5a4aac59dd472d126be8f1c1ff3c7654b477cf532d18f42a97279ef80ee847972fd2a25410bf00b80b59 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10/c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10/b63cb1f73d171d140a2ed8154ee6566c8ab775d3196b0e03a2a94b5f6a0ce7777ee5685ca56849403c8d17bd457a6540672f9a60696a6137c7a409097495b82c + languageName: node + linkType: hard + +"ci-env@npm:^1.17.0": + version: 1.17.0 + resolution: "ci-env@npm:1.17.0" + checksum: 10/ce5ce285d43e1808d80f86de4d22ee74a93f1051b7f1332c72a4518e871f2c23ea0f839d16918427dcd22868063196eda6fc6bf939019ef4386c0c44e5a28613 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 10/75bc67902b4d1c7b435497adeb91598f6d52a3389398e44294f6601b20cfef32cf2176f7be0eb961d9e085bb333a8a5cae121cb22f81cf238ae7f58eb80e9397 + languageName: node + linkType: hard + +"ci-info@npm:^4.0.0": + version: 4.2.0 + resolution: "ci-info@npm:4.2.0" + checksum: 10/928d8457f3476ffc4a66dec93b9cdf1944d5e60dba69fbd6a0fc95b652386f6ef64857f6e32372533210ef6d8954634af2c7693d7c07778ee015f3629a5e0dd9 + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.2.3": + version: 1.4.3 + resolution: "cjs-module-lexer@npm:1.4.3" + checksum: 10/d2b92f919a2dedbfd61d016964fce8da0035f827182ed6839c97cac56e8a8077cfa6a59388adfe2bc588a19cef9bbe830d683a76a6e93c51f65852062cfe2591 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10/2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-cursor@npm:3.1.0, cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: "npm:^3.1.0" + checksum: 10/2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 + languageName: node + linkType: hard + +"cli-highlight@npm:^2.1.11": + version: 2.1.11 + resolution: "cli-highlight@npm:2.1.11" + dependencies: + chalk: "npm:^4.0.0" + highlight.js: "npm:^10.7.1" + mz: "npm:^2.4.0" + parse5: "npm:^5.1.1" + parse5-htmlparser2-tree-adapter: "npm:^6.0.0" + yargs: "npm:^16.0.0" + bin: + highlight: bin/highlight + checksum: 10/05d2b5beb8a4d3259f693517d013bf53d04ad20f470b77c3d02e051963092fae388388e3127f67d3679884a0c32cb855bf590292017c5e68c0f8d86f4b8e146e + languageName: node + linkType: hard + +"cli-spinners@npm:2.6.1": + version: 2.6.1 + resolution: "cli-spinners@npm:2.6.1" + checksum: 10/3e2dc5df72cf02120bebe256881fc8e3ec49867e5023d39f1e7340d7da57964f5236f4c75e568aa9dea6460b56f7a6d5870b89453c743c6c15e213cb52be2122 + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 10/a0a863f442df35ed7294424f5491fa1756bd8d2e4ff0c8736531d886cec0ece4d85e8663b77a5afaf1d296e3cbbebff92e2e99f52bbea89b667cbe789b994794 + languageName: node + linkType: hard + +"cli-table3@npm:^0.6.3, cli-table3@npm:^0.6.5": + version: 0.6.5 + resolution: "cli-table3@npm:0.6.5" + dependencies: + "@colors/colors": "npm:1.5.0" + string-width: "npm:^4.2.0" + dependenciesMeta: + "@colors/colors": + optional: true + checksum: 10/8dca71256f6f1367bab84c33add3f957367c7c43750a9828a4212ebd31b8df76bd7419d386e3391ac7419698a8540c25f1a474584028f35b170841cde2e055c5 + languageName: node + linkType: hard + +"cli-width@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-width@npm:3.0.0" + checksum: 10/8730848b04fb189666ab037a35888d191c8f05b630b1d770b0b0e4c920b47bb5cc14bddf6b8ffe5bfc66cee97c8211d4d18e756c1ffcc75d7dbe7e1186cd7826 + languageName: node + linkType: hard + +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.0" + wrap-ansi: "npm:^7.0.0" + checksum: 10/db858c49af9d59a32d603987e6fddaca2ce716cd4602ba5a2bb3a5af1351eebe82aba8dff3ef3e1b331f7fa9d40ca66e67bdf8e7c327ce0ea959747ead65c0ef + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10/eaa5561aeb3135c2cddf7a3b3f562fc4238ff3b3fc666869ef2adf264be0f372136702f16add9299087fb1907c2e4ec5dbfe83bd24bce815c70a80c6c1a2e950 + languageName: node + linkType: hard + +"clone-deep@npm:4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: "npm:^2.0.4" + kind-of: "npm:^6.0.2" + shallow-clone: "npm:^3.0.0" + checksum: 10/770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: 10/d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd + languageName: node + linkType: hard + +"cmd-shim@npm:6.0.3, cmd-shim@npm:^6.0.0": + version: 6.0.3 + resolution: "cmd-shim@npm:6.0.3" + checksum: 10/791c9779cf57deae978ef24daf7e49e7fdb2070cc273aa7d691ed258a660ad3861edbc9f39daa2b6e5f72a64526b6812c04f08becc54402618b99946ccad7d71 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10/fa00c91b4332b294de06b443923246bccebe9fab1b253f7fe1772d37b06a2269b4039a85e309abe1fe11b267b11c08d1d0473fda3badd6167f57313af2887a64 + languageName: node + linkType: hard + +"color-name@npm:^1.0.0, color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10/b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-string@npm:^1.9.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" + dependencies: + color-name: "npm:^1.0.0" + simple-swizzle: "npm:^0.2.2" + checksum: 10/72aa0b81ee71b3f4fb1ac9cd839cdbd7a011a7d318ef58e6cb13b3708dca75c7e45029697260488709f1b1c7ac4e35489a87e528156c1e365917d1c4ccb9b9cd + languageName: node + linkType: hard + +"color-support@npm:1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 10/4bcfe30eea1498fe1cabc852bbda6c9770f230ea0e4faf4611c5858b1b9e4dde3730ac485e65f54ca182f4c50b626c1bea7c8441ceda47367a54a818c248aa7a + languageName: node + linkType: hard + +"color@npm:^4.2.3": + version: 4.2.3 + resolution: "color@npm:4.2.3" + dependencies: + color-convert: "npm:^2.0.1" + color-string: "npm:^1.9.0" + checksum: 10/b23f5e500a79ea22428db43d1a70642d983405c0dd1f95ef59dbdb9ba66afbb4773b334fa0b75bb10b0552fd7534c6b28d4db0a8b528f91975976e70973c0152 + languageName: node + linkType: hard + +"columnify@npm:1.6.0": + version: 1.6.0 + resolution: "columnify@npm:1.6.0" + dependencies: + strip-ansi: "npm:^6.0.1" + wcwidth: "npm:^1.0.0" + checksum: 10/ab742cc646c07293db603f7a4387ca9d46d32beaaba0a08008c2f31f30042e6e5a940096fb7d2d432495597ed3d5c5fe07a5bacd55e4ac24a768d344a47dd678 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10/2e969e637d05d09fa50b02d74c83a1186f6914aae89e6653b62595cc75a221464f884f55f231b8f4df7a49537fba60bdc0427acd2bf324c09a1dbb84837e36e4 + languageName: node + linkType: hard + +"commander@npm:^10.0.1": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 10/8799faa84a30da985802e661cc9856adfaee324d4b138413013ef7f087e8d7924b144c30a1f1405475f0909f467665cd9e1ce13270a2f41b141dab0b7a58f3fb + languageName: node + linkType: hard + +"commander@npm:^4.0.0": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: 10/3b2dc4125f387dab73b3294dbcb0ab2a862f9c0ad748ee2b27e3544d25325b7a8cdfbcc228d103a98a716960b14478114a5206b5415bd48cdafa38797891562c + languageName: node + linkType: hard + +"commander@npm:^5.0.0": + version: 5.1.0 + resolution: "commander@npm:5.1.0" + checksum: 10/3e2ef5c003c5179250161e42ce6d48e0e69a54af970c65b7f985c70095240c260fd647453efd4c2c5a31b30ce468f373dc70f769c2f54a2c014abc4792aaca28 + languageName: node + linkType: hard + +"common-ancestor-path@npm:^1.0.1": + version: 1.0.1 + resolution: "common-ancestor-path@npm:1.0.1" + checksum: 10/1d2e4186067083d8cc413f00fc2908225f04ae4e19417ded67faa6494fb313c4fcd5b28a52326d1a62b466e2b3a4325e92c31133c5fee628cdf8856b3a57c3d7 + languageName: node + linkType: hard + +"compare-func@npm:^2.0.0": + version: 2.0.0 + resolution: "compare-func@npm:2.0.0" + dependencies: + array-ify: "npm:^1.0.0" + dot-prop: "npm:^5.1.0" + checksum: 10/fb71d70632baa1e93283cf9d80f30ac97f003aabee026e0b4426c9716678079ef5fea7519b84d012cbed938c476493866a38a79760564a9e21ae9433e40e6f0d + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10/9680699c8e2b3af0ae22592cb764acaf973f292a7b71b8a06720233011853a58e256c89216a10cbe889727532fd77f8bcd49a760cedfde271b8e006c20e079f2 + languageName: node + linkType: hard + +"concat-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "concat-stream@npm:2.0.0" + dependencies: + buffer-from: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.0.2" + typedarray: "npm:^0.0.6" + checksum: 10/250e576d0617e7c58e1c4b2dd6fe69560f316d2c962a409f9f3aac794018499ddb31948b1e4296f217008e124cd5d526432097745157fe504b5d9f3dc469eadb + languageName: node + linkType: hard + +"consola@npm:^3.4.0": + version: 3.4.2 + resolution: "consola@npm:3.4.2" + checksum: 10/32192c9f50d7cac27c5d7c4ecd3ff3679aea863e6bf5bd6a9cc2b05d1cd78addf5dae71df08c54330c142be8e7fbd46f051030129b57c6aacdd771efe409c4b2 + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 10/27b5fa302bc8e9ae9e98c03c66d76ca289ad0c61ce2fe20ab288d288bee875d217512d2edb2363fc83165e88f1c405180cf3f5413a46e51b4fe1a004840c6cdb + languageName: node + linkType: hard + +"conventional-changelog-angular@npm:7.0.0": + version: 7.0.0 + resolution: "conventional-changelog-angular@npm:7.0.0" + dependencies: + compare-func: "npm:^2.0.0" + checksum: 10/e7966d2fee5475e76263f30f8b714b2b592b5bf556df225b7091e5090831fc9a20b99598a7d2997e19c2ef8118c0a3150b1eba290786367b0f55a5ccfa804ec9 + languageName: node + linkType: hard + +"conventional-changelog-core@npm:5.0.1": + version: 5.0.1 + resolution: "conventional-changelog-core@npm:5.0.1" + dependencies: + add-stream: "npm:^1.0.0" + conventional-changelog-writer: "npm:^6.0.0" + conventional-commits-parser: "npm:^4.0.0" + dateformat: "npm:^3.0.3" + get-pkg-repo: "npm:^4.2.1" + git-raw-commits: "npm:^3.0.0" + git-remote-origin-url: "npm:^2.0.0" + git-semver-tags: "npm:^5.0.0" + normalize-package-data: "npm:^3.0.3" + read-pkg: "npm:^3.0.0" + read-pkg-up: "npm:^3.0.0" + checksum: 10/df716cd61eec26b1379370f7dc87df6eadfb6b42c1c99291fcca1c68cd669643539d619fae3fa0ad9255b4e8c30af3b709e058ba62bc5c3a06dc14190c7ef5cc + languageName: node + linkType: hard + +"conventional-changelog-preset-loader@npm:^3.0.0": + version: 3.0.0 + resolution: "conventional-changelog-preset-loader@npm:3.0.0" + checksum: 10/199c4730c5151f243d35c24585114900c2a7091eab5832cfeb49067a18a2b77d5c9a86b779e6e18b49278a1ff83c011c1d9bb6da95bd1f78d9e36d4d379216d5 + languageName: node + linkType: hard + +"conventional-changelog-writer@npm:^6.0.0": + version: 6.0.1 + resolution: "conventional-changelog-writer@npm:6.0.1" + dependencies: + conventional-commits-filter: "npm:^3.0.0" + dateformat: "npm:^3.0.3" + handlebars: "npm:^4.7.7" + json-stringify-safe: "npm:^5.0.1" + meow: "npm:^8.1.2" + semver: "npm:^7.0.0" + split: "npm:^1.0.1" + bin: + conventional-changelog-writer: cli.js + checksum: 10/9649d390b91c0621b17ccd7faf046990385da46c53004fcc3f13e5887ece26d134316d466de8c21d0c90672c1fca2b7ec98f28603ee04df8cfe5bcfc1fb70e76 + languageName: node + linkType: hard + +"conventional-commits-filter@npm:^3.0.0": + version: 3.0.0 + resolution: "conventional-commits-filter@npm:3.0.0" + dependencies: + lodash.ismatch: "npm:^4.4.0" + modify-values: "npm:^1.0.1" + checksum: 10/73337f42acff7189e1dfca8d13c9448ce085ac1c09976cb33617cc909949621befb1640b1c6c30a1be4953a1be0deea9e93fa0dc86725b8be8e249a64fbb4632 + languageName: node + linkType: hard + +"conventional-commits-parser@npm:^4.0.0": + version: 4.0.0 + resolution: "conventional-commits-parser@npm:4.0.0" + dependencies: + JSONStream: "npm:^1.3.5" + is-text-path: "npm:^1.0.1" + meow: "npm:^8.1.2" + split2: "npm:^3.2.2" + bin: + conventional-commits-parser: cli.js + checksum: 10/d3b7d947b486d3bb40f961808947ee46487429e050be840030211a80aa2eec170e427207c830f2720d8ab898649a652bbbe1825993b8bf0596517e3603f5a1bd + languageName: node + linkType: hard + +"conventional-recommended-bump@npm:7.0.1": + version: 7.0.1 + resolution: "conventional-recommended-bump@npm:7.0.1" + dependencies: + concat-stream: "npm:^2.0.0" + conventional-changelog-preset-loader: "npm:^3.0.0" + conventional-commits-filter: "npm:^3.0.0" + conventional-commits-parser: "npm:^4.0.0" + git-raw-commits: "npm:^3.0.0" + git-semver-tags: "npm:^5.0.0" + meow: "npm:^8.1.2" + bin: + conventional-recommended-bump: cli.js + checksum: 10/8d815e7c6f8083085ce4c784b27b0799de628ad2671d99e23c4b08885fb04c5b2adcb6053898eb1f183ee26489273edcbb110c7cd9f80cb06153be53fef2b174 + languageName: node + linkType: hard + +"cookie@npm:^0.7.1": + version: 0.7.2 + resolution: "cookie@npm:0.7.2" + checksum: 10/24b286c556420d4ba4e9bc09120c9d3db7d28ace2bd0f8ccee82422ce42322f73c8312441271e5eefafbead725980e5996cc02766dbb89a90ac7f5636ede608f + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 10/9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"cosmiconfig@npm:9.0.0": + version: 9.0.0 + resolution: "cosmiconfig@npm:9.0.0" + dependencies: + env-paths: "npm:^2.2.1" + import-fresh: "npm:^3.3.0" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.2.0" + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/8bdf1dfbb6fdb3755195b6886dc0649a3c742ec75afa4cb8da7b070936aed22a4f4e5b7359faafe03180358f311dbc300d248fd6586c458203d376a40cc77826 + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: 10/a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"cross-fetch@npm:4.1.0": + version: 4.1.0 + resolution: "cross-fetch@npm:4.1.0" + dependencies: + node-fetch: "npm:^2.7.0" + checksum: 10/07624940607b64777d27ec9c668ddb6649e8c59ee0a5a10e63a51ce857e2bbb1294a45854a31c10eccb91b65909a5b199fcb0217339b44156f85900a7384f489 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10/0d52657d7ae36eb130999dffff1168ec348687b48dd38e2ff59992ed916c88d328cf1d07ff4a4a10bc78de5e1c23f04b306d569e42f7a2293915c081e4dfee86 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: 10/0e161912c1306861d8f46e1883be1cbc8b1b2879f0f509287c0db71796e4ddfb97ac96bdfca38f77f452e2c10554e1bb5678c99b07a5cf947a12778f73e47e12 + languageName: node + linkType: hard + +"cssstyle@npm:^4.2.1": + version: 4.3.0 + resolution: "cssstyle@npm:4.3.0" + dependencies: + "@asamuzakjp/css-color": "npm:^3.1.1" + rrweb-cssom: "npm:^0.8.0" + checksum: 10/81e0634b1905080a4f07a117a345c773f531c01cb6dd408077b46d03e2c5b5b5f0b88ab36eba5fb82ce35ef2c5ddb02a3fd57f99b54e7ab0bd06d8708c319080 + languageName: node + linkType: hard + +"dargs@npm:^7.0.0": + version: 7.0.0 + resolution: "dargs@npm:7.0.0" + checksum: 10/b8f1e3cba59c42e1f13a114ad4848c3fc1cf7470f633ee9e9f1043762429bc97d91ae31b826fb135eefde203a3fdb20deb0c0a0222ac29d937b8046085d668d1 + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^2.0.0": + version: 2.0.2 + resolution: "data-uri-to-buffer@npm:2.0.2" + checksum: 10/152bec5e77513ee253a7c686700a1723246f582dad8b614e8eaaaba7fa45a15c8671ae4b8f4843f4f3a002dae1d3e7a20f852f7d7bdc8b4c15cfe7adfdfb07f8 + languageName: node + linkType: hard + +"data-urls@npm:^5.0.0": + version: 5.0.0 + resolution: "data-urls@npm:5.0.0" + dependencies: + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.0.0" + checksum: 10/5c40568c31b02641a70204ff233bc4e42d33717485d074244a98661e5f2a1e80e38fe05a5755dfaf2ee549f2ab509d6a3af2a85f4b2ad2c984e5d176695eaf46 + languageName: node + linkType: hard + +"dateformat@npm:^3.0.3": + version: 3.0.3 + resolution: "dateformat@npm:3.0.3" + checksum: 10/0504baf50c3777ad333c96c37d1673d67efcb7dd071563832f70b5cbf7f3f4753f18981d44bfd8f665d5e5a511d2fc0af8e0ead8b585b9b3ddaa90067864d3f0 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.4, debug@npm:^4.4.0": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10/1847944c2e3c2c732514b93d11886575625686056cd765336212dc15de2d2b29612b6cd80e1afba767bb8e1803b778caf9973e98169ef1a24a7a7009e1820367 + languageName: node + linkType: hard + +"decamelize-keys@npm:^1.1.0": + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" + dependencies: + decamelize: "npm:^1.1.0" + map-obj: "npm:^1.0.0" + checksum: 10/71d5898174f17a8d2303cecc98ba0236e842948c4d042a8180d5e749be8442220bca2d16dd93bebd7b49e86c807814273212e4da0fae67be7c58c282ff76057a + languageName: node + linkType: hard + +"decamelize@npm:^1.1.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: 10/ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa + languageName: node + linkType: hard + +"decimal.js@npm:^10.4.3": + version: 10.5.0 + resolution: "decimal.js@npm:10.5.0" + checksum: 10/714d49cf2f2207b268221795ede330e51452b7c451a0c02a770837d2d4faed47d603a729c2aa1d952eb6c4102d999e91c9b952c1aa016db3c5cba9fc8bf4cda2 + languageName: node + linkType: hard + +"dedent@npm:1.5.3": + version: 1.5.3 + resolution: "dedent@npm:1.5.3" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10/e5277f6268f288649503125b781a7b7a2c9b22d011139688c0b3619fe40121e600eb1f077c891938d4b2428bdb6326cc3c77a763e4b1cc681bd9666ab1bad2a1 + languageName: node + linkType: hard + +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 10/a529b81e2ef8821621d20a36959a0328873a3e49d393ad11f8efe8559f31239494c2eb889b80342808674c475802ba95b9d6c4c27641b9a029405104c1b59fcf + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: "npm:^1.0.2" + checksum: 10/3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a + languageName: node + linkType: hard + +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 10/0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 + languageName: node + linkType: hard + +"defu@npm:^6.1.4": + version: 6.1.4 + resolution: "defu@npm:6.1.4" + checksum: 10/aeffdb47300f45b4fdef1c5bd3880ac18ea7a1fd5b8a8faf8df29350ff03bf16dd34f9800205cab513d476e4c0a3783aa0cff0a433aff0ac84a67ddc4c8a2d64 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10/46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"deprecation@npm:^2.0.0": + version: 2.3.1 + resolution: "deprecation@npm:2.3.1" + checksum: 10/f56a05e182c2c195071385455956b0c4106fe14e36245b00c689ceef8e8ab639235176a96977ba7c74afb173317fac2e0ec6ec7a1c6d1e6eaa401c586c714132 + languageName: node + linkType: hard + +"detect-indent@npm:^5.0.0": + version: 5.0.0 + resolution: "detect-indent@npm:5.0.0" + checksum: 10/61763211daa498e00eec073aba95d544ae5baed19286a0a655697fa4fffc9f4539c8376e2c7df8fa11d6f8eaa16c1e6a689f403ac41ee78a060278cdadefe2ff + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.3": + version: 2.0.3 + resolution: "detect-libc@npm:2.0.3" + checksum: 10/b4ea018d623e077bd395f168a9e81db77370dde36a5b01d067f2ad7989924a81d31cb547ff764acb2aa25d50bb7fdde0b0a93bec02212b0cb430621623246d39 + languageName: node + linkType: hard + +"devalue@npm:^4.3.0": + version: 4.3.3 + resolution: "devalue@npm:4.3.3" + checksum: 10/b53ab9fe1b7b9e45c3eeebe8ff59ef294aaa8f8206c61fa49dedcccb65622882e68b69f1c1c8e7129ff5590a405cd6fb5dbe88afd6fb0f6861d5393cdce93c76 + languageName: node + linkType: hard + +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: 10/179daf9d2f9af5c57ad66d97cb902a538bcf8ed64963fa7aa0c329b3de3665ce2eb6ffdc2f69f29d445fa4af2517e5e55e5b6e00c00a9ae4f43645f97f7078cb + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: 10/ec09ec2101934ca5966355a229d77afcad5911c92e2a77413efda5455636c4cf2ce84057e2d7715227a2eeeda04255b849bd3ae3a4dd22eb22e86e76456df069 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10/fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"dom-walk@npm:^0.1.0": + version: 0.1.2 + resolution: "dom-walk@npm:0.1.2" + checksum: 10/19eb0ce9c6de39d5e231530685248545d9cd2bd97b2cb3486e0bfc0f2a393a9addddfd5557463a932b52fdfcf68ad2a619020cd2c74a5fe46fbecaa8e80872f3 + languageName: node + linkType: hard + +"dot-prop@npm:^5.1.0": + version: 5.3.0 + resolution: "dot-prop@npm:5.3.0" + dependencies: + is-obj: "npm:^2.0.0" + checksum: 10/33b2561617bd5c73cf9305368ba4638871c5dbf9c8100c8335acd2e2d590a81ec0e75c11cfaea5cc3cf8c2f668cad4beddb52c11856d0c9e666348eee1baf57a + languageName: node + linkType: hard + +"dotenv-expand@npm:~11.0.6": + version: 11.0.7 + resolution: "dotenv-expand@npm:11.0.7" + dependencies: + dotenv: "npm:^16.4.5" + checksum: 10/1cd981e2b925e746919e9fca16fa5e953955d021b5d5fea0a4ae96dc61fcc76bc95874e7730f8ceca22f5e3df5a47eb1fc626c3f45e98019ceba54fd58521971 + languageName: node + linkType: hard + +"dotenv@npm:^16.4.5, dotenv@npm:~16.4.5": + version: 16.4.7 + resolution: "dotenv@npm:16.4.7" + checksum: 10/f13bfe97db88f0df4ec505eeffb8925ec51f2d56a3d0b6d916964d8b4af494e6fb1633ba5d09089b552e77ab2a25de58d70259b2c5ed45ec148221835fc99a0c + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10/5add88a3d68d42d6e6130a0cac450b7c2edbe73364bbd2fc334564418569bea97c6943a8fcd70e27130bf32afc236f30982fc4905039b703f23e9e0433c29934 + languageName: node + linkType: hard + +"duplexer@npm:^0.1.1, duplexer@npm:^0.1.2": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 10/62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10/9b1d3e1baefeaf7d70799db8774149cef33b97183a6addceeba0cf6b85ba23ee2686f302f14482006df32df75d32b17c509c143a3689627929e4a8efaf483952 + languageName: node + linkType: hard + +"ejs@npm:^3.1.7": + version: 3.1.10 + resolution: "ejs@npm:3.1.10" + dependencies: + jake: "npm:^10.8.5" + bin: + ejs: bin/cli.js + checksum: 10/a9cb7d7cd13b7b1cd0be5c4788e44dd10d92f7285d2f65b942f33e127230c054f99a42db4d99f766d8dbc6c57e94799593ee66a14efd7c8dd70c4812bf6aa384 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10/c72d67a6821be15ec11997877c437491c313d924306b8da5d87d2a2bcc2cec9903cb5b04ee1a088460501d8e5b44f10df82fdc93c444101a7610b80c8b6938e1 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10/915acf859cea7131dac1b2b5c9c8e35c4849e325a1d114c30adb8cd615970f6dca0e27f64f3a4949d7d6ed86ecd79a1c5c63f02e697513cddd7b5835c90948b8 + languageName: node + linkType: hard + +"emojilib@npm:^2.4.0": + version: 2.4.0 + resolution: "emojilib@npm:2.4.0" + checksum: 10/bef767eca49acaa881388d91bee6936ea57ae367d603d5227ff0a9da3e2d1e774a61c447e5f2f4901797d023c4b5239bc208285b6172a880d3655024a0f44980 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10/bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: "npm:^1.4.0" + checksum: 10/530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + +"enquirer@npm:~2.3.6": + version: 2.3.6 + resolution: "enquirer@npm:2.3.6" + dependencies: + ansi-colors: "npm:^4.1.1" + checksum: 10/751d14f037eb7683997e696fb8d5fe2675e0b0cde91182c128cf598acf3f5bd9005f35f7c2a9109e291140af496ebec237b6dac86067d59a9b44f3688107f426 + languageName: node + linkType: hard + +"entities@npm:^4.5.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 10/ede2a35c9bce1aeccd055a1b445d41c75a14a2bb1cd22e242f20cf04d236cdcd7f9c859eb83f76885327bfae0c25bf03303665ee1ce3d47c5927b98b0e3e3d48 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10/65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"envinfo@npm:7.13.0": + version: 7.13.0 + resolution: "envinfo@npm:7.13.0" + bin: + envinfo: dist/cli.js + checksum: 10/450c962053880f46852119cf89f4412cabd6d465ff5b74cf64e74e9da3a27ebd9e901944a5c4b0bf62950ad25025552282cbde6c00a5a9af0980dd001720fcbb + languageName: node + linkType: hard + +"environment@npm:^1.0.0": + version: 1.1.0 + resolution: "environment@npm:1.1.0" + checksum: 10/dd3c1b9825e7f71f1e72b03c2344799ac73f2e9ef81b78ea8b373e55db021786c6b9f3858ea43a436a2c4611052670ec0afe85bc029c384cc71165feee2f4ba6 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10/1d20d825cdcce8d811bfbe86340f4755c02655a7feb2f13f8c880566d9d72a3f6c92c192a6867632e490d6da67b678271f46e01044996a6443e870331100dfdd + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: "npm:^0.2.1" + checksum: 10/d547740aa29c34e753fb6fed2c5de81802438529c12b3673bd37b6bb1fe49b9b7abdc3c11e6062fe625d8a296b3cf769a80f878865e25e685f787763eede3ffb + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10/f8dc9e660d90919f11084db0a893128f3592b781ce967e4fccfb8f3106cb83e400a4032c559184ec52ee1dbd4b01e7776c7cd0b3327b1961b1a4a7008920fe78 + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10/96e65d640156f91b707517e8cdc454dd7d47c32833aa3e85d79f24f9eb7ea85f39b63e36216ef0114996581969b59fe609a94e30316b08f5f4df1d44134cf8d5 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.6.0": + version: 1.6.0 + resolution: "es-module-lexer@npm:1.6.0" + checksum: 10/807ee7020cc46a9c970c78cad1f2f3fc139877e5ebad7f66dbfbb124d451189ba1c48c1c632bd5f8ce1b8af2caef3fca340ba044a410fa890d17b080a59024bb + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10/54fe77de288451dae51c37bfbfe3ec86732dc3778f98f3eb3bdb4bf48063b2c0b8f9c93542656986149d08aa5be3204286e2276053d19582b76753f1a2728867 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10/86814bf8afbcd8966653f731415888019d4bc4aca6b6c354132a7a75bb87566751e320369654a101d23a91c87a85c79b178bcf40332839bd347aff437c4fb65f + languageName: node + linkType: hard + +"esbuild@npm:0.24.2": + version: 0.24.2 + resolution: "esbuild@npm:0.24.2" + dependencies: + "@esbuild/aix-ppc64": "npm:0.24.2" + "@esbuild/android-arm": "npm:0.24.2" + "@esbuild/android-arm64": "npm:0.24.2" + "@esbuild/android-x64": "npm:0.24.2" + "@esbuild/darwin-arm64": "npm:0.24.2" + "@esbuild/darwin-x64": "npm:0.24.2" + "@esbuild/freebsd-arm64": "npm:0.24.2" + "@esbuild/freebsd-x64": "npm:0.24.2" + "@esbuild/linux-arm": "npm:0.24.2" + "@esbuild/linux-arm64": "npm:0.24.2" + "@esbuild/linux-ia32": "npm:0.24.2" + "@esbuild/linux-loong64": "npm:0.24.2" + "@esbuild/linux-mips64el": "npm:0.24.2" + "@esbuild/linux-ppc64": "npm:0.24.2" + "@esbuild/linux-riscv64": "npm:0.24.2" + "@esbuild/linux-s390x": "npm:0.24.2" + "@esbuild/linux-x64": "npm:0.24.2" + "@esbuild/netbsd-arm64": "npm:0.24.2" + "@esbuild/netbsd-x64": "npm:0.24.2" + "@esbuild/openbsd-arm64": "npm:0.24.2" + "@esbuild/openbsd-x64": "npm:0.24.2" + "@esbuild/sunos-x64": "npm:0.24.2" + "@esbuild/win32-arm64": "npm:0.24.2" + "@esbuild/win32-ia32": "npm:0.24.2" + "@esbuild/win32-x64": "npm:0.24.2" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10/95425071c9f24ff88bf61e0710b636ec0eb24ddf8bd1f7e1edef3044e1221104bbfa7bbb31c18018c8c36fa7902c5c0b843f829b981ebc89160cf5eebdaa58f4 + languageName: node + linkType: hard + +"esbuild@npm:^0.25.0": + version: 0.25.2 + resolution: "esbuild@npm:0.25.2" + dependencies: + "@esbuild/aix-ppc64": "npm:0.25.2" + "@esbuild/android-arm": "npm:0.25.2" + "@esbuild/android-arm64": "npm:0.25.2" + "@esbuild/android-x64": "npm:0.25.2" + "@esbuild/darwin-arm64": "npm:0.25.2" + "@esbuild/darwin-x64": "npm:0.25.2" + "@esbuild/freebsd-arm64": "npm:0.25.2" + "@esbuild/freebsd-x64": "npm:0.25.2" + "@esbuild/linux-arm": "npm:0.25.2" + "@esbuild/linux-arm64": "npm:0.25.2" + "@esbuild/linux-ia32": "npm:0.25.2" + "@esbuild/linux-loong64": "npm:0.25.2" + "@esbuild/linux-mips64el": "npm:0.25.2" + "@esbuild/linux-ppc64": "npm:0.25.2" + "@esbuild/linux-riscv64": "npm:0.25.2" + "@esbuild/linux-s390x": "npm:0.25.2" + "@esbuild/linux-x64": "npm:0.25.2" + "@esbuild/netbsd-arm64": "npm:0.25.2" + "@esbuild/netbsd-x64": "npm:0.25.2" + "@esbuild/openbsd-arm64": "npm:0.25.2" + "@esbuild/openbsd-x64": "npm:0.25.2" + "@esbuild/sunos-x64": "npm:0.25.2" + "@esbuild/win32-arm64": "npm:0.25.2" + "@esbuild/win32-ia32": "npm:0.25.2" + "@esbuild/win32-x64": "npm:0.25.2" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10/3b16423d33e0c05078b38bfe88e1b2125164a6b8dccfd06db8698766e54406f3299de8a74e3ce818f1d5a9c8bf993aa4d27a5716c39580eb80bd92d52ccf34d3 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10/9d7169e3965b2f9ae46971afa392f6e5a25545ea30f2e2dd99c9b0a95a3f52b5653681a84f5b2911a413ddad2d7a93d3514165072f349b5ffc59c75a899970d6 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10/6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 10/f1d3c622ad992421362294f7acf866aa9409fbad4eb2e8fa230bd33944ce371d32279667b242d8b8907ec2b6ad7353a717f3c0e60e748873a34a7905174bc0eb + languageName: node + linkType: hard + +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10/a65728d5727b71de172c5df323385755a16c0fdab8234dc756c3854cfee343261ddfbb72a809a5660fac8c75d960bb3e21aa898c2d7e9b19bb298482ca58a3af + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.4": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 10/8030029382404942c01d0037079f1b1bc8fed524b5849c237b80549b01e2fc49709e1d0c557fa65ca4498fc9e24cff1475ef7b855121fcc15f9d61f93e282346 + languageName: node + linkType: hard + +"execa@npm:5.0.0": + version: 5.0.0 + resolution: "execa@npm:5.0.0" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.0" + human-signals: "npm:^2.1.0" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.1" + onetime: "npm:^5.1.2" + signal-exit: "npm:^3.0.3" + strip-final-newline: "npm:^2.0.0" + checksum: 10/9cc45d682725f0c5d22b5846c06be4542c1df1775332e2e62c7a6a51613e2b7f54792044266e3dcffec8b24c55ee5837349f93f489f75ce52446e3c08feaa32e + languageName: node + linkType: hard + +"execa@npm:9.5.2": + version: 9.5.2 + resolution: "execa@npm:9.5.2" + dependencies: + "@sindresorhus/merge-streams": "npm:^4.0.0" + cross-spawn: "npm:^7.0.3" + figures: "npm:^6.1.0" + get-stream: "npm:^9.0.0" + human-signals: "npm:^8.0.0" + is-plain-obj: "npm:^4.1.0" + is-stream: "npm:^4.0.1" + npm-run-path: "npm:^6.0.0" + pretty-ms: "npm:^9.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^4.0.0" + yoctocolors: "npm:^2.0.0" + checksum: 10/652fa492e7e1052becba12275aafd1c3d249967a4400f798877aa6c21fafcd8182ee3ce09a54f0379785635f32a4adeef77b2edb83d7e8a55b06819ed102ff2a + languageName: node + linkType: hard + +"exit-hook@npm:2.2.1": + version: 2.2.1 + resolution: "exit-hook@npm:2.2.1" + checksum: 10/75835919e0aca624daa8d114c0014ae84506c4b79ac5806748cc7a86d1610a864ee974be58eec823c7757e5e6b07a5e332647e20ef84f6cc3dc3385c953c78c9 + languageName: node + linkType: hard + +"expect-type@npm:^1.2.0": + version: 1.2.1 + resolution: "expect-type@npm:1.2.1" + checksum: 10/d121d90f4f3f705ca0b656e36f28c0ba91483d0cddf2876e64e23c3dea2f2d5853e9c0c9a4e90eb4b3e4663bf09c2c02e9729c339dcd308c70b2107188e6b286 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.2 + resolution: "exponential-backoff@npm:3.1.2" + checksum: 10/ca2f01f1aa4dafd3f3917bd531ab5be08c6f5f4b2389d2e974f903de3cbeb50b9633374353516b6afd70905775e33aba11afab1232d3acf0aa2963b98a611c51 + languageName: node + linkType: hard + +"exsolve@npm:^1.0.4": + version: 1.0.4 + resolution: "exsolve@npm:1.0.4" + checksum: 10/1cef4fee4c1ec2a2d316731e7df856cd835791c0e18a2ef74a39921e4e09653ddee3be5d6a589f92d81b0e7b776d96100459780a7727715021c189aa9ceed920 + languageName: node + linkType: hard + +"external-editor@npm:^3.0.3": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: "npm:^0.7.0" + iconv-lite: "npm:^0.4.24" + tmp: "npm:^0.0.33" + checksum: 10/776dff1d64a1d28f77ff93e9e75421a81c062983fd1544279d0a32f563c0b18c52abbb211f31262e2827e48edef5c9dc8f960d06dd2d42d1654443b88568056b + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10/dcc6432b269762dd47381d8b8358bf964d8f4f60286ac6aa41c01ade70bda459ff2001b516690b96d5365f68a49242966112b5d5cc9cd82395fa8f9d017c90ad + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.19.1 + resolution: "fastq@npm:1.19.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10/75679dc226316341c4f2a6b618571f51eac96779906faecd8921b984e844d6ae42fabb2df69b1071327d398d5716693ea9c9c8941f64ac9e89ec2032ce59d730 + languageName: node + linkType: hard + +"fdir@npm:^6.4.3": + version: 6.4.3 + resolution: "fdir@npm:6.4.3" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10/8e6d20f4590dc168de1374a9cadaa37e20ca6e0b822aa247c230e7ea1d9e9674a68cd816146435e4ecc98f9285091462ab7e5e56eebc9510931a1794e4db68b2 + languageName: node + linkType: hard + +"fflate@npm:^0.8.2": + version: 0.8.2 + resolution: "fflate@npm:0.8.2" + checksum: 10/2bd26ba6d235d428de793c6a0cd1aaa96a06269ebd4e21b46c8fd1bd136abc631acf27e188d47c3936db090bf3e1ede11d15ce9eae9bffdc4bfe1b9dc66ca9cb + languageName: node + linkType: hard + +"figures@npm:3.2.0, figures@npm:^3.0.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10/a3bf94e001be51d3770500789157f067218d4bc681a65e1f69d482de15120bcac822dceb1a7b3803f32e4e3a61a46df44f7f2c8ba95d6375e7491502e0dd3d97 + languageName: node + linkType: hard + +"figures@npm:^6.1.0": + version: 6.1.0 + resolution: "figures@npm:6.1.0" + dependencies: + is-unicode-supported: "npm:^2.0.0" + checksum: 10/9822d13630bee8e6a9f2da866713adf13854b07e0bfde042defa8bba32d47a1c0b2afa627ce73837c674cf9a5e3edce7e879ea72cb9ea7960b2390432d8e1167 + languageName: node + linkType: hard + +"filelist@npm:^1.0.4": + version: 1.0.4 + resolution: "filelist@npm:1.0.4" + dependencies: + minimatch: "npm:^5.0.1" + checksum: 10/4b436fa944b1508b95cffdfc8176ae6947b92825483639ef1b9a89b27d82f3f8aa22b21eed471993f92709b431670d4e015b39c087d435a61e1bb04564cf51de + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10/a7095cb39e5bc32fada2aa7c7249d3f6b01bd1ce461a61b0adabacccabd9198500c6fb1f68a7c851a657e273fce2233ba869638897f3d7ed2e87a2d89b4436ea + languageName: node + linkType: hard + +"find-up@npm:^2.0.0": + version: 2.1.0 + resolution: "find-up@npm:2.1.0" + dependencies: + locate-path: "npm:^2.0.0" + checksum: 10/43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd + languageName: node + linkType: hard + +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10/4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 10/72479e651c15eab53e25ce04c31bab18cfaac0556505cac19221dbbe85bbb9686bc76e4d397e89e5bf516ce667dcf818f8b07e585568edba55abc2bf1f698fb5 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.0, follow-redirects@npm:^1.15.6": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10/e3ab42d1097e90d28b913903841e6779eb969b62a64706a3eb983e894a5db000fbd89296f45f08885a0e54cd558ef62e81be1165da9be25a6c44920da10f424c + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" + dependencies: + cross-spawn: "npm:^7.0.6" + signal-exit: "npm:^4.0.1" + checksum: 10/427b33f997a98073c0424e5c07169264a62cda806d8d2ded159b5b903fdfc8f0a1457e06b5fc35506497acb3f1e353f025edee796300209ac6231e80edece835 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0, form-data@npm:^4.0.1": + version: 4.0.2 + resolution: "form-data@npm:4.0.2" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + mime-types: "npm:^2.1.12" + checksum: 10/82c65b426af4a40090e517a1bc9057f76970b4c6043e37aa49859c447d88553e77d4cc5626395079a53d2b0889ba5f2a49f3900db3ad3f3f1bf76613532572fb + languageName: node + linkType: hard + +"front-matter@npm:^4.0.2": + version: 4.0.2 + resolution: "front-matter@npm:4.0.2" + dependencies: + js-yaml: "npm:^3.13.1" + checksum: 10/8897a831a82c5d35413b02b806ed421e793068ad8bf75e864163ec07b7f0cfd87e2fcce0893e8ceccc8f6c63a46e953a6c01208e573627626867a8b86cf6abb9 + languageName: node + linkType: hard + +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 10/18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d + languageName: node + linkType: hard + +"fs-extra@npm:^11.2.0": + version: 11.3.0 + resolution: "fs-extra@npm:11.3.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10/c9fe7b23dded1efe7bbae528d685c3206477e20cc60e9aaceb3f024f9b9ff2ee1f62413c161cb88546cc564009ab516dec99e9781ba782d869bb37e4fe04a97f + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10/03191781e94bc9a54bd376d3146f90fe8e082627c502185dbf7b9b3032f66b0b142c1115f3b2cc5936575fc1b44845ce903dd4c21bec2a8d69f3bd56f9cee9ec + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10/af143246cf6884fe26fa281621d45cfe111d34b30535a475bfa38dafe343dadb466c047a924ffc7d6b7b18265df4110224ce3803806dbb07173bf2087b648d7f + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10/e703107c28e362d8d7b910bbcbfd371e640a3bb45ae157a362b5952c0030c0b6d4981140ec319b347bce7adc025dd7813da1ff908a945ac214d64f5402a51b96 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10/4c1ade961ded57cdbfbb5cac5106ec17bc8bccd62e16343c569a0ceeca83b9dfef87550b4dc5cbb89642da412b20c5071f304c8c464b80415446e8e155a038c0 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10/185e20d20f10c8d661d59aac0f3b63b31132d492e1b11fcc2a93cb2c47257ebaee7407c38513efd2b35cafdf972d9beb2ea4593c1e0f3bf8f2744836928d7454 + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10/b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0": + version: 1.3.0 + resolution: "get-intrinsic@npm:1.3.0" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10/6e9dd920ff054147b6f44cb98104330e87caafae051b6d37b13384a45ba15e71af33c3baeac7cb630a0aaa23142718dcf25b45cfdd86c184c5dcb4e56d953a10 + languageName: node + linkType: hard + +"get-pkg-repo@npm:^4.2.1": + version: 4.2.1 + resolution: "get-pkg-repo@npm:4.2.1" + dependencies: + "@hutson/parse-repository-url": "npm:^3.0.0" + hosted-git-info: "npm:^4.0.0" + through2: "npm:^2.0.0" + yargs: "npm:^16.2.0" + bin: + get-pkg-repo: src/cli.js + checksum: 10/033225cf7cdf3f61885f45c492975f412268cf9f3ec68cc42df9af1bec54cf0b0c5ddb7391a6dc973361e7e10df9d432cca0050892ba8856bc50413e0741804f + languageName: node + linkType: hard + +"get-port@npm:5.1.1": + version: 5.1.1 + resolution: "get-port@npm:5.1.1" + checksum: 10/0162663ffe5c09e748cd79d97b74cd70e5a5c84b760a475ce5767b357fb2a57cb821cee412d646aa8a156ed39b78aab88974eddaa9e5ee926173c036c0713787 + languageName: node + linkType: hard + +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10/4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b + languageName: node + linkType: hard + +"get-source@npm:^2.0.12": + version: 2.0.12 + resolution: "get-source@npm:2.0.12" + dependencies: + data-uri-to-buffer: "npm:^2.0.0" + source-map: "npm:^0.6.1" + checksum: 10/6ba35ae0755046199b57d7fe254d50c6d7550d3b150e065a3607e3da8c55c617302f4c7cc3712252c7810954a04e2e56467ad02a0798c0841a5e980064bd3048 + languageName: node + linkType: hard + +"get-stream@npm:6.0.0": + version: 6.0.0 + resolution: "get-stream@npm:6.0.0" + checksum: 10/a8bf40227191743149ab5d5d05f9577cb95768b60456553319296ad4e8566aa9cd3611b5f0f3168697f135233b24e47c761b3b225db6f79fb86326d11a3a0c2c + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: 10/781266d29725f35c59f1d214aedc92b0ae855800a980800e2923b3fbc4e56b3cb6e462c42e09a1cf1a00c64e056a78fa407cbe06c7c92b7e5cd49b4b85c2a497 + languageName: node + linkType: hard + +"get-stream@npm:^9.0.0": + version: 9.0.1 + resolution: "get-stream@npm:9.0.1" + dependencies: + "@sec-ant/readable-stream": "npm:^0.4.1" + is-stream: "npm:^4.0.1" + checksum: 10/ce56e6db6bcd29ca9027b0546af035c3e93dcd154ca456b54c298901eb0e5b2ce799c5d727341a100c99e14c523f267f1205f46f153f7b75b1f4da6d98a21c5e + languageName: node + linkType: hard + +"git-raw-commits@npm:^3.0.0": + version: 3.0.0 + resolution: "git-raw-commits@npm:3.0.0" + dependencies: + dargs: "npm:^7.0.0" + meow: "npm:^8.1.2" + split2: "npm:^3.2.2" + bin: + git-raw-commits: cli.js + checksum: 10/198892f307829d22fc8ec1c9b4a63876a1fde847763857bb74bd1b04c6f6bc0d7464340c25d0f34fd0fb395759363aa1f8ce324357027320d80523bf234676ab + languageName: node + linkType: hard + +"git-remote-origin-url@npm:^2.0.0": + version: 2.0.0 + resolution: "git-remote-origin-url@npm:2.0.0" + dependencies: + gitconfiglocal: "npm:^1.0.0" + pify: "npm:^2.3.0" + checksum: 10/85263a09c044b5f4fe2acc45cbb3c5331ab2bd4484bb53dfe7f3dd593a4bf90a9786a2e00b9884524331f50b3da18e8c924f01c2944087fc7f342282c4437b73 + languageName: node + linkType: hard + +"git-semver-tags@npm:^5.0.0": + version: 5.0.1 + resolution: "git-semver-tags@npm:5.0.1" + dependencies: + meow: "npm:^8.1.2" + semver: "npm:^7.0.0" + bin: + git-semver-tags: cli.js + checksum: 10/056e34a3dd0d91ca737225d360e46a0330c92f1508c38ad93965c3a204e5c7bfe7746f1f7e7d6b456bd61245c770fd0755148823bf852eed71099d094bee6cc2 + languageName: node + linkType: hard + +"git-up@npm:^7.0.0": + version: 7.0.0 + resolution: "git-up@npm:7.0.0" + dependencies: + is-ssh: "npm:^1.4.0" + parse-url: "npm:^8.1.0" + checksum: 10/003ef38424702ac4cbe6d2817ccfb5811251244c955a8011ca40298d12cf1fb6529529f074d5832b5221e193ec05f4742ecf7806e6c4f41a81a2f2cff65d6bf4 + languageName: node + linkType: hard + +"git-url-parse@npm:14.0.0": + version: 14.0.0 + resolution: "git-url-parse@npm:14.0.0" + dependencies: + git-up: "npm:^7.0.0" + checksum: 10/c19430947895676c59ce472d534c88e5d2d9f443e6b6e4deaa8ad9ad921ded6c27a996b219503775c37fbb90f4a3c02a5f106f14b61286386f9e5098dff7d634 + languageName: node + linkType: hard + +"gitconfiglocal@npm:^1.0.0": + version: 1.0.0 + resolution: "gitconfiglocal@npm:1.0.0" + dependencies: + ini: "npm:^1.3.2" + checksum: 10/e6d2764c15bbab6d1d1000d1181bb907f6b3796bb04f63614dba571b18369e0ecb1beaf27ce8da5b24307ef607e3a5f262a67cb9575510b9446aac697d421beb + languageName: node + linkType: hard + +"glob-parent@npm:6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10/c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10/32cd106ce8c0d83731966d31517adb766d02c3812de49c30cfe0675c7c0ae6630c11214c54a5ae67aca882cf738d27fd7768f21aa19118b9245950554be07247 + languageName: node + linkType: hard + +"glob-to-regexp@npm:0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 10/9009529195a955c40d7b9690794aeff5ba665cc38f1519e111c58bb54366fd0c106bde80acf97ba4e533208eb53422c83b136611a54c5fefb1edd8dc267cb62e + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10/698dfe11828b7efd0514cd11e573eaed26b2dff611f0400907281ce3eab0c1e56143ef9b35adc7c77ecc71fba74717b510c7c223d34ca8a98ec81777b293d4ac + languageName: node + linkType: hard + +"glob@npm:^7.1.2": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10/59452a9202c81d4508a43b8af7082ca5c76452b9fcc4a9ab17655822e6ce9b21d4f8fbadabe4fe3faef448294cec249af305e2cd824b7e9aaf689240e5e96a7b + languageName: node + linkType: hard + +"glob@npm:^9.2.0": + version: 9.3.5 + resolution: "glob@npm:9.3.5" + dependencies: + fs.realpath: "npm:^1.0.0" + minimatch: "npm:^8.0.2" + minipass: "npm:^4.2.4" + path-scurry: "npm:^1.6.1" + checksum: 10/e5fa8a58adf53525bca42d82a1fad9e6800032b7e4d372209b80cfdca524dd9a7dbe7d01a92d7ed20d89c572457f12c250092bc8817cb4f1c63efefdf9b658c0 + languageName: node + linkType: hard + +"global@npm:^4.3.0": + version: 4.4.0 + resolution: "global@npm:4.4.0" + dependencies: + min-document: "npm:^2.19.0" + process: "npm:^0.11.10" + checksum: 10/9c057557c8f5a5bcfbeb9378ba4fe2255d04679452be504608dd5f13b54edf79f7be1db1031ea06a4ec6edd3b9f5f17d2d172fb47e6c69dae57fd84b7e72b77f + languageName: node + linkType: hard + +"globby@npm:11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10/288e95e310227bbe037076ea81b7c2598ccbc3122d87abc6dab39e1eec309aa14f0e366a98cdc45237ffcfcbad3db597778c0068217dcb1950fef6249104e1b1 + languageName: node + linkType: hard + +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10/94e296d69f92dc1c0768fcfeecfb3855582ab59a7c75e969d5f96ce50c3d201fd86d5a2857c22565764d5bb8a816c7b1e58f133ec318cd56274da36c5e3fb1a1 + languageName: node + linkType: hard + +"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10/bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 + languageName: node + linkType: hard + +"gzip-size@npm:^6.0.0": + version: 6.0.0 + resolution: "gzip-size@npm:6.0.0" + dependencies: + duplexer: "npm:^0.1.2" + checksum: 10/2df97f359696ad154fc171dcb55bc883fe6e833bca7a65e457b9358f3cb6312405ed70a8da24a77c1baac0639906cd52358dc0ce2ec1a937eaa631b934c94194 + languageName: node + linkType: hard + +"handlebars@npm:^4.7.7": + version: 4.7.8 + resolution: "handlebars@npm:4.7.8" + dependencies: + minimist: "npm:^1.2.5" + neo-async: "npm:^2.6.2" + source-map: "npm:^0.6.1" + uglify-js: "npm:^3.1.4" + wordwrap: "npm:^1.0.0" + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 10/bd528f4dd150adf67f3f857118ef0fa43ff79a153b1d943fa0a770f2599e38b25a7a0dbac1a3611a4ec86970fd2325a81310fb788b5c892308c9f8743bd02e11 + languageName: node + linkType: hard + +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: 10/7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10/261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10/959385c98696ebbca51e7534e0dc723ada325efa3475350951363cce216d27373e0259b63edb599f72eb94d6cde8577b4b2375f080b303947e560f85692834fa + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10/c74c5f5ceee3c8a5b8bc37719840dc3749f5b0306d818974141dda2471a1a2ca6c8e46b9d6ac222c5345df7a901c9b6f350b1e6d62763fec877e26609a401bfe + languageName: node + linkType: hard + +"has-unicode@npm:2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 10/041b4293ad6bf391e21c5d85ed03f412506d6623786b801c4ab39e4e6ca54993f13201bceb544d92963f9e0024e6e7fbf0cb1d84c9d6b31cb9c79c8c990d13d8 + languageName: node + linkType: hard + +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10/7898a9c1788b2862cf0f9c345a6bec77ba4a0c0983c7f19d610c382343d4f98fa260686b225dfb1f88393a66679d2ec58ee310c1d6868c081eda7918f32cc70a + languageName: node + linkType: hard + +"highlight.js@npm:^10.7.1": + version: 10.7.3 + resolution: "highlight.js@npm:10.7.3" + checksum: 10/db8d10a541936b058e221dbde77869664b2b45bca75d660aa98065be2cd29f3924755fbc7348213f17fd931aefb6e6597448ba6fe82afba6d8313747a91983ee + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: 10/96da7d412303704af41c3819207a09ea2cab2de97951db4cf336bb8bce8d8e36b9a6821036ad2e55e67d3be0af8f967a7b57981203fbfb88bc05cd803407b8c3 + languageName: node + linkType: hard + +"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": + version: 4.1.0 + resolution: "hosted-git-info@npm:4.1.0" + dependencies: + lru-cache: "npm:^6.0.0" + checksum: 10/4dc67022b7ecb12829966bd731fb9a5f14d351547aafc6520ef3c8e7211f4f0e69452d24e29eae3d9b17df924d660052e53d8ca321cf3008418fb7e6c7c47d6f + languageName: node + linkType: hard + +"hosted-git-info@npm:^7.0.0, hosted-git-info@npm:^7.0.2": + version: 7.0.2 + resolution: "hosted-git-info@npm:7.0.2" + dependencies: + lru-cache: "npm:^10.0.1" + checksum: 10/8f085df8a4a637d995f357f48b1e3f6fc1f9f92e82b33fb406415b5741834ed431a510a09141071001e8deea2eee43ce72786463e2aa5e5a70db8648c0eedeab + languageName: node + linkType: hard + +"html-encoding-sniffer@npm:^4.0.0": + version: 4.0.0 + resolution: "html-encoding-sniffer@npm:4.0.0" + dependencies: + whatwg-encoding: "npm:^3.1.1" + checksum: 10/e86efd493293a5671b8239bd099d42128433bb3c7b0fdc7819282ef8e118a21f5dead0ad6f358e024a4e5c84f17ebb7a9b36075220fac0a6222b207248bede6f + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10/362d5ed66b12ceb9c0a328fb31200b590ab1b02f4a254a697dc796850cc4385603e75f53ec59f768b2dad3bfa1464bd229f7de278d2899a0e3beffc634b6683f + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.2": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10/d062acfa0cb82beeb558f1043c6ba770ea892b5fb7b28654dbc70ea2aeea55226dd34c02a294f6c1ca179a5aa483c4ea641846821b182edbd9cc5d89b54c6848 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.6": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10/784b628cbd55b25542a9d85033bdfd03d4eda630fb8b3c9477959367f3be95dc476ed2ecbb9836c359c7c698027fc7b45723a302324433590f45d6c1706e8c13 + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: 10/df59be9e0af479036798a881d1f136c4a29e0b518d4abb863afbd11bf30efa3eeb1d0425fc65942dcc05ab3bf40205ea436b0ff389f2cd20b75b8643d539bf86 + languageName: node + linkType: hard + +"human-signals@npm:^8.0.0": + version: 8.0.1 + resolution: "human-signals@npm:8.0.1" + checksum: 10/903389a018b16f330c5e0f6e8b76d592c79552152ea892f249e5290e71c790f5722dc9b740fedd4bdef30566754a69012aaed97a6a528da0d417fad990a6f515 + languageName: node + linkType: hard + +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10/24e3292dd3dadaa81d065c6f8c41b274a47098150d444b96e5f53b4638a9a71482921ea6a91a1f59bb71d9796de25e04afd05919fa64c360347ba65d3766f10f + languageName: node + linkType: hard + +"iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: 10/6d3a2dac6e5d1fb126d25645c25c3a1209f70cceecc68b8ef51ae0da3cdc078c151fade7524a30b12a3094926336831fca09c666ef55b37e2c69638b5d6bd2e3 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10/d9f2557a59036f16c282aaeb107832dc957a93d73397d89bbad4eb1130560560eb695060145e8e6b3b498b15ab95510226649a0b8f52ae06583575419fe10fc4 + languageName: node + linkType: hard + +"ignore-walk@npm:^6.0.4": + version: 6.0.5 + resolution: "ignore-walk@npm:6.0.5" + dependencies: + minimatch: "npm:^9.0.0" + checksum: 10/08757abff4dabca4f9f005f9a6cb6684e0c460a1e08c50319460ac13002de0ba8bbde6ad1f4477fefb264135d6253d1268339c18292f82485fcce576af0539d9 + languageName: node + linkType: hard + +"ignore@npm:^5.0.4, ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10/cceb6a457000f8f6a50e1196429750d782afce5680dd878aa4221bd79972d68b3a55b4b1458fc682be978f4d3c6a249046aa0880637367216444ab7b014cfc98 + languageName: node + linkType: hard + +"import-fresh@npm:^3.3.0": + version: 3.3.1 + resolution: "import-fresh@npm:3.3.1" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10/a06b19461b4879cc654d46f8a6244eb55eb053437afd4cbb6613cad6be203811849ed3e4ea038783092879487299fda24af932b86bdfff67c9055ba3612b8c87 + languageName: node + linkType: hard + +"import-local@npm:3.1.0": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: 10/bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10/2d30b157a91fe1c1d7c6f653cbf263f039be6c5bfa959245a16d4ee191fc0f2af86c08545b6e6beeb041c56b574d2d5b9f95343d378ab49c0f37394d541e7fc8 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10/cd3f5cbc9ca2d624c6a1f53f12e6b341659aba0e2d3254ae2b4464aaea8b4294cdb09616abbc59458f980531f2429784ed6a420d48d245bcad0811980c9efae9 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10/d2ebd65441a38c8336c223d1b80b921b9fa737e37ea466fd7e253cb000c64ae1f17fa59e68130ef5bda92cfd8d36b83d37dab0eb0a4558bcfec8e8cdfd2dcb67 + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10/cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 + languageName: node + linkType: hard + +"ini@npm:^1.3.2, ini@npm:^1.3.8": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: 10/314ae176e8d4deb3def56106da8002b462221c174ddb7ce0c49ee72c8cd1f9044f7b10cc555a7d8850982c3b9ca96fc212122749f5234bc2b6fb05fb942ed566 + languageName: node + linkType: hard + +"ini@npm:^4.1.3": + version: 4.1.3 + resolution: "ini@npm:4.1.3" + checksum: 10/f536b414d1442e5b233429e2b56efcdb354109b2d65ddd489e5939d8f0f5ad23c88aa2b19c92987249d0dd63ba8192e9aeb1a02b0459549c5a9ff31acd729a5d + languageName: node + linkType: hard + +"init-package-json@npm:6.0.3": + version: 6.0.3 + resolution: "init-package-json@npm:6.0.3" + dependencies: + "@npmcli/package-json": "npm:^5.0.0" + npm-package-arg: "npm:^11.0.0" + promzard: "npm:^1.0.0" + read: "npm:^3.0.1" + semver: "npm:^7.3.5" + validate-npm-package-license: "npm:^3.0.4" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10/1274365e2c9e693395af07edc03692284b708fc101d7058cee956c02dca525f69c09748ac1c3de261f81ae42de301300bd62042b58943aa0088cb2c52e1e2e4f + languageName: node + linkType: hard + +"inquirer@npm:^8.2.4": + version: 8.2.6 + resolution: "inquirer@npm:8.2.6" + dependencies: + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.1.1" + cli-cursor: "npm:^3.1.0" + cli-width: "npm:^3.0.0" + external-editor: "npm:^3.0.3" + figures: "npm:^3.0.0" + lodash: "npm:^4.17.21" + mute-stream: "npm:0.0.8" + ora: "npm:^5.4.1" + run-async: "npm:^2.4.0" + rxjs: "npm:^7.5.5" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + through: "npm:^2.3.6" + wrap-ansi: "npm:^6.0.1" + checksum: 10/f642b9e5a94faaba54f277bdda2af0e0a6b592bd7f88c60e1614b5795b19336c7025e0c2923915d5f494f600a02fe8517413779a794415bb79a9563b061d68ab + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10/1ed81e06721af012306329b31f532b5e24e00cb537be18ddc905a84f19fe8f83a09a1699862bf3a1ec4b9dea93c55a3fa5faf8b5ea380431469df540f38b092c + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: 10/73ced84fa35e59e2c57da2d01e12cd01479f381d7f122ce41dcbb713f09dbfc651315832cd2bf8accba7681a69e4d6f1e03941d94dd10040d415086360e7005e + languageName: node + linkType: hard + +"is-arrayish@npm:^0.3.1": + version: 0.3.2 + resolution: "is-arrayish@npm:0.3.2" + checksum: 10/81a78d518ebd8b834523e25d102684ee0f7e98637136d3bdc93fd09636350fa06f1d8ca997ea28143d4d13cb1b69c0824f082db0ac13e1ab3311c10ffea60ade + languageName: node + linkType: hard + +"is-ci@npm:3.0.1": + version: 3.0.1 + resolution: "is-ci@npm:3.0.1" + dependencies: + ci-info: "npm:^3.2.0" + bin: + is-ci: bin.js + checksum: 10/192c66dc7826d58f803ecae624860dccf1899fc1f3ac5505284c0a5cf5f889046ffeb958fa651e5725d5705c5bcb14f055b79150ea5fcad7456a9569de60260e + languageName: node + linkType: hard + +"is-core-module@npm:^2.16.0, is-core-module@npm:^2.5.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10/452b2c2fb7f889cbbf7e54609ef92cf6c24637c568acc7e63d166812a0fb365ae8a504c333a29add8bdb1686704068caa7f4e4b639b650dde4f00a038b8941fb + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 10/3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10/df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10/44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10/3ed74f2b0cdf4f401f38edb0442ddfde3092d79d7d35c9919c86641efdbcbb32e45aa3c0f70ce5eecc946896cd5a0f26e4188b9f2b881876f7cb6c505b82da11 + languageName: node + linkType: hard + +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: 10/824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 10/93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-node-process@npm:^1.2.0": + version: 1.2.0 + resolution: "is-node-process@npm:1.2.0" + checksum: 10/930765cdc6d81ab8f1bbecbea4a8d35c7c6d88a3ff61f3630e0fc7f22d624d7661c1df05c58547d0eb6a639dfa9304682c8e342c4113a6ed51472b704cee2928 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10/6a6c3383f68afa1e05b286af866017c78f1226d43ac8cb064e115ff9ed85eb33f5c4f7216c96a71e4dfea289ef52c5da3aef5bbfade8ffe47a0465d70c0c8e86 + languageName: node + linkType: hard + +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: 10/c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 + languageName: node + linkType: hard + +"is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 10/0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 + languageName: node + linkType: hard + +"is-plain-obj@npm:^4.1.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 10/6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: "npm:^3.0.1" + checksum: 10/2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + +"is-potential-custom-element-name@npm:^1.0.1": + version: 1.0.1 + resolution: "is-potential-custom-element-name@npm:1.0.1" + checksum: 10/ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab + languageName: node + linkType: hard + +"is-ssh@npm:^1.4.0": + version: 1.4.1 + resolution: "is-ssh@npm:1.4.1" + dependencies: + protocols: "npm:^2.0.1" + checksum: 10/f60910cd83fa94e9874655a672c3849312c12af83c0fe3dbff9945755fe838a73985d8f94e32ebf5626ba4148ee10eef51b7240b0218dbb6e9a43a06899b0529 + languageName: node + linkType: hard + +"is-stream@npm:2.0.0": + version: 2.0.0 + resolution: "is-stream@npm:2.0.0" + checksum: 10/4dc47738e26bc4f1b3be9070b6b9e39631144f204fc6f87db56961220add87c10a999ba26cf81699f9ef9610426f69cb08a4713feff8deb7d8cadac907826935 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 10/b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"is-stream@npm:^4.0.1": + version: 4.0.1 + resolution: "is-stream@npm:4.0.1" + checksum: 10/cbea3f1fc271b21ceb228819d0c12a0965a02b57f39423925f99530b4eb86935235f258f06310b67cd02b2d10b49e9a0998f5ececf110ab7d3760bae4055ad23 + languageName: node + linkType: hard + +"is-text-path@npm:^1.0.1": + version: 1.0.1 + resolution: "is-text-path@npm:1.0.1" + dependencies: + text-extensions: "npm:^1.0.0" + checksum: 10/fb5d78752c22b3f73a7c9540768f765ffcfa38c9e421e2b9af869565307fa1ae5e3d3a2ba016a43549742856846566d327da406e94a5846ec838a288b1704fd2 + languageName: node + linkType: hard + +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: 10/a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 + languageName: node + linkType: hard + +"is-unicode-supported@npm:^2.0.0": + version: 2.1.0 + resolution: "is-unicode-supported@npm:2.1.0" + checksum: 10/f254e3da6b0ab1a57a94f7273a7798dd35d1d45b227759f600d0fa9d5649f9c07fa8d3c8a6360b0e376adf916d151ec24fc9a50c5295c58bae7ca54a76a063f9 + languageName: node + linkType: hard + +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: "npm:^2.0.0" + checksum: 10/20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: 10/f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10/7c9f715c03aff08f35e98b1fadae1b9267b38f0615d501824f9743f3aab99ef10e303ce7db3f186763a0b70a19de5791ebfc854ff884d5a8c4d92211f642ec92 + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10/7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: 10/db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10/96f8786eaab98e4bf5b2a5d6d9588ea46c4d06bbc4f2eb861fdd7b6b182b16f71d8a70e79820f335d52653b16d4843b29dd9cdcf38ae80406756db9199497cf3 + languageName: node + linkType: hard + +"jake@npm:^10.8.5": + version: 10.9.2 + resolution: "jake@npm:10.9.2" + dependencies: + async: "npm:^3.2.3" + chalk: "npm:^4.0.2" + filelist: "npm:^1.0.4" + minimatch: "npm:^3.1.2" + bin: + jake: bin/cli.js + checksum: 10/3be324708f99f031e0aec49ef8fd872eb4583cbe8a29a0c875f554f6ac638ee4ea5aa759bb63723fd54f77ca6d7db851eaa78353301734ed3700db9cb109a0cd + languageName: node + linkType: hard + +"jest-diff@npm:>=29.4.3 < 30, jest-diff@npm:^29.4.1": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + diff-sequences: "npm:^29.6.3" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10/6f3a7eb9cd9de5ea9e5aa94aed535631fa6f80221832952839b3cb59dd419b91c20b73887deb0b62230d06d02d6b6cf34ebb810b88d904bb4fe1e2e4f0905c98 + languageName: node + linkType: hard + +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 10/88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 + languageName: node + linkType: hard + +"joycon@npm:^3.1.1": + version: 3.1.1 + resolution: "joycon@npm:3.1.1" + checksum: 10/4b36e3479144ec196425f46b3618f8a96ce7e1b658f091a309cd4906215f5b7a402d7df331a3e0a09681381a658d0c5f039cb3cf6907e0a1e17ed847f5d37775 + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10/af37d0d913fb56aec6dc0074c163cc71cd23c0b8aad5c2350747b6721d37ba118af35abdd8b33c47ec2800de07dedb16a527ca9c530ee004093e04958bd0cbf2 + languageName: node + linkType: hard + +"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10/c138a34a3fd0d08ebaf71273ad4465569a483b8a639e0b118ff65698d257c2791d3199e3f303631f2cb98213fa7b5f5d6a4621fd0fff819421b990d30d967140 + languageName: node + linkType: hard + +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 10/9e22d80b4d0105b9899135365f746d47466ed53ef4223c529b3c0f7a39907743fdbd3c4379f94f1106f02755b5e90b2faaf84801a891135544e1ea475d1a1379 + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10/bebe7ae829bbd586ce8cbe83501dd8cb8c282c8902a8aeeed0a073a89dc37e8103b1244f3c6acd60278bcbfe12d93a3f83c9ac396868a3b3bbc3c5e5e3b648ef + languageName: node + linkType: hard + +"jsdom@npm:26.0.0, jsdom@npm:^26.0.0": + version: 26.0.0 + resolution: "jsdom@npm:26.0.0" + dependencies: + cssstyle: "npm:^4.2.1" + data-urls: "npm:^5.0.0" + decimal.js: "npm:^10.4.3" + form-data: "npm:^4.0.1" + html-encoding-sniffer: "npm:^4.0.0" + http-proxy-agent: "npm:^7.0.2" + https-proxy-agent: "npm:^7.0.6" + is-potential-custom-element-name: "npm:^1.0.1" + nwsapi: "npm:^2.2.16" + parse5: "npm:^7.2.1" + rrweb-cssom: "npm:^0.8.0" + saxes: "npm:^6.0.0" + symbol-tree: "npm:^3.2.4" + tough-cookie: "npm:^5.0.0" + w3c-xmlserializer: "npm:^5.0.0" + webidl-conversions: "npm:^7.0.0" + whatwg-encoding: "npm:^3.1.1" + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.1.0" + ws: "npm:^8.18.0" + xml-name-validator: "npm:^5.0.0" + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 10/8c230ee4657240bbbca6b4ebb484be53fc6a777a22a3357c80c5537222813666e3e1f54740bc13e769c461d9598ba7dac402c245949c6cef7ef7014ce6f36f01 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: 10/5553232045359b767b0f2039a6777fede1a8d7dca1a0ffb1f9ef73a7519489ae7f566b2e040f2b4c38edb8e35e37ae07af7f0a52420902f869ee0dbf5dc6c784 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 10/5f3a99009ed5f2a5a67d06e2f298cc97bc86d462034173308156f15b43a6e850be8511dc204b9b94566305da2947f7d90289657237d210351a39059ff9d666cf + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^3.0.0, json-parse-even-better-errors@npm:^3.0.2": + version: 3.0.2 + resolution: "json-parse-even-better-errors@npm:3.0.2" + checksum: 10/6f04ea6c9ccb783630a59297959247e921cc90b917b8351197ca7fd058fccc7079268fd9362be21ba876fc26aa5039369dd0a2280aae49aae425784794a94927 + languageName: node + linkType: hard + +"json-stringify-nice@npm:^1.1.4": + version: 1.1.4 + resolution: "json-stringify-nice@npm:1.1.4" + checksum: 10/0e02cae900a1f24df64613dd10a54b354e4ba2b17822f0d7f0d2708182e71a8bbbfac107d54d3ae8fa3d8bab3556e20cef84f193ace92c9df7bc30872ec2926e + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 10/59169a081e4eeb6f9559ae1f938f656191c000e0512aa6df9f3c8b2437a4ab1823819c6b9fd1818a4e39593ccfd72e9a051fdd3e2d1e340ed913679e888ded8c + languageName: node + linkType: hard + +"json5@npm:^2.2.2": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 10/1db67b853ff0de3534085d630691d3247de53a2ed1390ba0ddff681ea43e9b3e30ecbdb65c5e9aab49435e44059c23dbd6fee8ee619419ba37465bb0dd7135da + languageName: node + linkType: hard + +"jsonc-parser@npm:3.2.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 10/bd68b902e5f9394f01da97921f49c5084b2dc03a0c5b4fdb2a429f8d6f292686c1bf87badaeb0a8148d024192a88f5ad2e57b2918ba43fe25cf15f3371db64d4 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10/03014769e7dc77d4cf05fa0b534907270b60890085dd5e4d60a382ff09328580651da0b8b4cdf44d91e4c8ae64d91791d965f05707beff000ed494a38b6fec85 + languageName: node + linkType: hard + +"jsonpack@npm:^1.1.5": + version: 1.1.5 + resolution: "jsonpack@npm:1.1.5" + checksum: 10/1b676c36ae2f1475cbbb46c67a0606029bd08104d65dd4575ce1b38da175abb28b5b2801fdac6cbb22a8f0224b4f97bd5734eb2065dfbe17de28ced89be17ce8 + languageName: node + linkType: hard + +"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": + version: 1.3.1 + resolution: "jsonparse@npm:1.3.1" + checksum: 10/24531e956f0f19d79e22c157cebd81b37af3486ae22f9bc1028f8c2a4d1b70df48b168ff86f8568d9c2248182de9b6da9f50f685d5e4b9d1d2d339d2a29d15bc + languageName: node + linkType: hard + +"just-diff-apply@npm:^5.2.0": + version: 5.5.0 + resolution: "just-diff-apply@npm:5.5.0" + checksum: 10/5515c436c89e9ef934f1ea2aac447588c38dd017247ed85254537b005706e64321ca7a9c246fe7106338da1ef3a693f8550ebf11759c854713e9ccffb788a43b + languageName: node + linkType: hard + +"just-diff@npm:^6.0.0": + version: 6.0.2 + resolution: "just-diff@npm:6.0.2" + checksum: 10/4c6b14d6be2a3391b020ea2b3d1a0acf2f4c60fcb16681c7f6f76d4c0f1841fae5b00c1a2e719980992e46320e4b6c55a4713683cb1873dd41a2621f08c9f8e8 + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 10/5873d303fb36aad875b7538798867da2ae5c9e328d67194b0162a3659a627d22f742fc9c4ae95cd1704132a24b00cae5041fc00c0f6ef937dc17080dc4dbb962 + languageName: node + linkType: hard + +"lerna@npm:8.2.1": + version: 8.2.1 + resolution: "lerna@npm:8.2.1" + dependencies: + "@lerna/create": "npm:8.2.1" + "@npmcli/arborist": "npm:7.5.4" + "@npmcli/package-json": "npm:5.2.0" + "@npmcli/run-script": "npm:8.1.0" + "@nx/devkit": "npm:>=17.1.2 < 21" + "@octokit/plugin-enterprise-rest": "npm:6.0.1" + "@octokit/rest": "npm:20.1.2" + aproba: "npm:2.0.0" + byte-size: "npm:8.1.1" + chalk: "npm:4.1.0" + clone-deep: "npm:4.0.1" + cmd-shim: "npm:6.0.3" + color-support: "npm:1.1.3" + columnify: "npm:1.6.0" + console-control-strings: "npm:^1.1.0" + conventional-changelog-angular: "npm:7.0.0" + conventional-changelog-core: "npm:5.0.1" + conventional-recommended-bump: "npm:7.0.1" + cosmiconfig: "npm:9.0.0" + dedent: "npm:1.5.3" + envinfo: "npm:7.13.0" + execa: "npm:5.0.0" + fs-extra: "npm:^11.2.0" + get-port: "npm:5.1.1" + get-stream: "npm:6.0.0" + git-url-parse: "npm:14.0.0" + glob-parent: "npm:6.0.2" + globby: "npm:11.1.0" + graceful-fs: "npm:4.2.11" + has-unicode: "npm:2.0.1" + import-local: "npm:3.1.0" + ini: "npm:^1.3.8" + init-package-json: "npm:6.0.3" + inquirer: "npm:^8.2.4" + is-ci: "npm:3.0.1" + is-stream: "npm:2.0.0" + jest-diff: "npm:>=29.4.3 < 30" + js-yaml: "npm:4.1.0" + libnpmaccess: "npm:8.0.6" + libnpmpublish: "npm:9.0.9" + load-json-file: "npm:6.2.0" + lodash: "npm:^4.17.21" + make-dir: "npm:4.0.0" + minimatch: "npm:3.0.5" + multimatch: "npm:5.0.0" + node-fetch: "npm:2.6.7" + npm-package-arg: "npm:11.0.2" + npm-packlist: "npm:8.0.2" + npm-registry-fetch: "npm:^17.1.0" + nx: "npm:>=17.1.2 < 21" + p-map: "npm:4.0.0" + p-map-series: "npm:2.1.0" + p-pipe: "npm:3.1.0" + p-queue: "npm:6.6.2" + p-reduce: "npm:2.1.0" + p-waterfall: "npm:2.1.1" + pacote: "npm:^18.0.6" + pify: "npm:5.0.0" + read-cmd-shim: "npm:4.0.0" + resolve-from: "npm:5.0.0" + rimraf: "npm:^4.4.1" + semver: "npm:^7.3.8" + set-blocking: "npm:^2.0.0" + signal-exit: "npm:3.0.7" + slash: "npm:3.0.0" + ssri: "npm:^10.0.6" + string-width: "npm:^4.2.3" + strong-log-transformer: "npm:2.1.0" + tar: "npm:6.2.1" + temp-dir: "npm:1.0.0" + typescript: "npm:>=3 < 6" + upath: "npm:2.0.1" + uuid: "npm:^10.0.0" + validate-npm-package-license: "npm:3.0.4" + validate-npm-package-name: "npm:5.0.1" + wide-align: "npm:1.1.5" + write-file-atomic: "npm:5.0.1" + write-pkg: "npm:4.0.0" + yargs: "npm:17.7.2" + yargs-parser: "npm:21.1.1" + bin: + lerna: dist/cli.js + checksum: 10/ebf9fd1af102a8b7e89dcf05e32f92dfa2ce13e77c9788a86eb4828e6a5269e7bf85edf1bcdb4e4ea383f42d872880ad61fc26d304276715b3757fb54cd60d94 + languageName: node + linkType: hard + +"libnpmaccess@npm:8.0.6": + version: 8.0.6 + resolution: "libnpmaccess@npm:8.0.6" + dependencies: + npm-package-arg: "npm:^11.0.2" + npm-registry-fetch: "npm:^17.0.1" + checksum: 10/62fa6a476321268ebd379f35782d9ead8993964bd9dfc8afbd201921d9037b7bc9d956f8b2717f1247e44ab33cb7de45b556ded66144f4b3038a828299cb260d + languageName: node + linkType: hard + +"libnpmpublish@npm:9.0.9": + version: 9.0.9 + resolution: "libnpmpublish@npm:9.0.9" + dependencies: + ci-info: "npm:^4.0.0" + normalize-package-data: "npm:^6.0.1" + npm-package-arg: "npm:^11.0.2" + npm-registry-fetch: "npm:^17.0.1" + proc-log: "npm:^4.2.0" + semver: "npm:^7.3.7" + sigstore: "npm:^2.2.0" + ssri: "npm:^10.0.6" + checksum: 10/ea1064a727938abefe345d5af1261db8bdc1e71aedabf6945187c2b3a6ef1a4c9db69747ad3ffd4ecd61ea16866890e0da1a4defcbed64e555e7dcae49e55a98 + languageName: node + linkType: hard + +"lilconfig@npm:^3.1.1": + version: 3.1.3 + resolution: "lilconfig@npm:3.1.3" + checksum: 10/b932ce1af94985f0efbe8896e57b1f814a48c8dbd7fc0ef8469785c6303ed29d0090af3ccad7e36b626bfca3a4dc56cc262697e9a8dd867623cf09a39d54e4c3 + languageName: node + linkType: hard + +"lines-and-columns@npm:2.0.3": + version: 2.0.3 + resolution: "lines-and-columns@npm:2.0.3" + checksum: 10/b5bb0d6ee2f82ae834ceddc9251af2060c30db476673e9c817c34c00bed58e0c5d90a6866b64afe7bdcb2c5eb1b418a5b1ee631d2592dc8ff381540901fa4da6 + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 10/0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"load-json-file@npm:6.2.0": + version: 6.2.0 + resolution: "load-json-file@npm:6.2.0" + dependencies: + graceful-fs: "npm:^4.1.15" + parse-json: "npm:^5.0.0" + strip-bom: "npm:^4.0.0" + type-fest: "npm:^0.6.0" + checksum: 10/4429e430ebb99375fc7cd936348e4f7ba729486080ced4272091c1e386a7f5f738ea3337d8ffd4b01c2f5bc3ddde92f2c780045b66838fe98bdb79f901884643 + languageName: node + linkType: hard + +"load-json-file@npm:^4.0.0": + version: 4.0.0 + resolution: "load-json-file@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.2" + parse-json: "npm:^4.0.0" + pify: "npm:^3.0.0" + strip-bom: "npm:^3.0.0" + checksum: 10/8f5d6d93ba64a9620445ee9bde4d98b1eac32cf6c8c2d20d44abfa41a6945e7969456ab5f1ca2fb06ee32e206c9769a20eec7002fe290de462e8c884b6b8b356 + languageName: node + linkType: hard + +"load-tsconfig@npm:^0.2.3": + version: 0.2.5 + resolution: "load-tsconfig@npm:0.2.5" + checksum: 10/b3176f6f0c86dbdbbc7e337440a803b0b4407c55e2e1cfc53bd3db68e0211448f36428a6075ecf5e286db5d1bf791da756fc0ac4d2447717140fb6a5218ecfb4 + languageName: node + linkType: hard + +"locate-path@npm:^2.0.0": + version: 2.0.0 + resolution: "locate-path@npm:2.0.0" + dependencies: + p-locate: "npm:^2.0.0" + path-exists: "npm:^3.0.0" + checksum: 10/02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10/83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + languageName: node + linkType: hard + +"lodash.ismatch@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.ismatch@npm:4.4.0" + checksum: 10/946a7176cdf4048f7b624378defda00dc0d01a2dad9933c54dad11fbecc253716df4210fbbfcd7d042e6fdb7603463cfe48e0ef576e20bf60d43f7deb1a2fe04 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.1": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10/d0ea2dd0097e6201be083865d50c3fb54fbfbdb247d9cc5950e086c991f448b7ab0cdab0d57eacccb43473d3f2acd21e134db39f22dac2d6c9ba6bf26978e3d6 + languageName: node + linkType: hard + +"lodash.sortby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.sortby@npm:4.7.0" + checksum: 10/38df19ae28608af2c50ac342fc1f414508309d53e1d58ed9adfb2c3cd17c3af290058c0a0478028d932c5404df3d53349d19fa364ef6bed6145a6bc21320399e + languageName: node + linkType: hard + +"lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 10/c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532 + languageName: node + linkType: hard + +"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: "npm:^4.1.0" + is-unicode-supported: "npm:^0.1.0" + checksum: 10/fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 + languageName: node + linkType: hard + +"loupe@npm:^3.1.0, loupe@npm:^3.1.3": + version: 3.1.3 + resolution: "loupe@npm:3.1.3" + checksum: 10/9e98c34daf0eba48ccc603595e51f2ae002110982d84879cf78c51de2c632f0c571dfe82ce4210af60c32203d06b443465c269bda925076fe6d9b612cc65c321 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.2.2, lru-cache@npm:^10.4.3": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10/e6e90267360476720fa8e83cc168aa2bf0311f3f2eea20a6ba78b90a885ae72071d9db132f40fda4129c803e7dcec3a6b6a6fbb44ca90b081630b810b5d6a41a + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10/fc1fe2ee205f7c8855fa0f34c1ab0bcf14b6229e35579ec1fd1079f31d6fc8ef8eb6fd17f2f4d99788d7e339f50e047555551ebd5e434dda503696e7c6591825 + languageName: node + linkType: hard + +"magic-string@npm:^0.30.17": + version: 0.30.17 + resolution: "magic-string@npm:0.30.17" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10/2f71af2b0afd78c2e9012a29b066d2c8ba45a9cd0c8070f7fd72de982fb1c403b4e3afdb1dae00691d56885ede66b772ef6bedf765e02e3a7066208fe2fec4aa + languageName: node + linkType: hard + +"make-dir@npm:4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: 10/bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a + languageName: node + linkType: hard + +"make-dir@npm:^2.1.0": + version: 2.1.0 + resolution: "make-dir@npm:2.1.0" + dependencies: + pify: "npm:^4.0.1" + semver: "npm:^5.6.0" + checksum: 10/043548886bfaf1820323c6a2997e6d2fa51ccc2586ac14e6f14634f7458b4db2daf15f8c310e2a0abd3e0cddc64df1890d8fc7263033602c47bb12cbfcf86aab + languageName: node + linkType: hard + +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: 10/b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0, make-fetch-happen@npm:^13.0.1": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10/11bae5ad6ac59b654dbd854f30782f9de052186c429dfce308eda42374528185a100ee40ac9ffdc36a2b6c821ecaba43913e4730a12f06f15e895ea9cb23fa59 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^12.0.0" + checksum: 10/fce0385840b6d86b735053dfe941edc2dd6468fda80fe74da1eeff10cbd82a75760f406194f2bc2fa85b99545b2bc1f84c08ddf994b21830775ba2d1a87e8bdf + languageName: node + linkType: hard + +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: 10/f8e6fc7f6137329c376c4524f6d25b3c243c17019bc8f621d15a2dcb855919e482a9298a78ae58b00dbd0e76b640bf6533aa343a9e993cfc16e0346a2507e7f8 + languageName: node + linkType: hard + +"map-obj@npm:^4.0.0": + version: 4.3.0 + resolution: "map-obj@npm:4.3.0" + checksum: 10/fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e + languageName: node + linkType: hard + +"marked-terminal@npm:^7.1.0": + version: 7.3.0 + resolution: "marked-terminal@npm:7.3.0" + dependencies: + ansi-escapes: "npm:^7.0.0" + ansi-regex: "npm:^6.1.0" + chalk: "npm:^5.4.1" + cli-highlight: "npm:^2.1.11" + cli-table3: "npm:^0.6.5" + node-emoji: "npm:^2.2.0" + supports-hyperlinks: "npm:^3.1.0" + peerDependencies: + marked: ">=1 <16" + checksum: 10/1dfdfe752a4ebe6aec8de4a51180612a5f29982026b104a86215efb46b82b2a1942531a6bb840163c8d827e3eadc5cf93272e6eb29ec549f72b73b8b2eb97cfe + languageName: node + linkType: hard + +"marked@npm:^9.1.2": + version: 9.1.6 + resolution: "marked@npm:9.1.6" + bin: + marked: bin/marked.js + checksum: 10/29d073500c70b6b53cd35a8d19f5e43df6e2819ddeca8848a31901b87b82ca0ea46a8a831920c656c69c33ad5dce4b75654c4c4ced34a67f4e4e4a31c7620cfe + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10/11df2eda46d092a6035479632e1ec865b8134bdfc4bd9e571a656f4191525404f13a283a515938c3a8de934dbfd9c09674d9da9fa831e6eb7e22b50b197d2edd + languageName: node + linkType: hard + +"meow@npm:^8.1.2": + version: 8.1.2 + resolution: "meow@npm:8.1.2" + dependencies: + "@types/minimist": "npm:^1.2.0" + camelcase-keys: "npm:^6.2.2" + decamelize-keys: "npm:^1.1.0" + hard-rejection: "npm:^2.1.0" + minimist-options: "npm:4.1.0" + normalize-package-data: "npm:^3.0.0" + read-pkg-up: "npm:^7.0.1" + redent: "npm:^3.0.0" + trim-newlines: "npm:^3.0.0" + type-fest: "npm:^0.18.0" + yargs-parser: "npm:^20.2.3" + checksum: 10/d4770f90135c0ef4d0f4fa4f4310a18c07bbbe408221fa79a68fda93944134001ffc24ed605e7668f61e920dd8db30936548e927d2331b0e30699d56247f9873 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10/6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10/7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10/6bf2a01672e7965eb9941d1f02044fad2bd12486b5553dc1116ff24c09a8723157601dc992e74c911d896175918448762df3b3fd0a6b61037dd1a9766ddfbf58 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10/54bb60bf39e6f8689f6622784e668a3d7f8bed6b0d886f5c3c446cb3284be28b30bf707ed05d0fe44a036f8469976b2629bbea182684977b084de9da274694d7 + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10/89aa9651b67644035de2784a6e665fc685d79aba61857e02b9c8758da874a754aed4a9aced9265f5ed1171fd934331e5516b84a7f0218031b6fa0270eca1e51a + languageName: node + linkType: hard + +"mime@npm:^3.0.0": + version: 3.0.0 + resolution: "mime@npm:3.0.0" + bin: + mime: cli.js + checksum: 10/b2d31580deb58be89adaa1877cbbf152b7604b980fd7ef8f08b9e96bfedf7d605d9c23a8ba62aa12c8580b910cd7c1d27b7331d0f40f7a14e17d5a0bbec3b49f + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: 10/d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"min-document@npm:^2.19.0": + version: 2.19.0 + resolution: "min-document@npm:2.19.0" + dependencies: + dom-walk: "npm:^0.1.0" + checksum: 10/4e45a0686c81cc04509989235dc6107e2678a59bb48ce017d3c546d7d9a18d782e341103e66c78081dd04544704e2196e529905c41c2550bca069b69f95f07c8 + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: 10/bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + +"miniflare@npm:4.20250404.0": + version: 4.20250404.0 + resolution: "miniflare@npm:4.20250404.0" + dependencies: + "@cspotcode/source-map-support": "npm:0.8.1" + acorn: "npm:8.14.0" + acorn-walk: "npm:8.3.2" + exit-hook: "npm:2.2.1" + glob-to-regexp: "npm:0.4.1" + stoppable: "npm:1.1.0" + undici: "npm:^5.28.5" + workerd: "npm:1.20250404.0" + ws: "npm:8.18.0" + youch: "npm:3.3.4" + zod: "npm:3.22.3" + bin: + miniflare: bootstrap.js + checksum: 10/7372dcd7257fd780896cfed4b2fb1b79c14d2ba16933b4c8d88fce15c518eba2dabc075695702b5b3c211b08295e1111c8572bac4a6b6b83059de5b226f9ae13 + languageName: node + linkType: hard + +"minimatch@npm:3.0.5": + version: 3.0.5 + resolution: "minimatch@npm:3.0.5" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10/8f9707491183a07a9542b8cf45aacb3745ba9fe6c611173fb225d7bf191e55416779aee31e17673a516a178af02d8d3d71ddd36ae3d5cc2495f627977ad1a012 + languageName: node + linkType: hard + +"minimatch@npm:9.0.3": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10/c81b47d28153e77521877649f4bab48348d10938df9e8147a58111fe00ef89559a2938de9f6632910c4f7bf7bb5cd81191a546167e58d357f0cfb1e18cecc1c5 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10/e0b25b04cd4ec6732830344e5739b13f8690f8a012d73445a4a19fbc623f5dd481ef7a5827fde25954cd6026fede7574cc54dc4643c99d6c6b653d6203f94634 + languageName: node + linkType: hard + +"minimatch@npm:^5.0.1": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10/126b36485b821daf96d33b5c821dac600cc1ab36c87e7a532594f9b1652b1fa89a1eebcaad4dff17c764dce1a7ac1531327f190fed5f97d8f6e5f889c116c429 + languageName: node + linkType: hard + +"minimatch@npm:^8.0.2": + version: 8.0.4 + resolution: "minimatch@npm:8.0.4" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10/aef05598ee565e1013bc8a10f53410ac681561f901c1a084b8ecfd016c9ed919f58f4bbd5b63e05643189dfb26e8106a84f0e1ff12e4a263aa37e1cae7ce9828 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10/dd6a8927b063aca6d910b119e1f2df6d2ce7d36eab91de83167dd136bb85e1ebff97b0d3de1cb08bd1f7e018ca170b4962479fefab5b2a69e2ae12cb2edc8348 + languageName: node + linkType: hard + +"minimist-options@npm:4.1.0": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: "npm:^1.0.1" + is-plain-obj: "npm:^1.1.0" + kind-of: "npm:^6.0.3" + checksum: 10/8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10/908491b6cc15a6c440ba5b22780a0ba89b9810e1aea684e253e43c4e3b8d56ec1dcdd7ea96dde119c29df59c936cde16062159eae4225c691e19c70b432b6e6f + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10/b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10/c669948bec1373313aaa8f104b962a3ced9f45c49b26366a4b0ae27ccdfa9c5740d72c8a84d3f8623d7a61c5fc7afdfda44789008c078f61a62441142efc4a97 + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.1 + resolution: "minipass-fetch@npm:4.0.1" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10/7ddfebdbb87d9866e7b5f7eead5a9e3d9d507992af932a11d275551f60006cf7d9178e66d586dbb910894f3e3458d27c0ddf93c76e94d49d0a54a541ddc1263d + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10/56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10/b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10/40982d8d836a52b0f37049a0a7e5d0f089637298e6d9b45df9c115d4f0520682a78258905e5c8b180fb41b593b0a82cc1361d2c74b45f7ada66334f84d1ecfdd + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10/a5c6ef069f70d9a524d3428af39f2b117ff8cd84172e19b754e7264a33df460873e6eb3d6e55758531580970de50ae950c496256bb4ad3691a2974cddff189f0 + languageName: node + linkType: hard + +"minipass@npm:^4.2.4": + version: 4.2.8 + resolution: "minipass@npm:4.2.8" + checksum: 10/e148eb6dcb85c980234cad889139ef8ddf9d5bdac534f4f0268446c8792dd4c74f4502479be48de3c1cce2f6450f6da4d0d4a86405a8a12be04c1c36b339569a + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10/61682162d29f45d3152b78b08bab7fb32ca10899bc5991ffe98afc18c9e9543bd1e3be94f8b8373ba6262497db63607079dc242ea62e43e7b2270837b7347c93 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10/c25f0ee8196d8e6036661104bacd743785b2599a21de5c516b32b3fa2b83113ac89a2358465bc04956baab37ffb956ae43be679b2262bf7be15fce467ccd7950 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10/ae0f45436fb51344dcb87938446a32fbebb540d0e191d63b35e1c773d47512e17307bf54aa88326cc6d176594d00e4423563a091f7266c2f9a6872cdc1e234d1 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1": + version: 3.0.2 + resolution: "minizlib@npm:3.0.2" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10/c075bed1594f68dcc8c35122333520112daefd4d070e5d0a228bd4cf5580e9eed3981b96c0ae1d62488e204e80fd27b2b9d0068ca9a5ef3993e9565faf63ca41 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10/d71b8dcd4b5af2fe13ecf3bd24070263489404fe216488c5ba7e38ece1f54daf219e72a833a3a2dc404331e870e9f44963a33399589490956bff003a3404d3b2 + languageName: node + linkType: hard + +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10/16fd79c28645759505914561e249b9a1f5fe3362279ad95487a4501e4467abeb714fd35b95307326b8fd03f3c7719065ef11a6f97b7285d7888306d1bd2232ba + languageName: node + linkType: hard + +"modify-values@npm:^1.0.1": + version: 1.0.1 + resolution: "modify-values@npm:1.0.1" + checksum: 10/16fa93f7ddb2540a8e82c99738ae4ed0e8e8cae57c96e13a0db9d68dfad074fd2eec542929b62ebbb18b357bbb3e4680b92d3a4099baa7aeb32360cb1c8f0247 + languageName: node + linkType: hard + +"mri@npm:^1.1.0": + version: 1.2.0 + resolution: "mri@npm:1.2.0" + checksum: 10/6775a1d2228bb9d191ead4efc220bd6be64f943ad3afd4dcb3b3ac8fc7b87034443f666e38805df38e8d047b29f910c3cc7810da0109af83e42c82c73bd3f6bc + languageName: node + linkType: hard + +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10/aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"multimatch@npm:5.0.0": + version: 5.0.0 + resolution: "multimatch@npm:5.0.0" + dependencies: + "@types/minimatch": "npm:^3.0.3" + array-differ: "npm:^3.0.0" + array-union: "npm:^2.1.0" + arrify: "npm:^2.0.1" + minimatch: "npm:^3.0.4" + checksum: 10/82c8030a53af965cab48da22f1b0f894ef99e16ee680dabdfbd38d2dfacc3c8208c475203d747afd9e26db44118ed0221d5a0d65268c864f06d6efc7ac6df812 + languageName: node + linkType: hard + +"mustache@npm:^4.2.0": + version: 4.2.0 + resolution: "mustache@npm:4.2.0" + bin: + mustache: bin/mustache + checksum: 10/6e668bd5803255ab0779c3983b9412b5c4f4f90e822230e0e8f414f5449ed7a137eed29430e835aa689886f663385cfe05f808eb34b16e1f3a95525889b05cd3 + languageName: node + linkType: hard + +"mute-stream@npm:0.0.8": + version: 0.0.8 + resolution: "mute-stream@npm:0.0.8" + checksum: 10/a2d2e79dde87e3424ffc8c334472c7f3d17b072137734ca46e6f221131f1b014201cc593b69a38062e974fb2394d3d1cb4349f80f012bbf8b8ac1b28033e515f + languageName: node + linkType: hard + +"mute-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "mute-stream@npm:1.0.0" + checksum: 10/36fc968b0e9c9c63029d4f9dc63911950a3bdf55c9a87f58d3a266289b67180201cade911e7699f8b2fa596b34c9db43dad37649e3f7fdd13c3bb9edb0017ee7 + languageName: node + linkType: hard + +"mz@npm:^2.4.0, mz@npm:^2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: "npm:^1.0.0" + object-assign: "npm:^4.0.1" + thenify-all: "npm:^1.0.0" + checksum: 10/8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.8": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 10/73b5afe5975a307aaa3c95dfe3334c52cdf9ae71518176895229b8d65ab0d1c0417dd081426134eb7571c055720428ea5d57c645138161e7d10df80815527c48 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.4 + resolution: "negotiator@npm:0.6.4" + checksum: 10/d98c04a136583afd055746168f1067d58ce4bfe6e4c73ca1d339567f81ea1f7e665b5bd1e81f4771c67b6c2ea89b21cb2adaea2b16058c7dc31317778f931dab + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10/b5734e87295324fabf868e36fb97c84b7d7f3156ec5f4ee5bf6e488079c11054f818290fc33804cef7b1ee21f55eeb14caea83e7dafae6492a409b3e573153e5 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: 10/1a7948fea86f2b33ec766bc899c88796a51ba76a4afc9026764aedc6e7cde692a09067031e4a1bf6db4f978ccd99e7f5b6c03fe47ad9865c3d4f99050d67e002 + languageName: node + linkType: hard + +"nock@npm:14.0.3": + version: 14.0.3 + resolution: "nock@npm:14.0.3" + dependencies: + "@mswjs/interceptors": "npm:^0.38.1" + json-stringify-safe: "npm:^5.0.1" + propagate: "npm:^2.0.0" + checksum: 10/e9f9599c43b38d10337b749d246bbdb4092c67a38c3c7211635975724e0fd2fc6a629acdbebbeffcc94a9d37704262b6be5cd4647e3bcc02874fa6449766ea94 + languageName: node + linkType: hard + +"node-emoji@npm:^2.2.0": + version: 2.2.0 + resolution: "node-emoji@npm:2.2.0" + dependencies: + "@sindresorhus/is": "npm:^4.6.0" + char-regex: "npm:^1.0.2" + emojilib: "npm:^2.4.0" + skin-tone: "npm:^2.0.0" + checksum: 10/2548668f5cc9f781c94dc39971a630b2887111e0970c29fc523e924819d1b39b53a2694a4d1046861adf538c4462d06ee0269c48717ccad30336a918d9a911d5 + languageName: node + linkType: hard + +"node-fetch@npm:2.6.7": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10/4bc9245383db92c35601a798c9a992fdf38d99920ceac11e0e6512ef3014d188b3807ccb060bc6c4bdb57a145030c73f5b5fd6730f665979f9264bc43ca3afea + languageName: node + linkType: hard + +"node-fetch@npm:^2.7.0": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10/b24f8a3dc937f388192e59bcf9d0857d7b6940a2496f328381641cb616efccc9866e89ec43f2ec956bbd6c3d3ee05524ce77fe7b29ccd34692b3a16f237d6676 + languageName: node + linkType: hard + +"node-gyp@npm:^10.0.0": + version: 10.3.1 + resolution: "node-gyp@npm:10.3.1" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + tar: "npm:^6.2.1" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10/d3004f648559e42d7ec8791ea75747fe8a163a6061c202e311e5d7a5f6266baa9a5f5c6fde7be563974c88b030c5d0855fd945364f52fcd230d2a2ceee7be80d + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 11.2.0 + resolution: "node-gyp@npm:11.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.4.3" + tinyglobby: "npm:^0.2.12" + which: "npm:^5.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10/806fd8e3adc9157e17bf0d4a2c899cf6b98a0bbe9f453f630094ce791866271f6cddcaf2133e6513715d934fcba2014d287c7053d5d7934937b3a34d5a3d84ad + languageName: node + linkType: hard + +"node-machine-id@npm:1.1.12": + version: 1.1.12 + resolution: "node-machine-id@npm:1.1.12" + checksum: 10/46bf3d4fab8d0e63b24c42bcec2b6975c7ec5bc16e53d7a589d095668d0fdf0bfcbcdc28246dd1ef74cf95a37fbd774cd4b17b41f518d79dfad7fdc99f995903 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0, nopt@npm:^7.2.1": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10/95a1f6dec8a81cd18cdc2fed93e6f0b4e02cf6bdb4501c848752c6e34f9883d9942f036a5e3b21a699047d8a448562d891e67492df68ec9c373e6198133337ae + languageName: node + linkType: hard + +"nopt@npm:^8.0.0": + version: 8.1.0 + resolution: "nopt@npm:8.1.0" + dependencies: + abbrev: "npm:^3.0.0" + bin: + nopt: bin/nopt.js + checksum: 10/26ab456c51a96f02a9e5aa8d1b80ef3219f2070f3f3528a040e32fb735b1e651e17bdf0f1476988d3a46d498f35c65ed662d122f340d38ce4a7e71dd7b20c4bc + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: "npm:^2.1.4" + resolve: "npm:^1.10.0" + semver: "npm:2 || 3 || 4 || 5" + validate-npm-package-license: "npm:^3.0.1" + checksum: 10/644f830a8bb9b7cc9bf2f6150618727659ee27cdd0840d1c1f97e8e6cab0803a098a2c19f31c6247ad9d3a0792e61521a13a6e8cd87cc6bb676e3150612c03d4 + languageName: node + linkType: hard + +"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.3": + version: 3.0.3 + resolution: "normalize-package-data@npm:3.0.3" + dependencies: + hosted-git-info: "npm:^4.0.1" + is-core-module: "npm:^2.5.0" + semver: "npm:^7.3.4" + validate-npm-package-license: "npm:^3.0.1" + checksum: 10/3cd3b438c9c7b15d72ed2d1bbf0f8cc2d07bfe27702fc9e95d039f0af4e069dc75c0646e75068f9f9255a8aae64b59aa4fe2177e65787145fb996c3d38d48acb + languageName: node + linkType: hard + +"normalize-package-data@npm:^6.0.0, normalize-package-data@npm:^6.0.1": + version: 6.0.2 + resolution: "normalize-package-data@npm:6.0.2" + dependencies: + hosted-git-info: "npm:^7.0.0" + semver: "npm:^7.3.5" + validate-npm-package-license: "npm:^3.0.4" + checksum: 10/7c4216a2426aa76c0197f8372f06b23a0484d62b3518fb5c0f6ebccb16376bdfab29ceba96f95c75f60506473198f1337fe337b945c8df0541fe32b8049ab4c9 + languageName: node + linkType: hard + +"npm-bundled@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-bundled@npm:3.0.1" + dependencies: + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 10/113c9a35526d9a563694e9bda401dbda592f664fa146d365028bef1e3bfdc2a7b60ac9315a727529ef7e8e8d80b8d9e217742ccc2808e0db99c2204a3e33a465 + languageName: node + linkType: hard + +"npm-install-checks@npm:^6.0.0, npm-install-checks@npm:^6.2.0": + version: 6.3.0 + resolution: "npm-install-checks@npm:6.3.0" + dependencies: + semver: "npm:^7.1.1" + checksum: 10/6c20dadb878a0d2f1f777405217b6b63af1299d0b43e556af9363ee6eefaa98a17dfb7b612a473a473e96faf7e789c58b221e0d8ffdc1d34903c4f71618df3b4 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-normalize-package-bin@npm:3.0.1" + checksum: 10/de416d720ab22137a36292ff8a333af499ea0933ef2320a8c6f56a73b0f0448227fec4db5c890d702e26d21d04f271415eab6580b5546456861cc0c19498a4bf + languageName: node + linkType: hard + +"npm-package-arg@npm:11.0.2": + version: 11.0.2 + resolution: "npm-package-arg@npm:11.0.2" + dependencies: + hosted-git-info: "npm:^7.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10/ce4c51900a73aadb408c9830c38a61b1930e1ab08509ec5ebbcf625ad14326ee33b014df289c942039bd28071ab17e813368f68d26a4ccad0eb6e9928f8ad03c + languageName: node + linkType: hard + +"npm-package-arg@npm:^11.0.0, npm-package-arg@npm:^11.0.2": + version: 11.0.3 + resolution: "npm-package-arg@npm:11.0.3" + dependencies: + hosted-git-info: "npm:^7.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10/bacc863907edf98940286edc2fd80327901c1e8b34426d538cdc708ed66bc6567f06d742d838eaf35db6804347bb4ba56ca9cef032c4b52743b33e7a22a2678e + languageName: node + linkType: hard + +"npm-packlist@npm:8.0.2, npm-packlist@npm:^8.0.0": + version: 8.0.2 + resolution: "npm-packlist@npm:8.0.2" + dependencies: + ignore-walk: "npm:^6.0.4" + checksum: 10/707206e5c09a1b8aa04e590592715ba5ab8732add1bbb5eeaff54b9c6b2740764c9e94c99e390c13245970b51c2cc92b8d44594c2784fcd96f255c7109622322 + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^9.0.0, npm-pick-manifest@npm:^9.0.1": + version: 9.1.0 + resolution: "npm-pick-manifest@npm:9.1.0" + dependencies: + npm-install-checks: "npm:^6.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + npm-package-arg: "npm:^11.0.0" + semver: "npm:^7.3.5" + checksum: 10/e759e4fe4076da9169cf522964a80bbc096d50cd24c8c44b50b44706c4479bd9d9d018fbdb76c6ea0c6037e012e07c6c917a1ecaa7ae1a1169cddfae1c0f24b6 + languageName: node + linkType: hard + +"npm-registry-fetch@npm:^17.0.0, npm-registry-fetch@npm:^17.0.1, npm-registry-fetch@npm:^17.1.0": + version: 17.1.0 + resolution: "npm-registry-fetch@npm:17.1.0" + dependencies: + "@npmcli/redact": "npm:^2.0.0" + jsonparse: "npm:^1.3.1" + make-fetch-happen: "npm:^13.0.0" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minizlib: "npm:^2.1.2" + npm-package-arg: "npm:^11.0.0" + proc-log: "npm:^4.0.0" + checksum: 10/b9b2a73907fb5b2d8187031e040d7b2918f2b127ac858a84bd244f6435d16dd04df23c9660f32d7e9deb0216b91071623f040fd51b0bd375e8c7fed7d7a82a1c + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: "npm:^3.0.0" + checksum: 10/5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 + languageName: node + linkType: hard + +"npm-run-path@npm:^6.0.0": + version: 6.0.0 + resolution: "npm-run-path@npm:6.0.0" + dependencies: + path-key: "npm:^4.0.0" + unicorn-magic: "npm:^0.3.0" + checksum: 10/1a1b50aba6e6af7fd34a860ba2e252e245c4a59b316571a990356417c0cdf0414cabf735f7f52d9c330899cb56f0ab804a8e21fb12a66d53d7843e39ada4a3b6 + languageName: node + linkType: hard + +"nwsapi@npm:^2.2.16": + version: 2.2.20 + resolution: "nwsapi@npm:2.2.20" + checksum: 10/3dbfbd64c10dfd1edaf4992a6e859af306ec22846b86da2b31e69a743a8b4d7ac3b6ca767dbf248dabea8652905e402d6986f8ba491852e8568e334ec22e1882 + languageName: node + linkType: hard + +"nx@npm:>=17.1.2 < 21": + version: 20.7.1 + resolution: "nx@npm:20.7.1" + dependencies: + "@napi-rs/wasm-runtime": "npm:0.2.4" + "@nx/nx-darwin-arm64": "npm:20.7.1" + "@nx/nx-darwin-x64": "npm:20.7.1" + "@nx/nx-freebsd-x64": "npm:20.7.1" + "@nx/nx-linux-arm-gnueabihf": "npm:20.7.1" + "@nx/nx-linux-arm64-gnu": "npm:20.7.1" + "@nx/nx-linux-arm64-musl": "npm:20.7.1" + "@nx/nx-linux-x64-gnu": "npm:20.7.1" + "@nx/nx-linux-x64-musl": "npm:20.7.1" + "@nx/nx-win32-arm64-msvc": "npm:20.7.1" + "@nx/nx-win32-x64-msvc": "npm:20.7.1" + "@yarnpkg/lockfile": "npm:^1.1.0" + "@yarnpkg/parsers": "npm:3.0.2" + "@zkochan/js-yaml": "npm:0.0.7" + axios: "npm:^1.8.3" + chalk: "npm:^4.1.0" + cli-cursor: "npm:3.1.0" + cli-spinners: "npm:2.6.1" + cliui: "npm:^8.0.1" + dotenv: "npm:~16.4.5" + dotenv-expand: "npm:~11.0.6" + enquirer: "npm:~2.3.6" + figures: "npm:3.2.0" + flat: "npm:^5.0.2" + front-matter: "npm:^4.0.2" + ignore: "npm:^5.0.4" + jest-diff: "npm:^29.4.1" + jsonc-parser: "npm:3.2.0" + lines-and-columns: "npm:2.0.3" + minimatch: "npm:9.0.3" + node-machine-id: "npm:1.1.12" + npm-run-path: "npm:^4.0.1" + open: "npm:^8.4.0" + ora: "npm:5.3.0" + resolve.exports: "npm:2.0.3" + semver: "npm:^7.5.3" + string-width: "npm:^4.2.3" + tar-stream: "npm:~2.2.0" + tmp: "npm:~0.2.1" + tsconfig-paths: "npm:^4.1.2" + tslib: "npm:^2.3.0" + yaml: "npm:^2.6.0" + yargs: "npm:^17.6.2" + yargs-parser: "npm:21.1.1" + peerDependencies: + "@swc-node/register": ^1.8.0 + "@swc/core": ^1.3.85 + dependenciesMeta: + "@nx/nx-darwin-arm64": + optional: true + "@nx/nx-darwin-x64": + optional: true + "@nx/nx-freebsd-x64": + optional: true + "@nx/nx-linux-arm-gnueabihf": + optional: true + "@nx/nx-linux-arm64-gnu": + optional: true + "@nx/nx-linux-arm64-musl": + optional: true + "@nx/nx-linux-x64-gnu": + optional: true + "@nx/nx-linux-x64-musl": + optional: true + "@nx/nx-win32-arm64-msvc": + optional: true + "@nx/nx-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc-node/register": + optional: true + "@swc/core": + optional: true + bin: + nx: bin/nx.js + nx-cloud: bin/nx-cloud.js + checksum: 10/fe34738df4988a0fd07d65576dd0850e0ae6cc3611794f2c636ac90e51b09802b5e7851c5827e0e4378581817f1c396cd0bcba0b62038526a41834a896114d87 + languageName: node + linkType: hard + +"object-assign@npm:^4.0.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10/fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.3": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 10/aa13b1190ad3e366f6c83ad8a16ed37a19ed57d267385aa4bfdccda833d7b90465c057ff6c55d035a6b2e52c1a2295582b294217a0a3a1ae7abdd6877ef781fb + languageName: node + linkType: hard + +"ohash@npm:^2.0.11": + version: 2.0.11 + resolution: "ohash@npm:2.0.11" + checksum: 10/6b0423f42cc95c3d643f390a88364aac824178b7788dccb4e8c64e2124463d0069e60d4d90bad88ed9823808368d051e088aa27058ca4722b1397a201ffbfa4b + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10/cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: 10/e9fd0695a01cf226652f0385bf16b7a24153dbbb2039f764c8ba6d2306a8506b0e4ce570de6ad99c7a6eb49520743afdb66edd95ee979c1a342554ed49a9aadd + languageName: node + linkType: hard + +"open@npm:^8.4.0": + version: 8.4.2 + resolution: "open@npm:8.4.2" + dependencies: + define-lazy-prop: "npm:^2.0.0" + is-docker: "npm:^2.1.1" + is-wsl: "npm:^2.2.0" + checksum: 10/acd81a1d19879c818acb3af2d2e8e9d81d17b5367561e623248133deb7dd3aefaed527531df2677d3e6aaf0199f84df57b6b2262babff8bf46ea0029aac536c9 + languageName: node + linkType: hard + +"ora@npm:5.3.0": + version: 5.3.0 + resolution: "ora@npm:5.3.0" + dependencies: + bl: "npm:^4.0.3" + chalk: "npm:^4.1.0" + cli-cursor: "npm:^3.1.0" + cli-spinners: "npm:^2.5.0" + is-interactive: "npm:^1.0.0" + log-symbols: "npm:^4.0.0" + strip-ansi: "npm:^6.0.0" + wcwidth: "npm:^1.0.1" + checksum: 10/989a075b596c297acfee647010e555709bd657dedd9eee9ff99d923cbc65c68b6189c2c9ea58167675b101433509f87d1674a84047c7b766babab15d9220f1d5 + languageName: node + linkType: hard + +"ora@npm:^5.4.1": + version: 5.4.1 + resolution: "ora@npm:5.4.1" + dependencies: + bl: "npm:^4.1.0" + chalk: "npm:^4.1.0" + cli-cursor: "npm:^3.1.0" + cli-spinners: "npm:^2.5.0" + is-interactive: "npm:^1.0.0" + is-unicode-supported: "npm:^0.1.0" + log-symbols: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + wcwidth: "npm:^1.0.1" + checksum: 10/8d071828f40090a8e1c6e8f350c6eb065808e9ab2b3e57fa37e0d5ae78cb46dac00117c8f12c3c8b8da2923454afbd8265e08c10b69881170c5b269f451e7fef + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 10/5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d + languageName: node + linkType: hard + +"outvariant@npm:^1.4.0, outvariant@npm:^1.4.3": + version: 1.4.3 + resolution: "outvariant@npm:1.4.3" + checksum: 10/3a7582745850cb344d49641867a4c080858c54f4091afd91b9c0765ba6e471c2bc841348f0fff344845ddd0a4db42fd5d68c6f7ebaf32d4b676a3a9987b2488a + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 10/93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4 + languageName: node + linkType: hard + +"p-limit@npm:^1.1.0": + version: 1.3.0 + resolution: "p-limit@npm:1.3.0" + dependencies: + p-try: "npm:^1.0.0" + checksum: 10/eb9d9bc378d48ab1998d2a2b2962a99eddd3e3726c82d3258ecc1a475f22907968edea4fec2736586d100366a001c6bb449a2abe6cd65e252e9597394f01e789 + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10/84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + +"p-locate@npm:^2.0.0": + version: 2.0.0 + resolution: "p-locate@npm:2.0.0" + dependencies: + p-limit: "npm:^1.1.0" + checksum: 10/e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10/513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + languageName: node + linkType: hard + +"p-map-series@npm:2.1.0": + version: 2.1.0 + resolution: "p-map-series@npm:2.1.0" + checksum: 10/69d4efbb6951c0dd62591d5a18c3af0af78496eae8b55791e049da239d70011aa3af727dece3fc9943e0bb3fd4fa64d24177cfbecc46efaf193179f0feeac486 + languageName: node + linkType: hard + +"p-map@npm:4.0.0, p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10/7ba4a2b1e24c05e1fc14bbaea0fc6d85cf005ae7e9c9425d4575550f37e2e584b1af97bcde78eacd7559208f20995988d52881334db16cf77bc1bcf68e48ed7c + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10/2ef48ccfc6dd387253d71bf502604f7893ed62090b2c9d73387f10006c342606b05233da0e4f29388227b61eb5aeface6197e166520c465c234552eeab2fe633 + languageName: node + linkType: hard + +"p-pipe@npm:3.1.0": + version: 3.1.0 + resolution: "p-pipe@npm:3.1.0" + checksum: 10/d4ef73801a99bd6ca6f1bd0f46c7992c4d006421d653de387893b72d91373ab93fca75ffaacba6199b1ce5bb5ff51d715f1c669541186afbb0a11b4aebb032b3 + languageName: node + linkType: hard + +"p-queue@npm:6.6.2": + version: 6.6.2 + resolution: "p-queue@npm:6.6.2" + dependencies: + eventemitter3: "npm:^4.0.4" + p-timeout: "npm:^3.2.0" + checksum: 10/60fe227ffce59fbc5b1b081305b61a2f283ff145005853702b7d4d3f99a0176bd21bb126c99a962e51fe1e01cb8aa10f0488b7bbe73b5dc2e84b5cc650b8ffd2 + languageName: node + linkType: hard + +"p-reduce@npm:2.1.0, p-reduce@npm:^2.0.0, p-reduce@npm:^2.1.0": + version: 2.1.0 + resolution: "p-reduce@npm:2.1.0" + checksum: 10/99b26d36066a921982f25c575e78355824da0787c486e3dd9fc867460e8bf17d5fb3ce98d006b41bdc81ffc0aa99edf5faee53d11fe282a20291fb721b0cb1c7 + languageName: node + linkType: hard + +"p-timeout@npm:^3.2.0": + version: 3.2.0 + resolution: "p-timeout@npm:3.2.0" + dependencies: + p-finally: "npm:^1.0.0" + checksum: 10/3dd0eaa048780a6f23e5855df3dd45c7beacff1f820476c1d0d1bcd6648e3298752ba2c877aa1c92f6453c7dd23faaf13d9f5149fc14c0598a142e2c5e8d649c + languageName: node + linkType: hard + +"p-try@npm:^1.0.0": + version: 1.0.0 + resolution: "p-try@npm:1.0.0" + checksum: 10/20d9735f57258158df50249f172c77fe800d31e80f11a3413ac9e68ccbe6b11798acb3f48f2df8cea7ba2b56b753ce695a4fe2a2987c3c7691c44226b6d82b6f + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10/f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + +"p-waterfall@npm:2.1.1": + version: 2.1.1 + resolution: "p-waterfall@npm:2.1.1" + dependencies: + p-reduce: "npm:^2.0.0" + checksum: 10/3ab6762f3cf913eb0462e0016b242df679e4ace946cdfaab48999288c5b6fed9c6c6c5e050e08e777aa658f94e02fbab72349c59135d5a608d887293c5b16299 + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10/58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 + languageName: node + linkType: hard + +"package-manager-detector@npm:^1.1.0": + version: 1.1.0 + resolution: "package-manager-detector@npm:1.1.0" + checksum: 10/c72162e11dd2ec89588541d74e2814f5b0a92f05e25f44e74b1c3556c0232ea6873c6ca5417c12baeb86d54622979b2858e8696d2dcb25fe0242574a7438e377 + languageName: node + linkType: hard + +"pacote@npm:^18.0.0, pacote@npm:^18.0.6": + version: 18.0.6 + resolution: "pacote@npm:18.0.6" + dependencies: + "@npmcli/git": "npm:^5.0.0" + "@npmcli/installed-package-contents": "npm:^2.0.1" + "@npmcli/package-json": "npm:^5.1.0" + "@npmcli/promise-spawn": "npm:^7.0.0" + "@npmcli/run-script": "npm:^8.0.0" + cacache: "npm:^18.0.0" + fs-minipass: "npm:^3.0.0" + minipass: "npm:^7.0.2" + npm-package-arg: "npm:^11.0.0" + npm-packlist: "npm:^8.0.0" + npm-pick-manifest: "npm:^9.0.0" + npm-registry-fetch: "npm:^17.0.0" + proc-log: "npm:^4.0.0" + promise-retry: "npm:^2.0.1" + sigstore: "npm:^2.2.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + bin: + pacote: bin/index.js + checksum: 10/48cbcb3c20792952d431c995c2965340d3501e1795313d7225149435c883fb071d6a9bfbe11b1021dc888319f27a8c865cb70656f6472d7443545eb347447553 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10/6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"parse-conflict-json@npm:^3.0.0": + version: 3.0.1 + resolution: "parse-conflict-json@npm:3.0.1" + dependencies: + json-parse-even-better-errors: "npm:^3.0.0" + just-diff: "npm:^6.0.0" + just-diff-apply: "npm:^5.2.0" + checksum: 10/ceb13ca90bd75610559125dc7b519e2806c096640142d6524e9b1ffdf08d6625b03a29d8afe4630d95460f703b9d5bc6dac21fcdcb00089213ffdb70800c900b + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: "npm:^1.3.1" + json-parse-better-errors: "npm:^1.0.1" + checksum: 10/0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5 + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + error-ex: "npm:^1.3.1" + json-parse-even-better-errors: "npm:^2.3.0" + lines-and-columns: "npm:^1.1.6" + checksum: 10/62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + languageName: node + linkType: hard + +"parse-ms@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-ms@npm:4.0.0" + checksum: 10/673c801d9f957ff79962d71ed5a24850163f4181a90dd30c4e3666b3a804f53b77f1f0556792e8b2adbb5d58757907d1aa51d7d7dc75997c2a56d72937cbc8b7 + languageName: node + linkType: hard + +"parse-path@npm:^7.0.0": + version: 7.0.1 + resolution: "parse-path@npm:7.0.1" + dependencies: + protocols: "npm:^2.0.0" + checksum: 10/e20c6a60a1e406bac0514745da5523531ef7faf860521b4571ac4b4ae8dc807fd9f0bb05a914a05b9fbc76b99f11c321fcea39e82b4a0215bd6e779e70ca3e13 + languageName: node + linkType: hard + +"parse-url@npm:^8.1.0": + version: 8.1.0 + resolution: "parse-url@npm:8.1.0" + dependencies: + parse-path: "npm:^7.0.0" + checksum: 10/ceb51dc474568092a50d6d936036dfe438a87aa45bcf20947c8fcdf1544ee9c50255608abae604644e718e91e0b83cfbea4675e8b2fd90bc197432f6d9be263c + languageName: node + linkType: hard + +"parse5-htmlparser2-tree-adapter@npm:^6.0.0": + version: 6.0.1 + resolution: "parse5-htmlparser2-tree-adapter@npm:6.0.1" + dependencies: + parse5: "npm:^6.0.1" + checksum: 10/3400a2cd1ad450b2fe148544154f86ea53d3ed6b6eab56c78bb43b9629d3dfe9f580dffd75bbf32be134ffef645b68081fc764bf75c210f236ab9c5c8c38c252 + languageName: node + linkType: hard + +"parse5@npm:^5.1.1": + version: 5.1.1 + resolution: "parse5@npm:5.1.1" + checksum: 10/5b509744cfe81488a33be05578df490c460690e64519fa67f0a0acb9c1bca05914e8acad17a977e2cf5964a000e43959b40024f0c243dd6595dd0cca8a32f71b + languageName: node + linkType: hard + +"parse5@npm:^6.0.1": + version: 6.0.1 + resolution: "parse5@npm:6.0.1" + checksum: 10/dfb110581f62bd1425725a7c784ae022a24669bd0efc24b58c71fc731c4d868193e2ebd85b74cde2dbb965e4dcf07059b1e651adbec1b3b5267531bd132fdb75 + languageName: node + linkType: hard + +"parse5@npm:^7.2.1": + version: 7.2.1 + resolution: "parse5@npm:7.2.1" + dependencies: + entities: "npm:^4.5.0" + checksum: 10/fd1a8ad1540d871e1ad6ca9bf5b67e30280886f1ce4a28052c0cb885723aa984d8cb1ec3da998349a6146960c8a84aa87b1a42600eb3b94495c7303476f2f88e + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 10/96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10/505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10/060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10/55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10/8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10/49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1, path-scurry@npm:^1.6.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10/5e8845c159261adda6f09814d7725683257fcc85a18f329880ab4d7cc1d12830967eae5d5894e453f341710d5484b8fdbbd4d75181b4d6e1eb2f4dc7aeadc434 + languageName: node + linkType: hard + +"path-to-regexp@npm:6.3.0": + version: 6.3.0 + resolution: "path-to-regexp@npm:6.3.0" + checksum: 10/6822f686f01556d99538b350722ef761541ec0ce95ca40ce4c29e20a5b492fe8361961f57993c71b2418de12e604478dcf7c430de34b2c31a688363a7a944d9c + languageName: node + linkType: hard + +"path-type@npm:^3.0.0": + version: 3.0.0 + resolution: "path-type@npm:3.0.0" + dependencies: + pify: "npm:^3.0.0" + checksum: 10/735b35e256bad181f38fa021033b1c33cfbe62ead42bb2222b56c210e42938eecb272ae1949f3b6db4ac39597a61b44edd8384623ec4d79bfdc9a9c0f12537a6 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10/5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10/01e9a69928f39087d96e1751ce7d6d50da8c39abf9a12e0ac2389c42c83bc76f78c45a475bd9026a02e6a6f79be63acc75667df855862fe567d99a00a540d23d + languageName: node + linkType: hard + +"pathval@npm:^2.0.0": + version: 2.0.0 + resolution: "pathval@npm:2.0.0" + checksum: 10/b91575bf9cdf01757afd7b5e521eb8a0b874a49bc972d08e0047cfea0cd3c019f5614521d4bc83d2855e3fcc331db6817dfd533dd8f3d90b16bc76fad2450fc1 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10/e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 + languageName: node + linkType: hard + +"picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10/60c2595003b05e4535394d1da94850f5372c9427ca4413b71210f437f7b2ca091dbd611c45e8b37d10036fa8eade25c1b8951654f9d3973bfa66a2ff4d3b08bc + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10/ce617b8da36797d09c0baacb96ca8a44460452c89362d7cb8f70ca46b4158ba8bc3606912de7c818eb4a939f7f9015cef3c766ec8a0c6bfc725fdc078e39c717 + languageName: node + linkType: hard + +"pify@npm:5.0.0": + version: 5.0.0 + resolution: "pify@npm:5.0.0" + checksum: 10/443e3e198ad6bfa8c0c533764cf75c9d5bc976387a163792fb553ffe6ce923887cf14eebf5aea9b7caa8eab930da8c33612990ae85bd8c2bc18bedb9eae94ecb + languageName: node + linkType: hard + +"pify@npm:^2.3.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 10/9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 10/668c1dc8d9fc1b34b9ce3b16ba59deb39d4dc743527bf2ed908d2b914cb8ba40aa5ba6960b27c417c241531c5aafd0598feeac2d50cb15278cf9863fa6b02a77 + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 10/8b97cbf9dc6d4c1320cc238a2db0fc67547f9dc77011729ff353faf34f1936ea1a4d7f3c63b2f4980b253be77bcc72ea1e9e76ee3fd53cce2aafb6a8854d07ec + languageName: node + linkType: hard + +"pirates@npm:^4.0.1": + version: 4.0.7 + resolution: "pirates@npm:4.0.7" + checksum: 10/2427f371366081ae42feb58214f04805d6b41d6b84d74480ebcc9e0ddbd7105a139f7c653daeaf83ad8a1a77214cf07f64178e76de048128fec501eab3305a96 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: "npm:^4.0.0" + checksum: 10/9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + languageName: node + linkType: hard + +"postcss-load-config@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-load-config@npm:6.0.1" + dependencies: + lilconfig: "npm:^3.1.1" + peerDependencies: + jiti: ">=1.21.0" + postcss: ">=8.0.9" + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + checksum: 10/1691cfc94948a9373d4f7b3b7a8500cfaf8cb2dcc2107c14f90f2a711a9892a362b0866894ac5bb723455fa685a15116d9ed3252188689c4502b137c19d6bdc4 + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.10": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10/190034c94d809c115cd2f32ee6aade84e933450a43ec3899c3e78e7d7b33efd3a2a975bb45d7700b6c5b196c06a7d9acf3f1ba6f1d87032d9675a29d8bca1dd3 + languageName: node + linkType: hard + +"postcss@npm:^8.5.3": + version: 8.5.3 + resolution: "postcss@npm:8.5.3" + dependencies: + nanoid: "npm:^3.3.8" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10/6d7e21a772e8b05bf102636918654dac097bac013f0dc8346b72ac3604fc16829646f94ea862acccd8f82e910b00e2c11c1f0ea276543565d278c7ca35516a7c + languageName: node + linkType: hard + +"pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": "npm:^29.6.3" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^18.0.0" + checksum: 10/dea96bc83c83cd91b2bfc55757b6b2747edcaac45b568e46de29deee80742f17bc76fe8898135a70d904f4928eafd8bb693cd1da4896e8bdd3c5e82cadf1d2bb + languageName: node + linkType: hard + +"pretty-ms@npm:^9.0.0": + version: 9.2.0 + resolution: "pretty-ms@npm:9.2.0" + dependencies: + parse-ms: "npm:^4.0.0" + checksum: 10/a65a1d81560867f4f7128862fdbf0e1c2d3c5607bf75cae7758bf8111e2c4b744be46e084704125a38ba918bb43defa7a53aaff0f48c5c2d95367d3148c980d9 + languageName: node + linkType: hard + +"printable-characters@npm:^1.0.42": + version: 1.0.42 + resolution: "printable-characters@npm:1.0.42" + checksum: 10/5fd9f44f2b24c9d875a97642a72be27f53aaac7f0f8f2792f969f3082e4516878db21cfa999f827606b002a890e6afeac0e0cc8dcb0d2d7965252975e634c6b2 + languageName: node + linkType: hard + +"proc-log@npm:^4.0.0, proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10/4e1394491b717f6c1ade15c570ecd4c2b681698474d3ae2d303c1e4b6ab9455bd5a81566211e82890d5a5ae9859718cc6954d5150bb18b09b72ecb297beae90a + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10/35610bdb0177d3ab5d35f8827a429fb1dc2518d9e639f2151ac9007f01a061c30e0c635a970c9b00c39102216160f6ec54b62377c92fac3b7bfc2ad4b98d195c + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 10/1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: 10/dbaa7e8d1d5cf375c36963ff43116772a989ef2bb47c9bdee20f38fd8fc061119cf38140631cf90c781aca4d3f0f0d2c834711952b728953f04fd7d238f59f5b + languageName: node + linkType: hard + +"proggy@npm:^2.0.0": + version: 2.0.0 + resolution: "proggy@npm:2.0.0" + checksum: 10/9c96830d30516534c91e1260cae98d2c12aa32ea4ca7ff979876557ae293581c4874c95daf80497a7350179e7fec6d119cd589ef09af9c925f5842161897ed7e + languageName: node + linkType: hard + +"promise-all-reject-late@npm:^1.0.0": + version: 1.0.1 + resolution: "promise-all-reject-late@npm:1.0.1" + checksum: 10/f5e5c1bfed975c26b6dec007393e1026c437716d87c9c688cfa026bb904c190155211d23fe795c03c4394f88563471aec56b3ad263bff5ed68dad734513c2912 + languageName: node + linkType: hard + +"promise-call-limit@npm:^3.0.1": + version: 3.0.2 + resolution: "promise-call-limit@npm:3.0.2" + checksum: 10/e1e2d57658bd57574959bd89733958f4e6940a6a5788d2f380a81f62f5660f88f93a7dd9f9eb3d09dc7c4927387e25c00ca941a3bdfce8fb050987d2d0ffe59a + languageName: node + linkType: hard + +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 10/1560d413ea20c5a74f3631d39ba8cbd1972b9228072a755d01e1f5ca5110382d9af76a1582d889445adc6e75bb5ac4886b56dc4b6eae51b30145d7bb1ac7505b + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10/96e1a82453c6c96eef53a37a1d6134c9f2482f94068f98a59145d0986ca4e497bf110a410adf73857e588165eab3899f0ebcf7b3890c1b3ce802abc0d65967d4 + languageName: node + linkType: hard + +"promzard@npm:^1.0.0": + version: 1.0.2 + resolution: "promzard@npm:1.0.2" + dependencies: + read: "npm:^3.0.1" + checksum: 10/08dee9179e79d4a6446f707cce46fb3e8e8d93ec8b8d722ddc1ec4043c4c07e2e88dc90c64326a58f83d1a7e2b0d6b3bdf11b8b2687b9c74bfb410bafe630ad8 + languageName: node + linkType: hard + +"propagate@npm:^2.0.0": + version: 2.0.1 + resolution: "propagate@npm:2.0.1" + checksum: 10/8c761c16e8232f82f6d015d3e01e8bd4109f47ad804f904d950f6fe319813b448ca112246b6bfdc182b400424b155b0b7c4525a9bb009e6fa950200157569c14 + languageName: node + linkType: hard + +"protocols@npm:^2.0.0, protocols@npm:^2.0.1": + version: 2.0.2 + resolution: "protocols@npm:2.0.2" + checksum: 10/031cc068eb800468a50eb7c1e1c528bf142fb8314f5df9b9ea3c3f9df1697a19f97b9915b1229cef694d156812393172d9c3051ef7878d26eaa8c6faa5cccec4 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10/f0bb4a87cfd18f77bc2fba23ae49c3b378fb35143af16cc478171c623eebe181678f09439707ad80081d340d1593cd54a33a0113f3ccb3f4bc9451488780ee23 + languageName: node + linkType: hard + +"publint@npm:0.3.10": + version: 0.3.10 + resolution: "publint@npm:0.3.10" + dependencies: + "@publint/pack": "npm:^0.1.2" + package-manager-detector: "npm:^1.1.0" + picocolors: "npm:^1.1.1" + sade: "npm:^1.8.1" + bin: + publint: src/cli.js + checksum: 10/204bad3fbc9ed58aa82c1595eb1355c6cb6148d6ffb912935aaa0746a73be970474c575e20470b133a002c0231fa8551e9ab0012a39b4832a7ec2bb7dff8d7e4 + languageName: node + linkType: hard + +"punycode@npm:^1.4.1": + version: 1.4.1 + resolution: "punycode@npm:1.4.1" + checksum: 10/af2700dde1a116791ff8301348ff344c47d6c224e875057237d1b5112035655fb07a6175cfdb8bf0e3a8cdfd2dc82b3a622e0aefd605566c0e949a6d0d1256a4 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10/febdc4362bead22f9e2608ff0171713230b57aff9dddc1c273aa2a651fbd366f94b7d6a71d78342a7c0819906750351ca7f2edd26ea41b626d87d6a13d1bd059 + languageName: node + linkType: hard + +"qs@npm:^6.12.3": + version: 6.14.0 + resolution: "qs@npm:6.14.0" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10/a60e49bbd51c935a8a4759e7505677b122e23bf392d6535b8fc31c1e447acba2c901235ecb192764013cd2781723dc1f61978b5fdd93cc31d7043d31cdc01974 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10/72900df0616e473e824202113c3df6abae59150dfb73ed13273503127235320e9c8ca4aaaaccfd58cf417c6ca92a6e68ee9a5c3182886ae949a768639b388a7b + languageName: node + linkType: hard + +"quick-lru@npm:^4.0.1": + version: 4.0.1 + resolution: "quick-lru@npm:4.0.1" + checksum: 10/5c7c75f1c696750f619b165cc9957382f919e4207dabf04597a64f0298861391cdc5ee91a1dde1a5d460ecf7ee1af7fc36fef6d155bef2be66f05d43fd63d4f0 + languageName: node + linkType: hard + +"react-is@npm:^18.0.0": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10/d5f60c87d285af24b1e1e7eaeb123ec256c3c8bdea7061ab3932e3e14685708221bf234ec50b21e10dd07f008f1b966a2730a0ce4ff67905b3872ff2042aec22 + languageName: node + linkType: hard + +"read-cmd-shim@npm:4.0.0, read-cmd-shim@npm:^4.0.0": + version: 4.0.0 + resolution: "read-cmd-shim@npm:4.0.0" + checksum: 10/69a83acf0a3e2357762d5944a6f4a3f3c5527d0f9fe8a5c9362225aaf702ccfa580ff3bc0b84809c99e88861a5e5be147629717f02ff9befdac68fca1ccc7664 + languageName: node + linkType: hard + +"read-package-json-fast@npm:^3.0.0, read-package-json-fast@npm:^3.0.2": + version: 3.0.2 + resolution: "read-package-json-fast@npm:3.0.2" + dependencies: + json-parse-even-better-errors: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 10/8d406869f045f1d76e2a99865a8fd1c1af9c1dc06200b94d2b07eef87ed734b22703a8d72e1cd36ea36cc48e22020bdd187f88243c7dd0563f72114d38c17072 + languageName: node + linkType: hard + +"read-pkg-up@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg-up@npm:3.0.0" + dependencies: + find-up: "npm:^2.0.0" + read-pkg: "npm:^3.0.0" + checksum: 10/16175573f2914ab9788897bcbe2a62b5728d0075e62285b3680cebe97059e2911e0134a062cf6e51ebe3e3775312bc788ac2039ed6af38ec68d2c10c6f2b30fb + languageName: node + linkType: hard + +"read-pkg-up@npm:^7.0.1": + version: 7.0.1 + resolution: "read-pkg-up@npm:7.0.1" + dependencies: + find-up: "npm:^4.1.0" + read-pkg: "npm:^5.2.0" + type-fest: "npm:^0.8.1" + checksum: 10/e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 + languageName: node + linkType: hard + +"read-pkg@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg@npm:3.0.0" + dependencies: + load-json-file: "npm:^4.0.0" + normalize-package-data: "npm:^2.3.2" + path-type: "npm:^3.0.0" + checksum: 10/398903ebae6c7e9965419a1062924436cc0b6f516c42c4679a90290d2f87448ed8f977e7aa2dbba4aa1ac09248628c43e493ac25b2bc76640e946035200e34c6 + languageName: node + linkType: hard + +"read-pkg@npm:^5.2.0": + version: 5.2.0 + resolution: "read-pkg@npm:5.2.0" + dependencies: + "@types/normalize-package-data": "npm:^2.4.0" + normalize-package-data: "npm:^2.5.0" + parse-json: "npm:^5.0.0" + type-fest: "npm:^0.6.0" + checksum: 10/eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 + languageName: node + linkType: hard + +"read@npm:^3.0.1": + version: 3.0.1 + resolution: "read@npm:3.0.1" + dependencies: + mute-stream: "npm:^1.0.0" + checksum: 10/446b463d04fc3fa82ed2ad9c924aef9174c9ea912ffc6a38b7b9e7b8fa10d6ce4735bcbd0dcc3b9833e9b8f561c182fa57cf6cdb9ca39c8c032ca3070d89baaa + languageName: node + linkType: hard + +"readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10/d9e3e53193adcdb79d8f10f2a1f6989bd4389f5936c6f8b870e77570853561c362bee69feca2bbb7b32368ce96a85504aa4cedf7cf80f36e6a9de30d64244048 + languageName: node + linkType: hard + +"readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.3" + isarray: "npm:~1.0.0" + process-nextick-args: "npm:~2.0.0" + safe-buffer: "npm:~5.1.1" + string_decoder: "npm:~1.1.1" + util-deprecate: "npm:~1.0.1" + checksum: 10/8500dd3a90e391d6c5d889256d50ec6026c059fadee98ae9aa9b86757d60ac46fff24fafb7a39fa41d54cb39d8be56cc77be202ebd4cd8ffcf4cb226cbaa40d4 + languageName: node + linkType: hard + +"readdirp@npm:^4.0.1": + version: 4.1.2 + resolution: "readdirp@npm:4.1.2" + checksum: 10/7b817c265940dba90bb9c94d82920d76c3a35ea2d67f9f9d8bd936adcfe02d50c802b14be3dd2e725e002dddbe2cc1c7a0edfb1bc3a365c9dfd5a61e612eea1e + languageName: node + linkType: hard + +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: "npm:^4.0.0" + strip-indent: "npm:^3.0.0" + checksum: 10/fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10/a72468e2589270d91f06c7d36ec97a88db53ae5d6fe3787fadc943f0b0276b10347f89b363b2a82285f650bdcc135ad4a257c61bdd4d00d6df1fa24875b0ddaf + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 10/546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 + languageName: node + linkType: hard + +"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10/be18a5e4d76dd711778664829841cde690971d02b6cbae277735a09c1c28f407b99ef6ef3cd585a1e6546d4097b28df40ed32c4a287b9699dcf6d7f208495e23 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10/91eb76ce83621eea7bbdd9b55121a5c1c4a39e54a9ce04a9ad4517f102f8b5131c2cf07622c738a6683991bf54f2ce178f5a42803ecbd527ddc5105f362cc9e3 + languageName: node + linkType: hard + +"resolve.exports@npm:2.0.3": + version: 2.0.3 + resolution: "resolve.exports@npm:2.0.3" + checksum: 10/536efee0f30a10fac8604e6cdc7844dbc3f4313568d09f06db4f7ed8a5b8aeb8585966fe975083d1f2dfbc87cf5f8bc7ab65a5c23385c14acbb535ca79f8398a + languageName: node + linkType: hard + +"resolve@npm:^1.10.0": + version: 1.22.10 + resolution: "resolve@npm:1.22.10" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10/0a398b44da5c05e6e421d70108822c327675febb880eebe905587628de401854c61d5df02866ff34fc4cb1173a51c9f0e84a94702738df3611a62e2acdc68181 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin": + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10/d4d878bfe3702d215ea23e75e0e9caf99468e3db76f5ca100d27ebdc527366fee3877e54bce7d47cc72ca8952fc2782a070d238bfa79a550eeb0082384c3b81a + languageName: node + linkType: hard + +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + checksum: 10/f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10/1f914879f97e7ee931ad05fe3afa629bd55270fc6cf1c1e589b6a99fab96d15daad0fa1a52a00c729ec0078045fe3e399bd4fd0c93bcc906957bdc17f89cb8e6 + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10/af47851b547e8a8dc89af144fceee17b80d5beaf5e6f57ed086432d79943434ff67ca526e92275be6f54b6189f6920a24eace75c2657eed32d02c400312b21ec + languageName: node + linkType: hard + +"rimraf@npm:^4.4.1": + version: 4.4.1 + resolution: "rimraf@npm:4.4.1" + dependencies: + glob: "npm:^9.2.0" + bin: + rimraf: dist/cjs/src/bin.js + checksum: 10/218ef9122145ccce9d0a71124d36a3894537de46600b37fae7dba26ccff973251eaa98aa63c2c5855a05fa04bca7cbbd7a92d4b29f2875d2203e72530ecf6ede + languageName: node + linkType: hard + +"rollup@npm:4.39.0, rollup@npm:^4.30.1, rollup@npm:^4.34.8": + version: 4.39.0 + resolution: "rollup@npm:4.39.0" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.39.0" + "@rollup/rollup-android-arm64": "npm:4.39.0" + "@rollup/rollup-darwin-arm64": "npm:4.39.0" + "@rollup/rollup-darwin-x64": "npm:4.39.0" + "@rollup/rollup-freebsd-arm64": "npm:4.39.0" + "@rollup/rollup-freebsd-x64": "npm:4.39.0" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.39.0" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.39.0" + "@rollup/rollup-linux-arm64-gnu": "npm:4.39.0" + "@rollup/rollup-linux-arm64-musl": "npm:4.39.0" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.39.0" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.39.0" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.39.0" + "@rollup/rollup-linux-riscv64-musl": "npm:4.39.0" + "@rollup/rollup-linux-s390x-gnu": "npm:4.39.0" + "@rollup/rollup-linux-x64-gnu": "npm:4.39.0" + "@rollup/rollup-linux-x64-musl": "npm:4.39.0" + "@rollup/rollup-win32-arm64-msvc": "npm:4.39.0" + "@rollup/rollup-win32-ia32-msvc": "npm:4.39.0" + "@rollup/rollup-win32-x64-msvc": "npm:4.39.0" + "@types/estree": "npm:1.0.7" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loongarch64-gnu": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10/d3b106efb71cd501b71e3a56e3257ccad4d969a201d59aa2e74d9b91ad5f44c508ddebfbe3de82d4324e9b0977420d35d6cce8e45f784a91080acea66c1c1ce8 + languageName: node + linkType: hard + +"rrweb-cssom@npm:^0.8.0": + version: 0.8.0 + resolution: "rrweb-cssom@npm:0.8.0" + checksum: 10/07521ee36fb6569c17906afad1ac7ff8f099d49ade9249e190693ac36cdf27f88d9acf0cc66978935d5d0a23fca105643d7e9125b9a9d91ed9db9e02d31d7d80 + languageName: node + linkType: hard + +"run-async@npm:^2.4.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: 10/c79551224dafa26ecc281cb1efad3510c82c79116aaf681f8a931ce70fdf4ca880d58f97d3b930a38992c7aad7955a08e065b32ec194e1dd49d7790c874ece50 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10/cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"rxjs@npm:^7.5.5": + version: 7.8.2 + resolution: "rxjs@npm:7.8.2" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10/03dff09191356b2b87d94fbc1e97c4e9eb3c09d4452399dddd451b09c2f1ba8d56925a40af114282d7bc0c6fe7514a2236ca09f903cf70e4bbf156650dddb49d + languageName: node + linkType: hard + +"sade@npm:^1.8.1": + version: 1.8.1 + resolution: "sade@npm:1.8.1" + dependencies: + mri: "npm:^1.1.0" + checksum: 10/1c67ba03c94083e0ae307ff5564ecb86c2104c0f558042fdaa40ea0054f91a63a9783f14069870f2f784336adabb70f90f22a84dc457b5a25e859aaadefe0910 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: 10/7eb5b48f2ed9a594a4795677d5a150faa7eb54483b2318b568dc0c4fc94092a6cce5be02c7288a0500a156282f5276d5688bce7259299568d1053b2150ef374a + languageName: node + linkType: hard + +"safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10/7eaf7a0cf37cc27b42fb3ef6a9b1df6e93a1c6d98c6c6702b02fe262d5fcbd89db63320793b99b21cb5348097d0a53de81bd5f4e8b86e20cc9412e3f1cfb4e83 + languageName: node + linkType: hard + +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" + dependencies: + xmlchars: "npm:^2.2.0" + checksum: 10/97b50daf6ca3a153e89842efa18a862e446248296622b7473c169c84c823ee8a16e4a43bac2f73f11fc8cb9168c73fbb0d73340f26552bac17970e9052367aa9 + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: 10/fca14418a174d4b4ef1fecb32c5941e3412d52a4d3d85165924ce3a47fbc7073372c26faf7484ceb4bbc2bde25880c6b97e492473dc7e9708fdfb1c6a02d546e + languageName: node + linkType: hard + +"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.3, semver@npm:^7.7.1": + version: 7.7.1 + resolution: "semver@npm:7.7.1" + bin: + semver: bin/semver.js + checksum: 10/4cfa1eb91ef3751e20fc52e47a935a0118d56d6f15a837ab814da0c150778ba2ca4f1a4d9068b33070ea4273629e615066664c2cfcd7c272caf7a8a0f6518b2c + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 10/8980ebf7ae9eb945bb036b6e283c547ee783a1ad557a82babf758a065e2fb6ea337fd82cac30dd565c1e606e423f30024a19fff7afbf4977d784720c4026a8ef + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: "npm:^6.0.2" + checksum: 10/e066bd540cfec5e1b0f78134853e0d892d1c8945fb9a926a579946052e7cb0c70ca4fc34f875a8083aa7910d751805d36ae64af250a6de6f3d28f9fa7be6c21b + languageName: node + linkType: hard + +"sharp@npm:^0.33.5": + version: 0.33.5 + resolution: "sharp@npm:0.33.5" + dependencies: + "@img/sharp-darwin-arm64": "npm:0.33.5" + "@img/sharp-darwin-x64": "npm:0.33.5" + "@img/sharp-libvips-darwin-arm64": "npm:1.0.4" + "@img/sharp-libvips-darwin-x64": "npm:1.0.4" + "@img/sharp-libvips-linux-arm": "npm:1.0.5" + "@img/sharp-libvips-linux-arm64": "npm:1.0.4" + "@img/sharp-libvips-linux-s390x": "npm:1.0.4" + "@img/sharp-libvips-linux-x64": "npm:1.0.4" + "@img/sharp-libvips-linuxmusl-arm64": "npm:1.0.4" + "@img/sharp-libvips-linuxmusl-x64": "npm:1.0.4" + "@img/sharp-linux-arm": "npm:0.33.5" + "@img/sharp-linux-arm64": "npm:0.33.5" + "@img/sharp-linux-s390x": "npm:0.33.5" + "@img/sharp-linux-x64": "npm:0.33.5" + "@img/sharp-linuxmusl-arm64": "npm:0.33.5" + "@img/sharp-linuxmusl-x64": "npm:0.33.5" + "@img/sharp-wasm32": "npm:0.33.5" + "@img/sharp-win32-ia32": "npm:0.33.5" + "@img/sharp-win32-x64": "npm:0.33.5" + color: "npm:^4.2.3" + detect-libc: "npm:^2.0.3" + semver: "npm:^7.6.3" + dependenciesMeta: + "@img/sharp-darwin-arm64": + optional: true + "@img/sharp-darwin-x64": + optional: true + "@img/sharp-libvips-darwin-arm64": + optional: true + "@img/sharp-libvips-darwin-x64": + optional: true + "@img/sharp-libvips-linux-arm": + optional: true + "@img/sharp-libvips-linux-arm64": + optional: true + "@img/sharp-libvips-linux-s390x": + optional: true + "@img/sharp-libvips-linux-x64": + optional: true + "@img/sharp-libvips-linuxmusl-arm64": + optional: true + "@img/sharp-libvips-linuxmusl-x64": + optional: true + "@img/sharp-linux-arm": + optional: true + "@img/sharp-linux-arm64": + optional: true + "@img/sharp-linux-s390x": + optional: true + "@img/sharp-linux-x64": + optional: true + "@img/sharp-linuxmusl-arm64": + optional: true + "@img/sharp-linuxmusl-x64": + optional: true + "@img/sharp-wasm32": + optional: true + "@img/sharp-win32-ia32": + optional: true + "@img/sharp-win32-x64": + optional: true + checksum: 10/9f153578cb02735359cbcc874f52b56b8074ed997498c35255c7099d4f4f506f6ddf83a437a55242c7ad4f979336660504b6c78e29d6933f4981dedbdae5ce09 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10/6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10/1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10/603b928997abd21c5a5f02ae6b9cc36b72e3176ad6827fab0417ead74580cc4fb4d5c7d0a8a2ff4ead34d0f9e35701ed7a41853dac8a6d1a664fcce1a044f86f + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10/5771861f77feefe44f6195ed077a9e4f389acc188f895f570d56445e251b861754b547ea9ef73ecee4e01fdada6568bfe9020d2ec2dfc5571e9fa1bbc4a10615 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10/a815c89bc78c5723c714ea1a77c938377ea710af20d4fb886d362b0d1f8ac73a17816a5f6640f354017d7e292a43da9c5e876c22145bac00b76cfb3468001736 + languageName: node + linkType: hard + +"side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10/7d53b9db292c6262f326b6ff3bc1611db84ece36c2c7dc0e937954c13c73185b0406c56589e2bb8d071d6fee468e14c39fb5d203ee39be66b7b8174f179afaba + languageName: node + linkType: hard + +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10/e93ff66c6531a079af8fb217240df01f980155b5dc408d2d7bebc398dd284e383eb318153bf8acd4db3c4fe799aa5b9a641e38b0ba3b1975700b1c89547ea4e7 + languageName: node + linkType: hard + +"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10/a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10/c9fa63bbbd7431066174a48ba2dd9986dfd930c3a8b59de9c29d7b6854ec1c12a80d15310869ea5166d413b99f041bfa3dd80a7947bcd44ea8e6eb3ffeabfa1f + languageName: node + linkType: hard + +"sigstore@npm:^2.2.0": + version: 2.3.1 + resolution: "sigstore@npm:2.3.1" + dependencies: + "@sigstore/bundle": "npm:^2.3.2" + "@sigstore/core": "npm:^1.0.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + "@sigstore/sign": "npm:^2.3.2" + "@sigstore/tuf": "npm:^2.3.4" + "@sigstore/verify": "npm:^1.2.1" + checksum: 10/4e0a82338d12370264dced2395cda18aaaad45fec630365ec88eaa1a4ba40f5eb08cd3b0c8688489d52e93f643b6598d682961f67858636f55300c590b1ddf62 + languageName: node + linkType: hard + +"simple-swizzle@npm:^0.2.2": + version: 0.2.2 + resolution: "simple-swizzle@npm:0.2.2" + dependencies: + is-arrayish: "npm:^0.3.1" + checksum: 10/c6dffff17aaa383dae7e5c056fbf10cf9855a9f79949f20ee225c04f06ddde56323600e0f3d6797e82d08d006e93761122527438ee9531620031c08c9e0d73cc + languageName: node + linkType: hard + +"skin-tone@npm:^2.0.0": + version: 2.0.0 + resolution: "skin-tone@npm:2.0.0" + dependencies: + unicode-emoji-modifier-base: "npm:^1.0.0" + checksum: 10/19de157586b8019cacc55eb25d9d640f00fc02415761f3e41a4527142970fd4e7f6af0333bc90e879858766c20a976107bb386ffd4c812289c01d51f2c8d182c + languageName: node + linkType: hard + +"slash@npm:3.0.0, slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10/94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10/927484aa0b1640fd9473cee3e0a0bcad6fce93fd7bbc18bac9ad0c33686f5d2e2c422fba24b5899c184524af01e11dd2bd051c2bf2b07e47aff8ca72cbfc60d2 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10/ee99e1dacab0985b52cbe5a75640be6e604135e9489ebdc3048635d186012fbaecc20fbbe04b177dee434c319ba20f09b3e7dfefb7d932466c0d707744eac05c + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.4 + resolution: "socks@npm:2.8.4" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10/ab3af97aeb162f32c80e176c717ccf16a11a6ebb4656a62b94c0f96495ea2a1f4a8206c04b54438558485d83d0c5f61920c07a1a5d3963892a589b40cc6107dd + languageName: node + linkType: hard + +"sort-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "sort-keys@npm:2.0.0" + dependencies: + is-plain-obj: "npm:^1.0.0" + checksum: 10/255f9fb393ef60a3db508e0cc5b18ef401127dbb2376b205ae27d168e245fc0d6b35267dde98fab6410dde684c9321f7fc8bf71f2b051761973231617753380d + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10/ff9d8c8bf096d534a5b7707e0382ef827b4dd360a577d3f34d2b9f48e12c9d230b5747974ee7c607f0df65113732711bb701fe9ece3c7edbd43cb2294d707df3 + languageName: node + linkType: hard + +"source-map@npm:0.8.0-beta.0": + version: 0.8.0-beta.0 + resolution: "source-map@npm:0.8.0-beta.0" + dependencies: + whatwg-url: "npm:^7.0.0" + checksum: 10/c02e22ab9f8b8e38655ba1e9abae9fe1f8ba216cbbea922718d5e2ea45821606a74f10edec1db9055e7f7cfd1e6a62e5eade67ec30c017a02f4c8e990accbc1c + languageName: node + linkType: hard + +"source-map@npm:^0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10/59ef7462f1c29d502b3057e822cdbdae0b0e565302c4dd1a95e11e793d8d9d62006cdc10e0fd99163ca33ff2071360cf50ee13f90440806e7ed57d81cba2f7ff + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: "npm:^3.0.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10/cc2e4dbef822f6d12142116557d63f5facf3300e92a6bd24e907e4865e17b7e1abd0ee6b67f305cae6790fc2194175a24dc394bfcc01eea84e2bdad728e9ae9a + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10/bb127d6e2532de65b912f7c99fc66097cdea7d64c10d3ec9b5e96524dbbd7d20e01cba818a6ddb2ae75e62bb0c63d5e277a7e555a85cbc8ab40044984fa4ae15 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10/a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.21 + resolution: "spdx-license-ids@npm:3.0.21" + checksum: 10/17a033b4c3485f081fc9faa1729dde8782a85d9131b156f2397c71256c2e1663132857d3cba1457c4965f179a4dcf1b69458a31e9d3d0c766d057ef0e3a0b4f2 + languageName: node + linkType: hard + +"split2@npm:^3.2.2": + version: 3.2.2 + resolution: "split2@npm:3.2.2" + dependencies: + readable-stream: "npm:^3.0.0" + checksum: 10/a426e1e6718e2f7e50f102d5ec3525063d885e3d9cec021a81175fd3497fdb8b867a89c99e70bef4daeef4f2f5e544f7b92df8c1a30b4254e10a9cfdcc3dae87 + languageName: node + linkType: hard + +"split@npm:^1.0.1": + version: 1.0.1 + resolution: "split@npm:1.0.1" + dependencies: + through: "npm:2" + checksum: 10/12f4554a5792c7e98bb3e22b53c63bfa5ef89aa704353e1db608a55b51f5b12afaad6e4a8ecf7843c15f273f43cdadd67b3705cc43d48a75c2cf4641d51f7e7a + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10/e7587128c423f7e43cc625fe2f87e6affdf5ca51c1cc468e910d8aaca46bb44a7fbcfa552f787b1d3987f7043aeb4527d1b99559e6621e01b42b3f45e5a24cbb + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 10/c34828732ab8509c2741e5fd1af6b767c3daf2c642f267788f933a65b1614943c282e74c4284f4fa749c264b18ee016a0d37a3e5b73aee446da46277d3a85daa + languageName: node + linkType: hard + +"ssri@npm:^10.0.0, ssri@npm:^10.0.6": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10/f92c1b3cc9bfd0a925417412d07d999935917bc87049f43ebec41074661d64cf720315661844106a77da9f8204b6d55ae29f9514e673083cae39464343af2a8b + languageName: node + linkType: hard + +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10/7024c1a6e39b3f18aa8f1c8290e884fe91b0f9ca5a6c6d410544daad54de0ba664db879afe16412e187c6c292fd60b937f047ee44292e5c2af2dcc6d8e1a9b48 + languageName: node + linkType: hard + +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10/2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 + languageName: node + linkType: hard + +"stacktracey@npm:^2.1.8": + version: 2.1.8 + resolution: "stacktracey@npm:2.1.8" + dependencies: + as-table: "npm:^1.0.36" + get-source: "npm:^2.0.12" + checksum: 10/c87f708b639636788c4b46ecc6e503c27b6124bec724bcdc3180d7cdddfab0dee370225009e3b407adaedf847362cfc77af64f01c805516e39a28d16c6d40df8 + languageName: node + linkType: hard + +"std-env@npm:^3.8.1": + version: 3.9.0 + resolution: "std-env@npm:3.9.0" + checksum: 10/3044b2c54a74be4f460db56725571241ab3ac89a91f39c7709519bc90fa37148784bc4cd7d3a301aa735f43bd174496f263563f76703ce3e81370466ab7c235b + languageName: node + linkType: hard + +"stoppable@npm:1.1.0": + version: 1.1.0 + resolution: "stoppable@npm:1.1.0" + checksum: 10/63104fcbdece130bc4906fd982061e763d2ef48065ed1ab29895e5ad00552c625f8a4c50c9cd2e3bfa805c8a2c3bfdda0f07c5ae39694bd2d5cb0bee1618d1e9 + languageName: node + linkType: hard + +"strict-event-emitter@npm:^0.5.1": + version: 0.5.1 + resolution: "strict-event-emitter@npm:0.5.1" + checksum: 10/25c84d88be85940d3547db665b871bfecea4ea0bedfeb22aae8db48126820cfb2b0bc2fba695392592a09b1aa36b686d6eede499e1ecd151593c03fe5a50d512 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10/e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10/7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10/54d23f4a6acae0e93f999a585e673be9e561b65cd4cca37714af1e893ab8cd8dfa52a9e4f58f48f87b4a44918d3a9254326cb80ed194bf2e4c226e2b21767e56 + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: "npm:~5.1.0" + checksum: 10/7c41c17ed4dea105231f6df208002ebddd732e8e9e2d619d133cecd8e0087ddfd9587d2feb3c8caf3213cbd841ada6d057f5142cae68a4e62d3540778d9819b4 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10/ae3b5436d34fadeb6096367626ce987057713c566e1e7768818797e00ac5d62023d0f198c4e681eae9e20701721980b26a64a8f5b91238869592a9c6800719a2 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10/475f53e9c44375d6e72807284024ac5d668ee1d06010740dec0b9744f2ddf47de8d7151f80e5f6190fc8f384e802fdf9504b76a7e9020c9faee7103623338be2 + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 10/8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b + languageName: node + linkType: hard + +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 10/9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 10/69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 + languageName: node + linkType: hard + +"strip-final-newline@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-final-newline@npm:4.0.0" + checksum: 10/b5fe48f695d74863153a3b3155220e6e9bf51f4447832998c8edec38e6559b3af87a9fe5ac0df95570a78a26f5fa91701358842eab3c15480e27980b154a145f + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: "npm:^1.0.0" + checksum: 10/18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 + languageName: node + linkType: hard + +"strong-log-transformer@npm:2.1.0": + version: 2.1.0 + resolution: "strong-log-transformer@npm:2.1.0" + dependencies: + duplexer: "npm:^0.1.1" + minimist: "npm:^1.2.0" + through: "npm:^2.3.4" + bin: + sl-log-transformer: bin/sl-log-transformer.js + checksum: 10/2fd14eb0a68893fdadefd89f964df404e3d637729c48aca015eb12d1c47455dee28b2522ad7150de23f7a57cce503656585e7644c9cd8532023ea572f8cc5a80 + languageName: node + linkType: hard + +"sucrase@npm:^3.35.0": + version: 3.35.0 + resolution: "sucrase@npm:3.35.0" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.2" + commander: "npm:^4.0.0" + glob: "npm:^10.3.10" + lines-and-columns: "npm:^1.1.6" + mz: "npm:^2.7.0" + pirates: "npm:^4.0.1" + ts-interface-checker: "npm:^0.1.9" + bin: + sucrase: bin/sucrase + sucrase-node: bin/sucrase-node + checksum: 10/bc601558a62826f1c32287d4fdfa4f2c09fe0fec4c4d39d0e257fd9116d7d6227a18309721d4185ec84c9dc1af0d5ec0e05a42a337fbb74fc293e068549aacbe + languageName: node + linkType: hard + +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10/c8bb7afd564e3b26b50ca6ee47572c217526a1389fe018d00345856d4a9b08ffbd61fadaf283a87368d94c3dcdb8f5ffe2650a5a65863e21ad2730ca0f05210a + languageName: node + linkType: hard + +"supports-hyperlinks@npm:^3.1.0": + version: 3.2.0 + resolution: "supports-hyperlinks@npm:3.2.0" + dependencies: + has-flag: "npm:^4.0.0" + supports-color: "npm:^7.0.0" + checksum: 10/f7924de6049fc30bc808f98d3561318c1a4e3d55d786f9fede5e23dc5a7b0f625485bd1143135b496d521ccd0110463f2c077eb71a4ce0cf783b8b31f7909242 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10/a9dc19ae2220c952bd2231d08ddeecb1b0328b61e72071ff4000c8384e145cc07c1c0bdb3b5a1cb06e186a7b2790f1dee793418b332f6ddf320de25d9125be7e + languageName: node + linkType: hard + +"symbol-tree@npm:^3.2.4": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: 10/c09a00aadf279d47d0c5c46ca3b6b2fbaeb45f0a184976d599637d412d3a70bbdc043ff33effe1206dea0e36e0ad226cb957112e7ce9a4bf2daedf7fa4f85c53 + languageName: node + linkType: hard + +"tar-stream@npm:~2.2.0": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: "npm:^4.0.3" + end-of-stream: "npm:^1.4.1" + fs-constants: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + checksum: 10/1a52a51d240c118cbcd30f7368ea5e5baef1eac3e6b793fb1a41e6cd7319296c79c0264ccc5859f5294aa80f8f00b9239d519e627b9aade80038de6f966fec6a + languageName: node + linkType: hard + +"tar@npm:6.2.1, tar@npm:^6.1.11, tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10/bfbfbb2861888077fc1130b84029cdc2721efb93d1d1fb80f22a7ac3a98ec6f8972f29e564103bbebf5e97be67ebc356d37fa48dbc4960600a1eb7230fbd1ea0 + languageName: node + linkType: hard + +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10/12a2a4fc6dee23e07cc47f1aeb3a14a1afd3f16397e1350036a8f4cdfee8dcac7ef5978337a4e7b2ac2c27a9a6d46388fc2088ea7c80cb6878c814b1425f8ecf + languageName: node + linkType: hard + +"temp-dir@npm:1.0.0": + version: 1.0.0 + resolution: "temp-dir@npm:1.0.0" + checksum: 10/cb2b58ddfb12efa83e939091386ad73b425c9a8487ea0095fe4653192a40d49184a771a1beba99045fbd011e389fd563122d79f54f82be86a55620667e08a6b2 + languageName: node + linkType: hard + +"text-extensions@npm:^1.0.0": + version: 1.9.0 + resolution: "text-extensions@npm:1.9.0" + checksum: 10/56a9962c1b62d39b2bcb369b7558ca85c1b55e554b38dfd725edcc0a1babe5815782a60c17ff6b839093b163dfebb92b804208aaaea616ec7571c8059ae0cf44 + languageName: node + linkType: hard + +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: "npm:>= 3.1.0 < 4" + checksum: 10/dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: "npm:^1.0.0" + checksum: 10/486e1283a867440a904e36741ff1a177faa827cf94d69506f7e3ae4187b9afdf9ec368b3d8da225c192bfe2eb943f3f0080594156bf39f21b57cd1411e2e7f6d + languageName: node + linkType: hard + +"through2@npm:^2.0.0": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: "npm:~2.3.6" + xtend: "npm:~4.0.1" + checksum: 10/cd71f7dcdc7a8204fea003a14a433ef99384b7d4e31f5497e1f9f622b3cf3be3691f908455f98723bdc80922a53af7fa10c3b7abbe51c6fd3d536dbc7850e2c4 + languageName: node + linkType: hard + +"through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.4, through@npm:^2.3.6": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: 10/5da78346f70139a7d213b65a0106f3c398d6bc5301f9248b5275f420abc2c4b1e77c2abc72d218dedc28c41efb2e7c312cb76a7730d04f9c2d37d247da3f4198 + languageName: node + linkType: hard + +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10/cfa1e1418e91289219501703c4693c70708c91ffb7f040fd318d24aef419fb5a43e0c0160df9471499191968b2451d8da7f8087b08c3133c251c40d24aced06c + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.2": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10/b9d5fed3166fb1acd1e7f9a89afcd97ccbe18b9c1af0278e429455f6976d69271ba2d21797e7c36d57d6b05025e525d2882d88c2ab435b60d1ddf2fea361de57 + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.11, tinyglobby@npm:^0.2.12": + version: 0.2.12 + resolution: "tinyglobby@npm:0.2.12" + dependencies: + fdir: "npm:^6.4.3" + picomatch: "npm:^4.0.2" + checksum: 10/4ad28701fa9118b32ef0e27f409e0a6c5741e8b02286d50425c1f6f71e6d6c6ded9dd5bbbbb714784b08623c4ec4d150151f1d3d996cfabe0495f908ab4f7002 + languageName: node + linkType: hard + +"tinypool@npm:^1.0.2": + version: 1.0.2 + resolution: "tinypool@npm:1.0.2" + checksum: 10/6109322f14b3763f65c8fa49fddab72cd3edd96b82dd50e05e63de74867329ff5353bff4377281ec963213d9314f37f4a353e9ee34bbac85fd4c1e4a568d6076 + languageName: node + linkType: hard + +"tinyrainbow@npm:^2.0.0": + version: 2.0.0 + resolution: "tinyrainbow@npm:2.0.0" + checksum: 10/94d4e16246972614a5601eeb169ba94f1d49752426312d3cf8cc4f2cc663a2e354ffc653aa4de4eebccbf9eeebdd0caef52d1150271fdfde65d7ae7f3dcb9eb5 + languageName: node + linkType: hard + +"tinyspy@npm:^3.0.2": + version: 3.0.2 + resolution: "tinyspy@npm:3.0.2" + checksum: 10/5db671b2ff5cd309de650c8c4761ca945459d7204afb1776db9a04fb4efa28a75f08517a8620c01ee32a577748802231ad92f7d5b194dc003ee7f987a2a06337 + languageName: node + linkType: hard + +"tldts-core@npm:^6.1.85": + version: 6.1.85 + resolution: "tldts-core@npm:6.1.85" + checksum: 10/4068bede7cd6b690387621e2740758ec1205c8b2ee3ce6dc9d0b9d09b7b659f6dfc6129b2e3227c363d4015d62528580d378cbf0c28e94de55f10206f67adadc + languageName: node + linkType: hard + +"tldts@npm:^6.1.32": + version: 6.1.85 + resolution: "tldts@npm:6.1.85" + dependencies: + tldts-core: "npm:^6.1.85" + bin: + tldts: bin/cli.js + checksum: 10/f3270f24ed57efcbb34364e827dc1cace9b5b95a2668051e69e21ad75df49466cfeaef47e7e9b56541ef633eff1e083a43b006b6306a9d2d24e5c36a038cb400 + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: "npm:~1.0.2" + checksum: 10/09c0abfd165cff29b32be42bc35e80b8c64727d97dedde6550022e88fa9fd39a084660415ed8e3ebaa2aca1ee142f86df8b31d4196d4f81c774a3a20fd4b6abf + languageName: node + linkType: hard + +"tmp@npm:~0.2.1": + version: 0.2.3 + resolution: "tmp@npm:0.2.3" + checksum: 10/7b13696787f159c9754793a83aa79a24f1522d47b87462ddb57c18ee93ff26c74cbb2b8d9138f571d2e0e765c728fb2739863a672b280528512c6d83d511c6fa + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10/10dda13571e1f5ad37546827e9b6d4252d2e0bc176c24a101252153ef435d83696e2557fe128c4678e4e78f5f01e83711c703eef9814eb12dab028580d45980a + languageName: node + linkType: hard + +"tough-cookie@npm:^5.0.0": + version: 5.1.2 + resolution: "tough-cookie@npm:5.1.2" + dependencies: + tldts: "npm:^6.1.32" + checksum: 10/de430e6e6d34b794137e05b8ac2aa6b74ebbe6cdceb4126f168cf1e76101162a4b2e0e7587c3b70e728bd8654fc39958b2035be7619ee6f08e7257610ba4cd04 + languageName: node + linkType: hard + +"tr46@npm:^1.0.1": + version: 1.0.1 + resolution: "tr46@npm:1.0.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10/6e80d75480cb6658f7f283c15f5f41c2d4dfa243ca99a0e1baf3de6cc823fc4c829f89782a7a11e029905781fccfea42d08d8a6674ba7948c7dbc595b6f27dd3 + languageName: node + linkType: hard + +"tr46@npm:^5.1.0": + version: 5.1.0 + resolution: "tr46@npm:5.1.0" + dependencies: + punycode: "npm:^2.3.1" + checksum: 10/2f0249354018432250bc31287f857cb7a73c43a1753b0ddccc97d140d261fe5deddeb1bf1d77afbdb29f867721f46238e3f32e97b473ba0c7e29bc5c34ccc08f + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10/8f1f5aa6cb232f9e1bdc86f485f916b7aa38caee8a778b378ffec0b70d9307873f253f5cbadbe2955ece2ac5c83d0dc14a77513166ccd0a0c7fe197e21396695 + languageName: node + linkType: hard + +"tree-kill@npm:^1.2.2": + version: 1.2.2 + resolution: "tree-kill@npm:1.2.2" + bin: + tree-kill: cli.js + checksum: 10/49117f5f410d19c84b0464d29afb9642c863bc5ba40fcb9a245d474c6d5cc64d1b177a6e6713129eb346b40aebb9d4631d967517f9fbe8251c35b21b13cd96c7 + languageName: node + linkType: hard + +"treeverse@npm:^3.0.0": + version: 3.0.0 + resolution: "treeverse@npm:3.0.0" + checksum: 10/a053ad73f800c64c53ecf0effe7ea12e16eae1cf03f0901ac6b61390b6440d05d0aa8c942b6e77d2e9237d247b36fd405284942419f3817c9c3ef43bc5236218 + languageName: node + linkType: hard + +"trim-newlines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-newlines@npm:3.0.1" + checksum: 10/b530f3fadf78e570cf3c761fb74fef655beff6b0f84b29209bac6c9622db75ad1417f4a7b5d54c96605dcd72734ad44526fef9f396807b90839449eb543c6206 + languageName: node + linkType: hard + +"ts-interface-checker@npm:^0.1.9": + version: 0.1.13 + resolution: "ts-interface-checker@npm:0.1.13" + checksum: 10/9f7346b9e25bade7a1050c001ec5a4f7023909c0e1644c5a96ae20703a131627f081479e6622a4ecee2177283d0069e651e507bedadd3904fc4010ab28ffce00 + languageName: node + linkType: hard + +"ts-node@npm:10.9.2": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": "npm:^0.8.0" + "@tsconfig/node10": "npm:^1.0.7" + "@tsconfig/node12": "npm:^1.0.7" + "@tsconfig/node14": "npm:^1.0.0" + "@tsconfig/node16": "npm:^1.0.2" + acorn: "npm:^8.4.1" + acorn-walk: "npm:^8.1.1" + arg: "npm:^4.1.0" + create-require: "npm:^1.1.0" + diff: "npm:^4.0.1" + make-error: "npm:^1.1.1" + v8-compile-cache-lib: "npm:^3.0.1" + yn: "npm:3.1.1" + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 10/a91a15b3c9f76ac462f006fa88b6bfa528130dcfb849dd7ef7f9d640832ab681e235b8a2bc58ecde42f72851cc1d5d4e22c901b0c11aa51001ea1d395074b794 + languageName: node + linkType: hard + +"tsconfig-paths@npm:^4.1.2": + version: 4.2.0 + resolution: "tsconfig-paths@npm:4.2.0" + dependencies: + json5: "npm:^2.2.2" + minimist: "npm:^1.2.6" + strip-bom: "npm:^3.0.0" + checksum: 10/5e55cc2fb6b800eb72011522e10edefccb45b1f9af055681a51354c9b597d1390c6fa9cc356b8c7529f195ac8a90a78190d563159f3a1eed10e01bbd4d01a8ab + languageName: node + linkType: hard + +"tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10/3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7 + languageName: node + linkType: hard + +"tsup@npm:8.4.0": + version: 8.4.0 + resolution: "tsup@npm:8.4.0" + dependencies: + bundle-require: "npm:^5.1.0" + cac: "npm:^6.7.14" + chokidar: "npm:^4.0.3" + consola: "npm:^3.4.0" + debug: "npm:^4.4.0" + esbuild: "npm:^0.25.0" + joycon: "npm:^3.1.1" + picocolors: "npm:^1.1.1" + postcss-load-config: "npm:^6.0.1" + resolve-from: "npm:^5.0.0" + rollup: "npm:^4.34.8" + source-map: "npm:0.8.0-beta.0" + sucrase: "npm:^3.35.0" + tinyexec: "npm:^0.3.2" + tinyglobby: "npm:^0.2.11" + tree-kill: "npm:^1.2.2" + peerDependencies: + "@microsoft/api-extractor": ^7.36.0 + "@swc/core": ^1 + postcss: ^8.4.12 + typescript: ">=4.5.0" + peerDependenciesMeta: + "@microsoft/api-extractor": + optional: true + "@swc/core": + optional: true + postcss: + optional: true + typescript: + optional: true + bin: + tsup: dist/cli-default.js + tsup-node: dist/cli-node.js + checksum: 10/40a7000d50f4c1858495ac12b2547a8eb3d5730d7db2f0ff12bd43640859d4808f8ed63712e73d60fb2595e5867114c80b4eb05f107620f192767efcdbef529b + languageName: node + linkType: hard + +"tuf-js@npm:^2.2.1": + version: 2.2.1 + resolution: "tuf-js@npm:2.2.1" + dependencies: + "@tufjs/models": "npm:2.0.1" + debug: "npm:^4.3.4" + make-fetch-happen: "npm:^13.0.1" + checksum: 10/4c057f4f0cfb183d8634c026a592f4fb29fd4e3d88260e32949642deedf87a1ae407645bae4cca58299458679a1cb7721245cde1885d466c2dbc1fbac0bc008a + languageName: node + linkType: hard + +"type-fest@npm:^0.18.0": + version: 0.18.1 + resolution: "type-fest@npm:0.18.1" + checksum: 10/08844377058435c2b0e633ba01bab6102dba0ed63d85417d8e18feff265eed6f5c9f8f9a25d405ea9db88a41a569be73a3c4c0d4e29150bf89fb145bb23114a2 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 10/f4254070d9c3d83a6e573bcb95173008d73474ceadbbf620dd32d273940ca18734dff39c2b2480282df9afe5d1675ebed5499a00d791758748ea81f61a38961f + languageName: node + linkType: hard + +"type-fest@npm:^0.4.1": + version: 0.4.1 + resolution: "type-fest@npm:0.4.1" + checksum: 10/ee6c77378ab0e5b1cb5a408671b03e3edda52bbba6976dc10daf966e5919adbf9553eb597dd23ff3cdfbed7370e9641441a579369d9de94fe9cc12b14b29ccaf + languageName: node + linkType: hard + +"type-fest@npm:^0.6.0": + version: 0.6.0 + resolution: "type-fest@npm:0.6.0" + checksum: 10/9ecbf4ba279402b14c1a0614b6761bbe95626fab11377291fecd7e32b196109551e0350dcec6af74d97ced1b000ba8060a23eca33157091e642b409c2054ba82 + languageName: node + linkType: hard + +"type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: 10/fd4a91bfb706aeeb0d326ebd2e9a8ea5263979e5dec8d16c3e469a5bd3a946e014a062ef76c02e3086d3d1c7209a56a20a4caafd0e9f9a5c2ab975084ea3d388 + languageName: node + linkType: hard + +"typedarray@npm:^0.0.6": + version: 0.0.6 + resolution: "typedarray@npm:0.0.6" + checksum: 10/2cc1bcf7d8c1237f6a16c04efc06637b2c5f2d74e58e84665445cf87668b85a21ab18dd751fa49eee6ae024b70326635d7b79ad37b1c370ed2fec6aeeeb52714 + languageName: node + linkType: hard + +"typescript@npm:5.6.1-rc": + version: 5.6.1-rc + resolution: "typescript@npm:5.6.1-rc" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/5716659d5baf142b5c84b96209b30730a5e9dcc0202f879349f9974823f7452ec4ef3904397b6d89d861c688acdbb1dad0a449d753163519fae2ee06ea4a68be + languageName: node + linkType: hard + +"typescript@npm:5.8.3, typescript@npm:>=3 < 6": + version: 5.8.3 + resolution: "typescript@npm:5.8.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/65c40944c51b513b0172c6710ee62e951b70af6f75d5a5da745cb7fab132c09ae27ffdf7838996e3ed603bb015dadd099006658046941bd0ba30340cc563ae92 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A5.6.1-rc#optional!builtin": + version: 5.6.1-rc + resolution: "typescript@patch:typescript@npm%3A5.6.1-rc#optional!builtin::version=5.6.1-rc&hash=8c6c40" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/462e0bb46c63abfc5bfc43f2bb00b9777a4228f3ed52d8930b46404dce71dbada63c27a99262ff4570b5ff7d01455701bfd36823bd3c766e443b6fa33cd31dea + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A5.8.3#optional!builtin, typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin": + version: 5.8.3 + resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/b9b1e73dabac5dc730c041325dbd9c99467c1b0d239f1b74ec3b90d831384af3e2ba973946232df670519147eb51a2c20f6f96163cea2b359f03de1e2091cc4f + languageName: node + linkType: hard + +"ufo@npm:^1.5.4": + version: 1.5.4 + resolution: "ufo@npm:1.5.4" + checksum: 10/a885ed421e656aea6ca64e9727b8118a9488715460b6f1a0f0427118adfe2f2830fe7c1d5bd9c5c754a332e6807516551cd663ea67ce9ed6a4e3edc739916335 + languageName: node + linkType: hard + +"uglify-js@npm:^3.1.4": + version: 3.19.3 + resolution: "uglify-js@npm:3.19.3" + bin: + uglifyjs: bin/uglifyjs + checksum: 10/6b9639c1985d24580b01bb0ab68e78de310d38eeba7db45bec7850ab4093d8ee464d80ccfaceda9c68d1c366efbee28573b52f95e69ac792354c145acd380b11 + languageName: node + linkType: hard + +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 10/ec8f41aa4359d50f9b59fa61fe3efce3477cc681908c8f84354d8567bb3701fafdddf36ef6bff307024d3feb42c837cf6f670314ba37fc8145e219560e473d14 + languageName: node + linkType: hard + +"undici@npm:^5.28.5": + version: 5.29.0 + resolution: "undici@npm:5.29.0" + dependencies: + "@fastify/busboy": "npm:^2.0.0" + checksum: 10/0ceca8924a32acdcc0cfb8dd2d368c217840970aa3f5e314fc169608474be6341c5b8e50cad7bd257dbe3b4e432bc5d0a0d000f83644b54fa11a48735ec52b93 + languageName: node + linkType: hard + +"unenv@npm:2.0.0-rc.15": + version: 2.0.0-rc.15 + resolution: "unenv@npm:2.0.0-rc.15" + dependencies: + defu: "npm:^6.1.4" + exsolve: "npm:^1.0.4" + ohash: "npm:^2.0.11" + pathe: "npm:^2.0.3" + ufo: "npm:^1.5.4" + checksum: 10/3c6a02eee78477091fe2b07fc3a6cf9e99c157fca8ab0b024455e43eabc1e9d13b95b2cef67bf593eddf38f33707ede9fa89bf64b51e24864766c56d540db3e6 + languageName: node + linkType: hard + +"unicode-emoji-modifier-base@npm:^1.0.0": + version: 1.0.0 + resolution: "unicode-emoji-modifier-base@npm:1.0.0" + checksum: 10/6e1521d35fa69493207eb8b41f8edb95985d8b3faf07c01d820a1830b5e8403e20002563e2f84683e8e962a49beccae789f0879356bf92a4ec7a4dd8e2d16fdb + languageName: node + linkType: hard + +"unicorn-magic@npm:^0.3.0": + version: 0.3.0 + resolution: "unicorn-magic@npm:0.3.0" + checksum: 10/bdd7d7c522f9456f32a0b77af23f8854f9a7db846088c3868ec213f9550683ab6a2bdf3803577eacbafddb4e06900974385841ccb75338d17346ccef45f9cb01 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 10/8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: "npm:^5.0.0" + checksum: 10/6a62094fcac286b9ec39edbd1f8f64ff92383baa430af303dfed1ffda5e47a08a6b316408554abfddd9730c78b6106bef4ca4d02c1231a735ddd56ced77573df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10/40912a8963fc02fb8b600cf50197df4a275c602c60de4cac4f75879d3c48558cfac48de08a25cc10df8112161f7180b3bbb4d662aadb711568602f9eddee54f0 + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10/beafdf3d6f44990e0a5ce560f8f881b4ee811be70b6ba0db25298c31c8cf525ed963572b48cd03be1c1349084f9e339be4241666d7cf1ebdad20598d3c652b27 + languageName: node + linkType: hard + +"universal-user-agent@npm:^6.0.0": + version: 6.0.1 + resolution: "universal-user-agent@npm:6.0.1" + checksum: 10/fdc8e1ae48a05decfc7ded09b62071f571c7fe0bd793d700704c80cea316101d4eac15cc27ed2bb64f4ce166d2684777c3198b9ab16034f547abea0d3aa1c93c + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10/ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 + languageName: node + linkType: hard + +"upath@npm:2.0.1": + version: 2.0.1 + resolution: "upath@npm:2.0.1" + checksum: 10/7b98a83559a295d59f87f7a8d615c7549d19e4aec4dd9d52be2bf1ba93e1d6ee7d8f2188cdecbf303a22cea3768abff4268b960350152a0264125f577d9ed79e + languageName: node + linkType: hard + +"url@npm:^0.11.0": + version: 0.11.4 + resolution: "url@npm:0.11.4" + dependencies: + punycode: "npm:^1.4.1" + qs: "npm:^6.12.3" + checksum: 10/e787d070f0756518b982a4653ef6cdf4d9030d8691eee2d483344faf2b530b71d302287fa63b292299455fea5075c502a5ad5f920cb790e95605847f957a65e4 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10/474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"uuid@npm:^10.0.0": + version: 10.0.0 + resolution: "uuid@npm:10.0.0" + bin: + uuid: dist/bin/uuid + checksum: 10/35aa60614811a201ff90f8ca5e9ecb7076a75c3821e17f0f5ff72d44e36c2d35fcbc2ceee9c4ac7317f4cc41895da30e74f3885e30313bee48fda6338f250538 + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 10/88d3423a52b6aaf1836be779cab12f7016d47ad8430dffba6edf766695e6d90ad4adaa3d8eeb512cc05924f3e246c4a4ca51e089dccf4402caa536b5e5be8961 + languageName: node + linkType: hard + +"validate-npm-package-license@npm:3.0.4, validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: "npm:^3.0.0" + spdx-expression-parse: "npm:^3.0.0" + checksum: 10/86242519b2538bb8aeb12330edebb61b4eb37fd35ef65220ab0b03a26c0592c1c8a7300d32da3cde5abd08d18d95e8dabfad684b5116336f6de9e6f207eec224 + languageName: node + linkType: hard + +"validate-npm-package-name@npm:5.0.1, validate-npm-package-name@npm:^5.0.0": + version: 5.0.1 + resolution: "validate-npm-package-name@npm:5.0.1" + checksum: 10/0d583a1af23aeffea7748742cf22b6802458736fb8b60323ba5949763824d46f796474b0e1b9206beb716f9d75269e19dbd7795d6b038b29d561be95dd827381 + languageName: node + linkType: hard + +"vite-node@npm:3.1.1": + version: 3.1.1 + resolution: "vite-node@npm:3.1.1" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.4.0" + es-module-lexer: "npm:^1.6.0" + pathe: "npm:^2.0.3" + vite: "npm:^5.0.0 || ^6.0.0" + bin: + vite-node: vite-node.mjs + checksum: 10/8243cbc2d83f7862d7882c982e85f3e45a654908de380591edd419338c4c75a7991bd22d12b290ad892b9ea102419e81fde92c87296ec7554f89d2ff2034d5e3 + languageName: node + linkType: hard + +"vite@npm:^5.0.0 || ^6.0.0": + version: 6.2.5 + resolution: "vite@npm:6.2.5" + dependencies: + esbuild: "npm:^0.25.0" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.5.3" + rollup: "npm:^4.30.1" + peerDependencies: + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: ">=1.21.0" + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10/354023589439e7e2bcb77af79d24cd06ce20cfc48b409e663c44e515b373b89eb8f29362223eac16a3ff080d3114e40bc5df158372279d92ad03eb270f9e9762 + languageName: node + linkType: hard + +"vitest@npm:3.1.1": + version: 3.1.1 + resolution: "vitest@npm:3.1.1" + dependencies: + "@vitest/expect": "npm:3.1.1" + "@vitest/mocker": "npm:3.1.1" + "@vitest/pretty-format": "npm:^3.1.1" + "@vitest/runner": "npm:3.1.1" + "@vitest/snapshot": "npm:3.1.1" + "@vitest/spy": "npm:3.1.1" + "@vitest/utils": "npm:3.1.1" + chai: "npm:^5.2.0" + debug: "npm:^4.4.0" + expect-type: "npm:^1.2.0" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + std-env: "npm:^3.8.1" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.2" + tinypool: "npm:^1.0.2" + tinyrainbow: "npm:^2.0.0" + vite: "npm:^5.0.0 || ^6.0.0" + vite-node: "npm:3.1.1" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/debug": ^4.1.12 + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + "@vitest/browser": 3.1.1 + "@vitest/ui": 3.1.1 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/debug": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10/9dc54ef6854f877ad524667a0f3798b6c97c8138bee15a3dbad76557a45e3a3e42d438140df7a9eeaa10e5da7b5eb74ba854f06ffd233fa3c9e5936f6ae42e97 + languageName: node + linkType: hard + +"w3c-xmlserializer@npm:^5.0.0": + version: 5.0.0 + resolution: "w3c-xmlserializer@npm:5.0.0" + dependencies: + xml-name-validator: "npm:^5.0.0" + checksum: 10/d78f59e6b4f924aa53b6dfc56949959229cae7fe05ea9374eb38d11edcec01398b7f5d7a12576bd5acc57ff446abb5c9115cd83b9d882555015437cf858d42f0 + languageName: node + linkType: hard + +"walk-up-path@npm:^3.0.1": + version: 3.0.1 + resolution: "walk-up-path@npm:3.0.1" + checksum: 10/9ffca02fe30fb65f6db531260582988c5e766f4c739cf86a6109380a7f791236b5d0b92b1dce37a6f73e22dca6bc9d93bf3700413e16251b2bd6bbd1ca2be316 + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.0, wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: "npm:^1.0.3" + checksum: 10/182ebac8ca0b96845fae6ef44afd4619df6987fe5cf552fdee8396d3daa1fb9b8ec5c6c69855acb7b3c1231571393bd1f0a4cdc4028d421575348f64bb0a8817 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10/b65b9f8d6854572a84a5c69615152b63371395f0c5dcd6729c45789052296df54314db2bc3e977df41705eacb8bc79c247cee139a63fa695192f95816ed528ad + languageName: node + linkType: hard + +"webidl-conversions@npm:^4.0.2": + version: 4.0.2 + resolution: "webidl-conversions@npm:4.0.2" + checksum: 10/594187c36f2d7898f89c0ed3b9248a095fa549ecc1befb10a97bc884b5680dc96677f58df5579334d8e0d1018e5ef075689cfa2a6c459f45a61a9deb512cb59e + languageName: node + linkType: hard + +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: 10/4c4f65472c010eddbe648c11b977d048dd96956a625f7f8b9d64e1b30c3c1f23ea1acfd654648426ce5c743c2108a5a757c0592f02902cf7367adb7d14e67721 + languageName: node + linkType: hard + +"whatwg-encoding@npm:^3.1.1": + version: 3.1.1 + resolution: "whatwg-encoding@npm:3.1.1" + dependencies: + iconv-lite: "npm:0.6.3" + checksum: 10/bbef815eb67f91487c7f2ef96329743f5fd8357d7d62b1119237d25d41c7e452dff8197235b2d3c031365a17f61d3bb73ca49d0ed1582475aa4a670815e79534 + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^4.0.0": + version: 4.0.0 + resolution: "whatwg-mimetype@npm:4.0.0" + checksum: 10/894a618e2d90bf444b6f309f3ceb6e58cf21b2beaa00c8b333696958c4076f0c7b30b9d33413c9ffff7c5832a0a0c8569e5bb347ef44beded72aeefd0acd62e8 + languageName: node + linkType: hard + +"whatwg-url@npm:^14.0.0, whatwg-url@npm:^14.1.0": + version: 14.2.0 + resolution: "whatwg-url@npm:14.2.0" + dependencies: + tr46: "npm:^5.1.0" + webidl-conversions: "npm:^7.0.0" + checksum: 10/f0a95b0601c64f417c471536a2d828b4c16fe37c13662483a32f02f183ed0f441616609b0663fb791e524e8cd56d9a86dd7366b1fc5356048ccb09b576495e7c + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10/f95adbc1e80820828b45cc671d97da7cd5e4ef9deb426c31bcd5ab00dc7103042291613b3ef3caec0a2335ed09e0d5ed026c940755dbb6d404e2b27f940fdf07 + languageName: node + linkType: hard + +"whatwg-url@npm:^7.0.0": + version: 7.1.0 + resolution: "whatwg-url@npm:7.1.0" + dependencies: + lodash.sortby: "npm:^4.7.0" + tr46: "npm:^1.0.1" + webidl-conversions: "npm:^4.0.2" + checksum: 10/769fd35838b4e50536ae08d836472e86adbedda1d5493ea34353c55468147e7868b91d2535b59e01a9e7331ab7e4cdfdf5490c279c045da23c327cf33e32f755 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10/4782f8a1d6b8fc12c65e968fea49f59752bf6302dc43036c3bf87da718a80710f61a062516e9764c70008b487929a73546125570acea95c5b5dcc8ac3052c70f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10/f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 + languageName: node + linkType: hard + +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10/6ec99e89ba32c7e748b8a3144e64bfc74aa63e2b2eacbb61a0060ad0b961eb1a632b08fb1de067ed59b002cec3e21de18299216ebf2325ef0f78e0f121e14e90 + languageName: node + linkType: hard + +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10/0de6e6cd8f2f94a8b5ca44e84cf1751eadcac3ebedcdc6e5fbbe6c8011904afcbc1a2777c53496ec02ced7b81f2e7eda61e76bf8262a8bc3ceaa1f6040508051 + languageName: node + linkType: hard + +"wide-align@npm:1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: "npm:^1.0.2 || 2 || 3 || 4" + checksum: 10/d5f8027b9a8255a493a94e4ec1b74a27bff6679d5ffe29316a3215e4712945c84ef73ca4045c7e20ae7d0c72f5f57f296e04a4928e773d4276a2f1222e4c2e99 + languageName: node + linkType: hard + +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 10/497d40beb2bdb08e6d38754faa17ce20b0bf1306327f80cb777927edb23f461ee1f6bc659b3c3c93f26b08e1cf4b46acc5bae8fda1f0be3b5ab9a1a0211034cd + languageName: node + linkType: hard + +"workerd@npm:1.20250404.0": + version: 1.20250404.0 + resolution: "workerd@npm:1.20250404.0" + dependencies: + "@cloudflare/workerd-darwin-64": "npm:1.20250404.0" + "@cloudflare/workerd-darwin-arm64": "npm:1.20250404.0" + "@cloudflare/workerd-linux-64": "npm:1.20250404.0" + "@cloudflare/workerd-linux-arm64": "npm:1.20250404.0" + "@cloudflare/workerd-windows-64": "npm:1.20250404.0" + dependenciesMeta: + "@cloudflare/workerd-darwin-64": + optional: true + "@cloudflare/workerd-darwin-arm64": + optional: true + "@cloudflare/workerd-linux-64": + optional: true + "@cloudflare/workerd-linux-arm64": + optional: true + "@cloudflare/workerd-windows-64": + optional: true + bin: + workerd: bin/workerd + checksum: 10/0809a8e15fceaa12f66171a701bd086eb23409349de5849d35b7ce02672cdd77a0e8c592280a5ad7cae55c8f305385c01bb6d529ef8afb56f62ac97d827c9507 + languageName: node + linkType: hard + +"wrangler@npm:4.7.2": + version: 4.7.2 + resolution: "wrangler@npm:4.7.2" + dependencies: + "@cloudflare/kv-asset-handler": "npm:0.4.0" + "@cloudflare/unenv-preset": "npm:2.3.1" + blake3-wasm: "npm:2.1.5" + esbuild: "npm:0.24.2" + fsevents: "npm:~2.3.2" + miniflare: "npm:4.20250404.0" + path-to-regexp: "npm:6.3.0" + sharp: "npm:^0.33.5" + unenv: "npm:2.0.0-rc.15" + workerd: "npm:1.20250404.0" + peerDependencies: + "@cloudflare/workers-types": ^4.20250404.0 + dependenciesMeta: + fsevents: + optional: true + sharp: + optional: true + peerDependenciesMeta: + "@cloudflare/workers-types": + optional: true + bin: + wrangler: bin/wrangler.js + wrangler2: bin/wrangler.js + checksum: 10/34ae6c5d2afd69ec6d4d7a94774a323ca9a37498346a79936df1c4c64614295bc0a88fa9065fb6b866c7dd64653ec8555ba57269ceabc2f82e11102e703cb73f + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10/cebdaeca3a6880da410f75209e68cd05428580de5ad24535f22696d7d9cab134d1f8498599f344c3cf0fb37c1715807a183778d8c648d6cc0cb5ff2bb4236540 + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.0.1": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10/0d64f2d438e0b555e693b95aee7b2689a12c3be5ac458192a1ce28f542a6e9e59ddfecc37520910c2c88eb1f82a5411260566dba5064e8f9895e76e169e76187 + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10/7b1e4b35e9bb2312d2ee9ee7dc95b8cb5f8b4b5a89f7dde5543fe66c1e3715663094defa50d75454ac900bd210f702d575f15f3f17fa9ec0291806d2578d1ddf + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10/159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"write-file-atomic@npm:5.0.1, write-file-atomic@npm:^5.0.0": + version: 5.0.1 + resolution: "write-file-atomic@npm:5.0.1" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^4.0.1" + checksum: 10/648efddba54d478d0e4330ab6f239976df3b9752b123db5dc9405d9b5af768fa9d70ce60c52fdbe61d1200d24350bc4fbcbaf09288496c2be050de126bd95b7e + languageName: node + linkType: hard + +"write-file-atomic@npm:^2.4.2": + version: 2.4.3 + resolution: "write-file-atomic@npm:2.4.3" + dependencies: + graceful-fs: "npm:^4.1.11" + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^3.0.2" + checksum: 10/15ce863dce07075d0decedd7c9094f4461e46139d28a758c53162f24c0791c16cd2e7a76baa5b47b1a851fbb51e16f2fab739afb156929b22628f3225437135c + languageName: node + linkType: hard + +"write-json-file@npm:^3.2.0": + version: 3.2.0 + resolution: "write-json-file@npm:3.2.0" + dependencies: + detect-indent: "npm:^5.0.0" + graceful-fs: "npm:^4.1.15" + make-dir: "npm:^2.1.0" + pify: "npm:^4.0.1" + sort-keys: "npm:^2.0.0" + write-file-atomic: "npm:^2.4.2" + checksum: 10/2b97ce2027d53c28a33e4a8e7b0d565faf785988b3776f9e0c68d36477c1fb12639fd0d70877d92a861820707966c62ea9c5f7a36a165d615fd47ca8e24c8371 + languageName: node + linkType: hard + +"write-pkg@npm:4.0.0": + version: 4.0.0 + resolution: "write-pkg@npm:4.0.0" + dependencies: + sort-keys: "npm:^2.0.0" + type-fest: "npm:^0.4.1" + write-json-file: "npm:^3.2.0" + checksum: 10/7864d44370f42a6761f6898d07ee2818c7a2faad45116580cf779f3adaf94e4bea5557612533a6c421c32323253ecb63b50615094960a637aeaef5df0fd2d6cd + languageName: node + linkType: hard + +"ws@npm:8.18.0": + version: 8.18.0 + resolution: "ws@npm:8.18.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10/70dfe53f23ff4368d46e4c0b1d4ca734db2c4149c6f68bc62cb16fc21f753c47b35fcc6e582f3bdfba0eaeb1c488cddab3c2255755a5c3eecb251431e42b3ff6 + languageName: node + linkType: hard + +"ws@npm:^8.18.0": + version: 8.18.1 + resolution: "ws@npm:8.18.1" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10/3f38e9594f2af5b6324138e86b74df7d77bbb8e310bf8188679dd80bac0d1f47e51536a1923ac3365f31f3d8b25ea0b03e4ade466aa8292a86cd5defca64b19b + languageName: node + linkType: hard + +"xhr-mock@npm:2.5.1": + version: 2.5.1 + resolution: "xhr-mock@npm:2.5.1" + dependencies: + global: "npm:^4.3.0" + url: "npm:^0.11.0" + checksum: 10/5f7ebb9621de872c447a109e9e414a8c53b1702e51a98a4d1471e3684c5022432b53fa9a8e6ef4066ff887397bae4bbbb36fc9370c9a365042e76a0e1ec45c60 + languageName: node + linkType: hard + +"xml-name-validator@npm:^5.0.0": + version: 5.0.0 + resolution: "xml-name-validator@npm:5.0.0" + checksum: 10/43f30f3f6786e406dd665acf08cd742d5f8a46486bd72517edb04b27d1bcd1599664c2a4a99fc3f1e56a3194bff588b12f178b7972bc45c8047bdc4c3ac8d4a1 + languageName: node + linkType: hard + +"xmlchars@npm:^2.2.0": + version: 2.2.0 + resolution: "xmlchars@npm:2.2.0" + checksum: 10/4ad5924974efd004a47cce6acf5c0269aee0e62f9a805a426db3337af7bcbd331099df174b024ace4fb18971b8a56de386d2e73a1c4b020e3abd63a4a9b917f1 + languageName: node + linkType: hard + +"xtend@npm:~4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: 10/ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10/5f1b5f95e3775de4514edbb142398a2c37849ccfaf04a015be5d75521e9629d3be29bd4432d23c57f37e5b61ade592fb0197022e9993f81a06a5afbdcda9346d + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10/4cb02b42b8a93b5cf50caf5d8e9beb409400a8a4d85e83bb0685c1457e9ac0b7a00819e9f5991ac25ffabb56a78e2f017c1acc010b3a1babfe6de690ba531abd + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10/1884d272d485845ad04759a255c71775db0fac56308764b4c77ea56a20d56679fad340213054c8c9c9c26fcfd4c4b2a90df993b7e0aaf3cdb73c618d1d1a802a + languageName: node + linkType: hard + +"yaml@npm:^2.6.0": + version: 2.7.1 + resolution: "yaml@npm:2.7.1" + bin: + yaml: bin.mjs + checksum: 10/af57658d37c5efae4bac7204589b742ae01878a278554d632f01012868cf7fa66cba09b39140f12e7f6ceecc693ae52bcfb737596c4827e6e233338cb3a9528e + languageName: node + linkType: hard + +"yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10/9dc2c217ea3bf8d858041252d43e074f7166b53f3d010a8c711275e09cd3d62a002969a39858b92bbda2a6a63a585c7127014534a560b9c69ed2d923d113406e + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 10/0188f430a0f496551d09df6719a9132a3469e47fe2747208b1dd0ab2bb0c512a95d0b081628bbca5400fb20dbf2fabe63d22badb346cecadffdd948b049f3fcc + languageName: node + linkType: hard + +"yargs@npm:17.7.2, yargs@npm:^17.6.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10/abb3e37678d6e38ea85485ed86ebe0d1e3464c640d7d9069805ea0da12f69d5a32df8e5625e370f9c96dd1c2dc088ab2d0a4dd32af18222ef3c4224a19471576 + languageName: node + linkType: hard + +"yargs@npm:^16.0.0, yargs@npm:^16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: "npm:^7.0.2" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.0" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^20.2.2" + checksum: 10/807fa21211d2117135d557f95fcd3c3d390530cda2eca0c840f1d95f0f40209dcfeb5ec18c785a1f3425896e623e3b2681e8bb7b6600060eda1c3f4804e7957e + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 10/2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard + +"yoctocolors@npm:^2.0.0": + version: 2.1.1 + resolution: "yoctocolors@npm:2.1.1" + checksum: 10/563fbec88bce9716d1044bc98c96c329e1d7a7c503e6f1af68f1ff914adc3ba55ce953c871395e2efecad329f85f1632f51a99c362032940321ff80c42a6f74d + languageName: node + linkType: hard + +"youch@npm:3.3.4": + version: 3.3.4 + resolution: "youch@npm:3.3.4" + dependencies: + cookie: "npm:^0.7.1" + mustache: "npm:^4.2.0" + stacktracey: "npm:^2.1.8" + checksum: 10/3ba978fe156727c30a88e044ea42308b85462c6c6b00a63af40dd561cb920ad3102bd68feb06909bf1246358e1293e3f90f86767478474e9afe82b621c9daa0f + languageName: node + linkType: hard + +"zod@npm:3.22.3": + version: 3.22.3 + resolution: "zod@npm:3.22.3" + checksum: 10/3aad6e6b61ddceaeb887dccc5f747903e619b09dfd208f6dc30eef15edf3942b8e6cd97a08e080c9c8723575446941edb823a8881c512e00e8dd3085f20659cc + languageName: node + linkType: hard + +"zod@npm:^3.22.3": + version: 3.24.2 + resolution: "zod@npm:3.24.2" + checksum: 10/604c62a8cf8e330d78b106a557f4b44f5d14845d20b1360a423ccc09b58cb8525ccf7e4b40cf1bd4852d22393d2c67774b5817ec5a2fedab25f543b36ed15943 + languageName: node + linkType: hard